mirror of
https://github.com/googleapis/googleapis.git
synced 2026-08-14 12:42:59 +02:00
691 lines
29 KiB
Protocol Buffer
691 lines
29 KiB
Protocol Buffer
// Copyright 2025 Google LLC
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
syntax = "proto3";
|
|
|
|
package google.cloud.aiplatform.v1;
|
|
|
|
import "google/api/field_behavior.proto";
|
|
import "google/api/resource.proto";
|
|
import "google/protobuf/duration.proto";
|
|
import "google/protobuf/struct.proto";
|
|
import "google/protobuf/timestamp.proto";
|
|
import "google/protobuf/wrappers.proto";
|
|
|
|
option csharp_namespace = "Google.Cloud.AIPlatform.V1";
|
|
option go_package = "cloud.google.com/go/aiplatform/apiv1/aiplatformpb;aiplatformpb";
|
|
option java_multiple_files = true;
|
|
option java_outer_classname = "StudyProto";
|
|
option java_package = "com.google.cloud.aiplatform.v1";
|
|
option php_namespace = "Google\\Cloud\\AIPlatform\\V1";
|
|
option ruby_package = "Google::Cloud::AIPlatform::V1";
|
|
|
|
// A message representing a Study.
|
|
message Study {
|
|
option (google.api.resource) = {
|
|
type: "aiplatform.googleapis.com/Study"
|
|
pattern: "projects/{project}/locations/{location}/studies/{study}"
|
|
};
|
|
|
|
// Describes the Study state.
|
|
enum State {
|
|
// The study state is unspecified.
|
|
STATE_UNSPECIFIED = 0;
|
|
|
|
// The study is active.
|
|
ACTIVE = 1;
|
|
|
|
// The study is stopped due to an internal error.
|
|
INACTIVE = 2;
|
|
|
|
// The study is done when the service exhausts the parameter search space
|
|
// or max_trial_count is reached.
|
|
COMPLETED = 3;
|
|
}
|
|
|
|
// Output only. The name of a study. The study's globally unique identifier.
|
|
// Format: `projects/{project}/locations/{location}/studies/{study}`
|
|
string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Required. Describes the Study, default value is empty string.
|
|
string display_name = 2 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
// Required. Configuration of the Study.
|
|
StudySpec study_spec = 3 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
// Output only. The detailed state of a Study.
|
|
State state = 4 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. Time at which the study was created.
|
|
google.protobuf.Timestamp create_time = 5
|
|
[(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. A human readable reason why the Study is inactive.
|
|
// This should be empty if a study is ACTIVE or COMPLETED.
|
|
string inactive_reason = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
}
|
|
|
|
// A message representing a Trial. A Trial contains a unique set of Parameters
|
|
// that has been or will be evaluated, along with the objective metrics got by
|
|
// running the Trial.
|
|
message Trial {
|
|
option (google.api.resource) = {
|
|
type: "aiplatform.googleapis.com/Trial"
|
|
pattern: "projects/{project}/locations/{location}/studies/{study}/trials/{trial}"
|
|
};
|
|
|
|
// A message representing a parameter to be tuned.
|
|
message Parameter {
|
|
// Output only. The ID of the parameter. The parameter should be defined in
|
|
// [StudySpec's
|
|
// Parameters][google.cloud.aiplatform.v1.StudySpec.parameters].
|
|
string parameter_id = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. The value of the parameter.
|
|
// `number_value` will be set if a parameter defined in StudySpec is
|
|
// in type 'INTEGER', 'DOUBLE' or 'DISCRETE'.
|
|
// `string_value` will be set if a parameter defined in StudySpec is
|
|
// in type 'CATEGORICAL'.
|
|
google.protobuf.Value value = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
}
|
|
|
|
// Describes a Trial state.
|
|
enum State {
|
|
// The Trial state is unspecified.
|
|
STATE_UNSPECIFIED = 0;
|
|
|
|
// Indicates that a specific Trial has been requested, but it has not yet
|
|
// been suggested by the service.
|
|
REQUESTED = 1;
|
|
|
|
// Indicates that the Trial has been suggested.
|
|
ACTIVE = 2;
|
|
|
|
// Indicates that the Trial should stop according to the service.
|
|
STOPPING = 3;
|
|
|
|
// Indicates that the Trial is completed successfully.
|
|
SUCCEEDED = 4;
|
|
|
|
// Indicates that the Trial should not be attempted again.
|
|
// The service will set a Trial to INFEASIBLE when it's done but missing
|
|
// the final_measurement.
|
|
INFEASIBLE = 5;
|
|
}
|
|
|
|
// Output only. Resource name of the Trial assigned by the service.
|
|
string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. The identifier of the Trial assigned by the service.
|
|
string id = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. The detailed state of the Trial.
|
|
State state = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. The parameters of the Trial.
|
|
repeated Parameter parameters = 4 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. The final measurement containing the objective value.
|
|
Measurement final_measurement = 5 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. A list of measurements that are strictly lexicographically
|
|
// ordered by their induced tuples (steps, elapsed_duration).
|
|
// These are used for early stopping computations.
|
|
repeated Measurement measurements = 6
|
|
[(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. Time when the Trial was started.
|
|
google.protobuf.Timestamp start_time = 7
|
|
[(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. Time when the Trial's status changed to `SUCCEEDED` or
|
|
// `INFEASIBLE`.
|
|
google.protobuf.Timestamp end_time = 8
|
|
[(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. The identifier of the client that originally requested this
|
|
// Trial. Each client is identified by a unique client_id. When a client asks
|
|
// for a suggestion, Vertex AI Vizier will assign it a Trial. The client
|
|
// should evaluate the Trial, complete it, and report back to Vertex AI
|
|
// Vizier. If suggestion is asked again by same client_id before the Trial is
|
|
// completed, the same Trial will be returned. Multiple clients with
|
|
// different client_ids can ask for suggestions simultaneously, each of them
|
|
// will get their own Trial.
|
|
string client_id = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. A human readable string describing why the Trial is
|
|
// infeasible. This is set only if Trial state is `INFEASIBLE`.
|
|
string infeasible_reason = 10 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. The CustomJob name linked to the Trial.
|
|
// It's set for a HyperparameterTuningJob's Trial.
|
|
string custom_job = 11 [
|
|
(google.api.field_behavior) = OUTPUT_ONLY,
|
|
(google.api.resource_reference) = {
|
|
type: "aiplatform.googleapis.com/CustomJob"
|
|
}
|
|
];
|
|
|
|
// Output only. URIs for accessing [interactive
|
|
// shells](https://cloud.google.com/vertex-ai/docs/training/monitor-debug-interactive-shell)
|
|
// (one URI for each training node). Only available if this trial is part of
|
|
// a
|
|
// [HyperparameterTuningJob][google.cloud.aiplatform.v1.HyperparameterTuningJob]
|
|
// and the job's
|
|
// [trial_job_spec.enable_web_access][google.cloud.aiplatform.v1.CustomJobSpec.enable_web_access]
|
|
// field is `true`.
|
|
//
|
|
// The keys are names of each node used for the trial; for example,
|
|
// `workerpool0-0` for the primary node, `workerpool1-0` for the first node in
|
|
// the second worker pool, and `workerpool1-1` for the second node in the
|
|
// second worker pool.
|
|
//
|
|
// The values are the URIs for each node's interactive shell.
|
|
map<string, string> web_access_uris = 12
|
|
[(google.api.field_behavior) = OUTPUT_ONLY];
|
|
}
|
|
|
|
message TrialContext {
|
|
// A human-readable field which can store a description of this context.
|
|
// This will become part of the resulting Trial's description field.
|
|
string description = 1;
|
|
|
|
// If/when a Trial is generated or selected from this Context,
|
|
// its Parameters will match any parameters specified here.
|
|
// (I.e. if this context specifies parameter name:'a' int_value:3,
|
|
// then a resulting Trial will have int_value:3 for its parameter named
|
|
// 'a'.) Note that we first attempt to match existing REQUESTED Trials with
|
|
// contexts, and if there are no matches, we generate suggestions in the
|
|
// subspace defined by the parameters specified here.
|
|
// NOTE: a Context without any Parameters matches the entire feasible search
|
|
// space.
|
|
repeated Trial.Parameter parameters = 2;
|
|
}
|
|
|
|
// Time-based Constraint for Study
|
|
message StudyTimeConstraint {
|
|
oneof constraint {
|
|
// Counts the wallclock time passed since the creation of this Study.
|
|
google.protobuf.Duration max_duration = 1;
|
|
|
|
// Compares the wallclock time to this time. Must use UTC timezone.
|
|
google.protobuf.Timestamp end_time = 2;
|
|
}
|
|
}
|
|
|
|
// Represents specification of a Study.
|
|
message StudySpec {
|
|
// Represents a metric to optimize.
|
|
message MetricSpec {
|
|
// Used in safe optimization to specify threshold levels and risk tolerance.
|
|
message SafetyMetricConfig {
|
|
// Safety threshold (boundary value between safe and unsafe). NOTE that if
|
|
// you leave SafetyMetricConfig unset, a default value of 0 will be used.
|
|
double safety_threshold = 1;
|
|
|
|
// Desired minimum fraction of safe trials (over total number of trials)
|
|
// that should be targeted by the algorithm at any time during the
|
|
// study (best effort). This should be between 0.0 and 1.0 and a value of
|
|
// 0.0 means that there is no minimum and an algorithm proceeds without
|
|
// targeting any specific fraction. A value of 1.0 means that the
|
|
// algorithm attempts to only Suggest safe Trials.
|
|
optional double desired_min_safe_trials_fraction = 2;
|
|
}
|
|
|
|
// The available types of optimization goals.
|
|
enum GoalType {
|
|
// Goal Type will default to maximize.
|
|
GOAL_TYPE_UNSPECIFIED = 0;
|
|
|
|
// Maximize the goal metric.
|
|
MAXIMIZE = 1;
|
|
|
|
// Minimize the goal metric.
|
|
MINIMIZE = 2;
|
|
}
|
|
|
|
// Required. The ID of the metric. Must not contain whitespaces and must be
|
|
// unique amongst all MetricSpecs.
|
|
string metric_id = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
// Required. The optimization goal of the metric.
|
|
GoalType goal = 2 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
// Used for safe search. In the case, the metric will be a safety
|
|
// metric. You must provide a separate metric for objective metric.
|
|
optional SafetyMetricConfig safety_config = 3;
|
|
}
|
|
|
|
// Represents a single parameter to optimize.
|
|
message ParameterSpec {
|
|
// Value specification for a parameter in `DOUBLE` type.
|
|
message DoubleValueSpec {
|
|
// Required. Inclusive minimum value of the parameter.
|
|
double min_value = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
// Required. Inclusive maximum value of the parameter.
|
|
double max_value = 2 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
// A default value for a `DOUBLE` parameter that is assumed to be a
|
|
// relatively good starting point. Unset value signals that there is no
|
|
// offered starting point.
|
|
//
|
|
// Currently only supported by the Vertex AI Vizier service. Not supported
|
|
// by HyperparameterTuningJob or TrainingPipeline.
|
|
optional double default_value = 4;
|
|
}
|
|
|
|
// Value specification for a parameter in `INTEGER` type.
|
|
message IntegerValueSpec {
|
|
// Required. Inclusive minimum value of the parameter.
|
|
int64 min_value = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
// Required. Inclusive maximum value of the parameter.
|
|
int64 max_value = 2 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
// A default value for an `INTEGER` parameter that is assumed to be a
|
|
// relatively good starting point. Unset value signals that there is no
|
|
// offered starting point.
|
|
//
|
|
// Currently only supported by the Vertex AI Vizier service. Not supported
|
|
// by HyperparameterTuningJob or TrainingPipeline.
|
|
optional int64 default_value = 4;
|
|
}
|
|
|
|
// Value specification for a parameter in `CATEGORICAL` type.
|
|
message CategoricalValueSpec {
|
|
// Required. The list of possible categories.
|
|
repeated string values = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
// A default value for a `CATEGORICAL` parameter that is assumed to be a
|
|
// relatively good starting point. Unset value signals that there is no
|
|
// offered starting point.
|
|
//
|
|
// Currently only supported by the Vertex AI Vizier service. Not supported
|
|
// by HyperparameterTuningJob or TrainingPipeline.
|
|
optional string default_value = 3;
|
|
}
|
|
|
|
// Value specification for a parameter in `DISCRETE` type.
|
|
message DiscreteValueSpec {
|
|
// Required. A list of possible values.
|
|
// The list should be in increasing order and at least 1e-10 apart.
|
|
// For instance, this parameter might have possible settings of 1.5, 2.5,
|
|
// and 4.0. This list should not contain more than 1,000 values.
|
|
repeated double values = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
// A default value for a `DISCRETE` parameter that is assumed to be a
|
|
// relatively good starting point. Unset value signals that there is no
|
|
// offered starting point. It automatically rounds to the
|
|
// nearest feasible discrete point.
|
|
//
|
|
// Currently only supported by the Vertex AI Vizier service. Not supported
|
|
// by HyperparameterTuningJob or TrainingPipeline.
|
|
optional double default_value = 3;
|
|
}
|
|
|
|
// Represents a parameter spec with condition from its parent parameter.
|
|
message ConditionalParameterSpec {
|
|
// Represents the spec to match discrete values from parent parameter.
|
|
message DiscreteValueCondition {
|
|
// Required. Matches values of the parent parameter of 'DISCRETE' type.
|
|
// All values must exist in `discrete_value_spec` of parent parameter.
|
|
//
|
|
// The Epsilon of the value matching is 1e-10.
|
|
repeated double values = 1 [(google.api.field_behavior) = REQUIRED];
|
|
}
|
|
|
|
// Represents the spec to match integer values from parent parameter.
|
|
message IntValueCondition {
|
|
// Required. Matches values of the parent parameter of 'INTEGER' type.
|
|
// All values must lie in `integer_value_spec` of parent parameter.
|
|
repeated int64 values = 1 [(google.api.field_behavior) = REQUIRED];
|
|
}
|
|
|
|
// Represents the spec to match categorical values from parent parameter.
|
|
message CategoricalValueCondition {
|
|
// Required. Matches values of the parent parameter of 'CATEGORICAL'
|
|
// type. All values must exist in `categorical_value_spec` of parent
|
|
// parameter.
|
|
repeated string values = 1 [(google.api.field_behavior) = REQUIRED];
|
|
}
|
|
|
|
// A set of parameter values from the parent ParameterSpec's feasible
|
|
// space.
|
|
oneof parent_value_condition {
|
|
// The spec for matching values from a parent parameter of
|
|
// `DISCRETE` type.
|
|
DiscreteValueCondition parent_discrete_values = 2;
|
|
|
|
// The spec for matching values from a parent parameter of `INTEGER`
|
|
// type.
|
|
IntValueCondition parent_int_values = 3;
|
|
|
|
// The spec for matching values from a parent parameter of
|
|
// `CATEGORICAL` type.
|
|
CategoricalValueCondition parent_categorical_values = 4;
|
|
}
|
|
|
|
// Required. The spec for a conditional parameter.
|
|
ParameterSpec parameter_spec = 1 [(google.api.field_behavior) = REQUIRED];
|
|
}
|
|
|
|
// The type of scaling that should be applied to this parameter.
|
|
enum ScaleType {
|
|
// By default, no scaling is applied.
|
|
SCALE_TYPE_UNSPECIFIED = 0;
|
|
|
|
// Scales the feasible space to (0, 1) linearly.
|
|
UNIT_LINEAR_SCALE = 1;
|
|
|
|
// Scales the feasible space logarithmically to (0, 1). The entire
|
|
// feasible space must be strictly positive.
|
|
UNIT_LOG_SCALE = 2;
|
|
|
|
// Scales the feasible space "reverse" logarithmically to (0, 1). The
|
|
// result is that values close to the top of the feasible space are spread
|
|
// out more than points near the bottom. The entire feasible space must be
|
|
// strictly positive.
|
|
UNIT_REVERSE_LOG_SCALE = 3;
|
|
}
|
|
|
|
oneof parameter_value_spec {
|
|
// The value spec for a 'DOUBLE' parameter.
|
|
DoubleValueSpec double_value_spec = 2;
|
|
|
|
// The value spec for an 'INTEGER' parameter.
|
|
IntegerValueSpec integer_value_spec = 3;
|
|
|
|
// The value spec for a 'CATEGORICAL' parameter.
|
|
CategoricalValueSpec categorical_value_spec = 4;
|
|
|
|
// The value spec for a 'DISCRETE' parameter.
|
|
DiscreteValueSpec discrete_value_spec = 5;
|
|
}
|
|
|
|
// Required. The ID of the parameter. Must not contain whitespaces and must
|
|
// be unique amongst all ParameterSpecs.
|
|
string parameter_id = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
// How the parameter should be scaled.
|
|
// Leave unset for `CATEGORICAL` parameters.
|
|
ScaleType scale_type = 6;
|
|
|
|
// A conditional parameter node is active if the parameter's value matches
|
|
// the conditional node's parent_value_condition.
|
|
//
|
|
// If two items in conditional_parameter_specs have the same name, they
|
|
// must have disjoint parent_value_condition.
|
|
repeated ConditionalParameterSpec conditional_parameter_specs = 10;
|
|
}
|
|
|
|
// The decay curve automated stopping rule builds a Gaussian Process
|
|
// Regressor to predict the final objective value of a Trial based on the
|
|
// already completed Trials and the intermediate measurements of the current
|
|
// Trial. Early stopping is requested for the current Trial if there is very
|
|
// low probability to exceed the optimal value found so far.
|
|
message DecayCurveAutomatedStoppingSpec {
|
|
// True if
|
|
// [Measurement.elapsed_duration][google.cloud.aiplatform.v1.Measurement.elapsed_duration]
|
|
// is used as the x-axis of each Trials Decay Curve. Otherwise,
|
|
// [Measurement.step_count][google.cloud.aiplatform.v1.Measurement.step_count]
|
|
// will be used as the x-axis.
|
|
bool use_elapsed_duration = 1;
|
|
}
|
|
|
|
// The median automated stopping rule stops a pending Trial if the Trial's
|
|
// best objective_value is strictly below the median 'performance' of all
|
|
// completed Trials reported up to the Trial's last measurement.
|
|
// Currently, 'performance' refers to the running average of the objective
|
|
// values reported by the Trial in each measurement.
|
|
message MedianAutomatedStoppingSpec {
|
|
// True if median automated stopping rule applies on
|
|
// [Measurement.elapsed_duration][google.cloud.aiplatform.v1.Measurement.elapsed_duration].
|
|
// It means that elapsed_duration field of latest measurement of current
|
|
// Trial is used to compute median objective value for each completed
|
|
// Trials.
|
|
bool use_elapsed_duration = 1;
|
|
}
|
|
|
|
// Configuration for ConvexAutomatedStoppingSpec.
|
|
// When there are enough completed trials (configured by
|
|
// min_measurement_count), for pending trials with enough measurements and
|
|
// steps, the policy first computes an overestimate of the objective value at
|
|
// max_num_steps according to the slope of the incomplete objective value
|
|
// curve. No prediction can be made if the curve is completely flat. If the
|
|
// overestimation is worse than the best objective value of the completed
|
|
// trials, this pending trial will be early-stopped, but a last measurement
|
|
// will be added to the pending trial with max_num_steps and predicted
|
|
// objective value from the autoregression model.
|
|
message ConvexAutomatedStoppingSpec {
|
|
// Steps used in predicting the final objective for early stopped trials. In
|
|
// general, it's set to be the same as the defined steps in training /
|
|
// tuning. If not defined, it will learn it from the completed trials. When
|
|
// use_steps is false, this field is set to the maximum elapsed seconds.
|
|
int64 max_step_count = 1;
|
|
|
|
// Minimum number of steps for a trial to complete. Trials which do not have
|
|
// a measurement with step_count > min_step_count won't be considered for
|
|
// early stopping. It's ok to set it to 0, and a trial can be early stopped
|
|
// at any stage. By default, min_step_count is set to be one-tenth of the
|
|
// max_step_count.
|
|
// When use_elapsed_duration is true, this field is set to the minimum
|
|
// elapsed seconds.
|
|
int64 min_step_count = 2;
|
|
|
|
// The minimal number of measurements in a Trial. Early-stopping checks
|
|
// will not trigger if less than min_measurement_count+1 completed trials or
|
|
// pending trials with less than min_measurement_count measurements. If not
|
|
// defined, the default value is 5.
|
|
int64 min_measurement_count = 3;
|
|
|
|
// The hyper-parameter name used in the tuning job that stands for learning
|
|
// rate. Leave it blank if learning rate is not in a parameter in tuning.
|
|
// The learning_rate is used to estimate the objective value of the ongoing
|
|
// trial.
|
|
string learning_rate_parameter_name = 4;
|
|
|
|
// This bool determines whether or not the rule is applied based on
|
|
// elapsed_secs or steps. If use_elapsed_duration==false, the early stopping
|
|
// decision is made according to the predicted objective values according to
|
|
// the target steps. If use_elapsed_duration==true, elapsed_secs is used
|
|
// instead of steps. Also, in this case, the parameters max_num_steps and
|
|
// min_num_steps are overloaded to contain max_elapsed_seconds and
|
|
// min_elapsed_seconds.
|
|
bool use_elapsed_duration = 5;
|
|
|
|
// ConvexAutomatedStoppingSpec by default only updates the trials that needs
|
|
// to be early stopped using a newly trained auto-regressive model. When
|
|
// this flag is set to True, all stopped trials from the beginning are
|
|
// potentially updated in terms of their `final_measurement`. Also, note
|
|
// that the training logic of autoregressive models is different in this
|
|
// case. Enabling this option has shown better results and this may be the
|
|
// default option in the future.
|
|
optional bool update_all_stopped_trials = 6;
|
|
}
|
|
|
|
// The configuration (stopping conditions) for automated stopping of a Study.
|
|
// Conditions include trial budgets, time budgets, and convergence detection.
|
|
message StudyStoppingConfig {
|
|
// If true, a Study enters STOPPING_ASAP whenever it would normally enters
|
|
// STOPPING state.
|
|
//
|
|
// The bottom line is: set to true if you want to interrupt on-going
|
|
// evaluations of Trials as soon as the study stopping condition is met.
|
|
// (Please see Study.State documentation for the source of truth).
|
|
google.protobuf.BoolValue should_stop_asap = 1;
|
|
|
|
// Each "stopping rule" in this proto specifies an "if" condition. Before
|
|
// Vizier would generate a new suggestion, it first checks each specified
|
|
// stopping rule, from top to bottom in this list.
|
|
// Note that the first few rules (e.g. minimum_runtime_constraint,
|
|
// min_num_trials) will prevent other stopping rules from being evaluated
|
|
// until they are met. For example, setting `min_num_trials=5` and
|
|
// `always_stop_after= 1 hour` means that the Study will ONLY stop after it
|
|
// has 5 COMPLETED trials, even if more than an hour has passed since its
|
|
// creation. It follows the first applicable rule (whose "if" condition is
|
|
// satisfied) to make a stopping decision. If none of the specified rules
|
|
// are applicable, then Vizier decides that the study should not stop.
|
|
// If Vizier decides that the study should stop, the study enters
|
|
// STOPPING state (or STOPPING_ASAP if should_stop_asap = true).
|
|
// IMPORTANT: The automatic study state transition happens precisely as
|
|
// described above; that is, deleting trials or updating StudyConfig NEVER
|
|
// automatically moves the study state back to ACTIVE. If you want to
|
|
// _resume_ a Study that was stopped, 1) change the stopping conditions if
|
|
// necessary, 2) activate the study, and then 3) ask for suggestions.
|
|
// If the specified time or duration has not passed, do not stop the
|
|
// study.
|
|
StudyTimeConstraint minimum_runtime_constraint = 2;
|
|
|
|
// If the specified time or duration has passed, stop the study.
|
|
StudyTimeConstraint maximum_runtime_constraint = 3;
|
|
|
|
// If there are fewer than this many COMPLETED trials, do not stop the
|
|
// study.
|
|
google.protobuf.Int32Value min_num_trials = 4;
|
|
|
|
// If there are more than this many trials, stop the study.
|
|
google.protobuf.Int32Value max_num_trials = 5;
|
|
|
|
// If the objective value has not improved for this many consecutive
|
|
// trials, stop the study.
|
|
//
|
|
// WARNING: Effective only for single-objective studies.
|
|
google.protobuf.Int32Value max_num_trials_no_progress = 6;
|
|
|
|
// If the objective value has not improved for this much time, stop the
|
|
// study.
|
|
//
|
|
// WARNING: Effective only for single-objective studies.
|
|
google.protobuf.Duration max_duration_no_progress = 7;
|
|
}
|
|
|
|
// The available search algorithms for the Study.
|
|
enum Algorithm {
|
|
// The default algorithm used by Vertex AI for [hyperparameter
|
|
// tuning](https://cloud.google.com/vertex-ai/docs/training/hyperparameter-tuning-overview)
|
|
// and [Vertex AI Vizier](https://cloud.google.com/vertex-ai/docs/vizier).
|
|
ALGORITHM_UNSPECIFIED = 0;
|
|
|
|
// Simple grid search within the feasible space. To use grid search,
|
|
// all parameters must be `INTEGER`, `CATEGORICAL`, or `DISCRETE`.
|
|
GRID_SEARCH = 2;
|
|
|
|
// Simple random search within the feasible space.
|
|
RANDOM_SEARCH = 3;
|
|
}
|
|
|
|
// Describes the noise level of the repeated observations.
|
|
//
|
|
// "Noisy" means that the repeated observations with the same Trial parameters
|
|
// may lead to different metric evaluations.
|
|
enum ObservationNoise {
|
|
// The default noise level chosen by Vertex AI.
|
|
OBSERVATION_NOISE_UNSPECIFIED = 0;
|
|
|
|
// Vertex AI assumes that the objective function is (nearly)
|
|
// perfectly reproducible, and will never repeat the same Trial
|
|
// parameters.
|
|
LOW = 1;
|
|
|
|
// Vertex AI will estimate the amount of noise in metric
|
|
// evaluations, it may repeat the same Trial parameters more than once.
|
|
HIGH = 2;
|
|
}
|
|
|
|
// This indicates which measurement to use if/when the service automatically
|
|
// selects the final measurement from previously reported intermediate
|
|
// measurements. Choose this based on two considerations:
|
|
// A) Do you expect your measurements to monotonically improve?
|
|
// If so, choose LAST_MEASUREMENT. On the other hand, if you're in a
|
|
// situation where your system can "over-train" and you expect the
|
|
// performance to get better for a while but then start declining,
|
|
// choose BEST_MEASUREMENT.
|
|
// B) Are your measurements significantly noisy and/or irreproducible?
|
|
// If so, BEST_MEASUREMENT will tend to be over-optimistic, and it
|
|
// may be better to choose LAST_MEASUREMENT.
|
|
// If both or neither of (A) and (B) apply, it doesn't matter which
|
|
// selection type is chosen.
|
|
enum MeasurementSelectionType {
|
|
// Will be treated as LAST_MEASUREMENT.
|
|
MEASUREMENT_SELECTION_TYPE_UNSPECIFIED = 0;
|
|
|
|
// Use the last measurement reported.
|
|
LAST_MEASUREMENT = 1;
|
|
|
|
// Use the best measurement reported.
|
|
BEST_MEASUREMENT = 2;
|
|
}
|
|
|
|
oneof automated_stopping_spec {
|
|
// The automated early stopping spec using decay curve rule.
|
|
DecayCurveAutomatedStoppingSpec decay_curve_stopping_spec = 4;
|
|
|
|
// The automated early stopping spec using median rule.
|
|
MedianAutomatedStoppingSpec median_automated_stopping_spec = 5;
|
|
|
|
// The automated early stopping spec using convex stopping rule.
|
|
ConvexAutomatedStoppingSpec convex_automated_stopping_spec = 9;
|
|
}
|
|
|
|
// Required. Metric specs for the Study.
|
|
repeated MetricSpec metrics = 1 [(google.api.field_behavior) = REQUIRED];
|
|
|
|
// Required. The set of parameters to tune.
|
|
repeated ParameterSpec parameters = 2
|
|
[(google.api.field_behavior) = REQUIRED];
|
|
|
|
// The search algorithm specified for the Study.
|
|
Algorithm algorithm = 3;
|
|
|
|
// The observation noise level of the study.
|
|
// Currently only supported by the Vertex AI Vizier service. Not supported by
|
|
// HyperparameterTuningJob or TrainingPipeline.
|
|
ObservationNoise observation_noise = 6;
|
|
|
|
// Describe which measurement selection type will be used
|
|
MeasurementSelectionType measurement_selection_type = 7;
|
|
|
|
// Conditions for automated stopping of a Study. Enable automated stopping by
|
|
// configuring at least one condition.
|
|
optional StudyStoppingConfig study_stopping_config = 11;
|
|
}
|
|
|
|
// A message representing a Measurement of a Trial. A Measurement contains
|
|
// the Metrics got by executing a Trial using suggested hyperparameter
|
|
// values.
|
|
message Measurement {
|
|
// A message representing a metric in the measurement.
|
|
message Metric {
|
|
// Output only. The ID of the Metric. The Metric should be defined in
|
|
// [StudySpec's Metrics][google.cloud.aiplatform.v1.StudySpec.metrics].
|
|
string metric_id = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. The value for this metric.
|
|
double value = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
}
|
|
|
|
// Output only. Time that the Trial has been running at the point of this
|
|
// Measurement.
|
|
google.protobuf.Duration elapsed_duration = 1
|
|
[(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. The number of steps the machine learning model has been
|
|
// trained for. Must be non-negative.
|
|
int64 step_count = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
|
|
// Output only. A list of metrics got by evaluating the objective functions
|
|
// using suggested Parameter values.
|
|
repeated Metric metrics = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
|
|
}
|