Skip to content

Commit 0da8c53

Browse files
vertex-sdk-botcopybara-github
authored andcommitted
feat: Add preview HyperparameterTuningJob which can be run on persistent resource
PiperOrigin-RevId: 582032717
1 parent 9f46f7c commit 0da8c53

File tree

4 files changed

+776
-3
lines changed

4 files changed

+776
-3
lines changed

google/cloud/aiplatform/hyperparameter_tuning.py

+84-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@
2020

2121
import proto
2222

23-
from google.cloud.aiplatform.compat.types import study as gca_study_compat
23+
from google.cloud.aiplatform.compat.types import (
24+
study_v1beta1 as gca_study_compat_v1beta1,
25+
study as gca_study_compat,
26+
)
2427

2528
SEARCH_ALGORITHM_TO_PROTO_VALUE = {
2629
"random": gca_study_compat.StudySpec.Algorithm.RANDOM_SEARCH,
@@ -91,6 +94,46 @@ def _proto_parameter_value_spec(self) -> proto.Message:
9194
)
9295
return proto_parameter_value_spec
9396

97+
@property
98+
def _proto_parameter_value_spec_v1beta1(self) -> proto.Message:
99+
"""Converts this parameter to it's parameter value representation."""
100+
if isinstance(
101+
self._proto_parameter_value_class(),
102+
gca_study_compat.StudySpec.ParameterSpec.DoubleValueSpec,
103+
):
104+
proto_parameter_value_spec = (
105+
gca_study_compat_v1beta1.StudySpec.ParameterSpec.DoubleValueSpec()
106+
)
107+
elif isinstance(
108+
self._proto_parameter_value_class(),
109+
gca_study_compat.StudySpec.ParameterSpec.IntegerValueSpec,
110+
):
111+
proto_parameter_value_spec = (
112+
gca_study_compat_v1beta1.StudySpec.ParameterSpec.IntegerValueSpec()
113+
)
114+
elif isinstance(
115+
self._proto_parameter_value_class(),
116+
gca_study_compat.StudySpec.ParameterSpec.CategoricalValueSpec,
117+
):
118+
proto_parameter_value_spec = (
119+
gca_study_compat_v1beta1.StudySpec.ParameterSpec.CategoricalValueSpec()
120+
)
121+
elif isinstance(
122+
self._proto_parameter_value_class(),
123+
gca_study_compat.StudySpec.ParameterSpec.DiscreteValueSpec,
124+
):
125+
proto_parameter_value_spec = (
126+
gca_study_compat_v1beta1.StudySpec.ParameterSpec.DiscreteValueSpec()
127+
)
128+
else:
129+
proto_parameter_value_spec = self._proto_parameter_value_class()
130+
131+
for self_attr_key, proto_attr_key in self._parameter_value_map:
132+
setattr(
133+
proto_parameter_value_spec, proto_attr_key, getattr(self, self_attr_key)
134+
)
135+
return proto_parameter_value_spec
136+
94137
def _to_parameter_spec(
95138
self, parameter_id: str
96139
) -> gca_study_compat.StudySpec.ParameterSpec:
@@ -129,6 +172,46 @@ def _to_parameter_spec(
129172

130173
return parameter_spec
131174

175+
def _to_parameter_spec_v1beta1(
176+
self, parameter_id: str
177+
) -> gca_study_compat_v1beta1.StudySpec.ParameterSpec:
178+
"""Converts this parameter to ParameterSpec."""
179+
conditions = []
180+
if self.conditional_parameter_spec is not None:
181+
for (conditional_param_id, spec) in self.conditional_parameter_spec.items():
182+
condition = (
183+
gca_study_compat_v1beta1.StudySpec.ParameterSpec.ConditionalParameterSpec()
184+
)
185+
if self._parameter_spec_value_key == _INT_VALUE_SPEC:
186+
condition.parent_int_values = gca_study_compat_v1beta1.StudySpec.ParameterSpec.ConditionalParameterSpec.IntValueCondition(
187+
values=spec.parent_values
188+
)
189+
elif self._parameter_spec_value_key == _CATEGORICAL_VALUE_SPEC:
190+
condition.parent_categorical_values = gca_study_compat_v1beta1.StudySpec.ParameterSpec.ConditionalParameterSpec.CategoricalValueCondition(
191+
values=spec.parent_values
192+
)
193+
elif self._parameter_spec_value_key == _DISCRETE_VALUE_SPEC:
194+
condition.parent_discrete_values = gca_study_compat_v1beta1.StudySpec.ParameterSpec.ConditionalParameterSpec.DiscreteValueCondition(
195+
values=spec.parent_values
196+
)
197+
condition.parameter_spec = spec._to_parameter_spec_v1beta1(
198+
conditional_param_id
199+
)
200+
conditions.append(condition)
201+
parameter_spec = gca_study_compat_v1beta1.StudySpec.ParameterSpec(
202+
parameter_id=parameter_id,
203+
scale_type=_SCALE_TYPE_MAP.get(getattr(self, "scale", "unspecified")),
204+
conditional_parameter_specs=conditions,
205+
)
206+
207+
setattr(
208+
parameter_spec,
209+
self._parameter_spec_value_key,
210+
self._proto_parameter_value_spec_v1beta1,
211+
)
212+
213+
return parameter_spec
214+
132215

133216
class DoubleParameterSpec(_ParameterSpec):
134217

google/cloud/aiplatform/jobs.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -2036,7 +2036,7 @@ def job_spec(self):
20362036
return self._gca_resource.job_spec
20372037

20382038

2039-
class HyperparameterTuningJob(_RunnableJob):
2039+
class HyperparameterTuningJob(_RunnableJob, base.PreviewMixin):
20402040
"""Vertex AI Hyperparameter Tuning Job."""
20412041

20422042
_resource_noun = "hyperparameterTuningJobs"
@@ -2047,6 +2047,9 @@ class HyperparameterTuningJob(_RunnableJob):
20472047
_parse_resource_name_method = "parse_hyperparameter_tuning_job_path"
20482048
_format_resource_name_method = "hyperparameter_tuning_job_path"
20492049
_job_type = "training"
2050+
_preview_class = (
2051+
"google.cloud.aiplatform.aiplatform.preview.jobs.HyperparameterTuningJob"
2052+
)
20502053

20512054
def __init__(
20522055
self,

0 commit comments

Comments
 (0)