From 7603960c7cf66ab44c4c3c75156f25dbceffc3f1 Mon Sep 17 00:00:00 2001 From: Google APIs Date: Fri, 10 Nov 2023 10:44:22 -0800 Subject: [PATCH] feat: add protected_artifact_location_id to CustomJob chore: add comment fixes to Feature and FeaturestoreService feat!: add FeatureViewDataFormat, FeatureViewDataKey to FeatureOnlineStoreService feat: add NumericRestriction to Index feat: add tpu_topology to MachineResources feat: add BatchDeletePipelineJobs, BatchDeletePipelineJobsRequest and BatchDeletePipelineJobsResponse to PipelineService feat: add StudyTimeConstraint to Study PiperOrigin-RevId: 581306075 --- .../v1beta1/aiplatform_v1beta1.yaml | 26 +++++++ .../cloud/aiplatform/v1beta1/custom_job.proto | 6 ++ google/cloud/aiplatform/v1beta1/feature.proto | 42 +++++++---- .../v1beta1/feature_online_store.proto | 2 +- .../feature_online_store_service.proto | 41 ++++++++++- .../v1beta1/featurestore_service.proto | 18 ++++- google/cloud/aiplatform/v1beta1/index.proto | 55 ++++++++++++++ .../aiplatform/v1beta1/index_endpoint.proto | 9 +-- .../v1beta1/machine_resources.proto | 4 ++ .../aiplatform/v1beta1/pipeline_service.proto | 47 ++++++++++++ .../v1beta1/prediction_service.proto | 2 +- google/cloud/aiplatform/v1beta1/study.proto | 72 +++++++++++++++++++ 12 files changed, 298 insertions(+), 26 deletions(-) diff --git a/google/cloud/aiplatform/v1beta1/aiplatform_v1beta1.yaml b/google/cloud/aiplatform/v1beta1/aiplatform_v1beta1.yaml index 786a3f94d6069..7a6dbc04a2c1e 100644 --- a/google/cloud/aiplatform/v1beta1/aiplatform_v1beta1.yaml +++ b/google/cloud/aiplatform/v1beta1/aiplatform_v1beta1.yaml @@ -221,6 +221,8 @@ http: - post: '/ui/{name=projects/*/locations/*/deploymentResourcePools/*/operations/*}:cancel' - post: '/ui/{name=projects/*/locations/*/edgeDevices/*/operations/*}:cancel' - post: '/ui/{name=projects/*/locations/*/endpoints/*/operations/*}:cancel' + - post: '/ui/{name=projects/*/locations/*/extensionControllers/*/operations/*}:cancel' + - post: '/ui/{name=projects/*/locations/*/extensions/*/operations/*}:cancel' - post: '/ui/{name=projects/*/locations/*/featurestores/*/operations/*}:cancel' - post: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/operations/*}:cancel' - post: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/features/*/operations/*}:cancel' @@ -291,6 +293,8 @@ http: - delete: '/ui/{name=projects/*/locations/*/deploymentResourcePools/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/edgeDevices/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/endpoints/*/operations/*}' + - delete: '/ui/{name=projects/*/locations/*/extensionControllers/*}/operations' + - delete: '/ui/{name=projects/*/locations/*/extensions/*}/operations' - delete: '/ui/{name=projects/*/locations/*/featurestores/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/features/*/operations/*}' @@ -314,6 +318,10 @@ http: - delete: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*/operations/*}' + - delete: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}' + - delete: '/ui/{name=projects/*/locations/*/featureGroups/*/operations/*}' + - delete: '/ui/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}' + - delete: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}' - delete: '/v1beta1/{name=projects/*/locations/*/operations/*}' - delete: '/v1beta1/{name=projects/*/locations/*/datasets/*/operations/*}' - delete: '/v1beta1/{name=projects/*/locations/*/datasets/*/dataItems/*/operations/*}' @@ -367,6 +375,8 @@ http: - get: '/ui/{name=projects/*/locations/*/edgeDeploymentJobs/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/edgeDevices/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/endpoints/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/extensionControllers/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/extensions/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/featurestores/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/features/*/operations/*}' @@ -390,6 +400,10 @@ http: - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/featureGroups/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}' - get: '/v1beta1/{name=projects/*/locations/*/operations/*}' - get: '/v1beta1/{name=projects/*/locations/*/datasets/*/operations/*}' - get: '/v1beta1/{name=projects/*/locations/*/datasets/*/dataItems/*/operations/*}' @@ -442,6 +456,8 @@ http: - get: '/ui/{name=projects/*/locations/*/deploymentResourcePools/*}/operations' - get: '/ui/{name=projects/*/locations/*/edgeDevices/*}/operations' - get: '/ui/{name=projects/*/locations/*/endpoints/*}/operations' + - get: '/ui/{name=projects/*/locations/*/extensionControllers/*}/operations' + - get: '/ui/{name=projects/*/locations/*/extensions/*}/operations' - get: '/ui/{name=projects/*/locations/*/featurestores/*}/operations' - get: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*}/operations' - get: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/features/*}/operations' @@ -465,6 +481,10 @@ http: - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*}/operations' - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*}/operations' - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*}/operations' + - get: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}:wait' + - get: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}:wait' + - get: '/ui/{name=projects/*/locations/*/featureGroups/*/operations/*}:wait' + - get: '/ui/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}:wait' - get: '/v1beta1/{name=projects/*/locations/*}/operations' - get: '/v1beta1/{name=projects/*/locations/*/datasets/*}/operations' - get: '/v1beta1/{name=projects/*/locations/*/datasets/*/dataItems/*}/operations' @@ -517,6 +537,8 @@ http: - post: '/ui/{name=projects/*/locations/*/deploymentResourcePools/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/edgeDevices/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/endpoints/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/extensionControllers/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/extensions/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/featurestores/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/features/*/operations/*}:wait' @@ -540,6 +562,10 @@ http: - post: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/featureGroups/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}:wait' - post: '/v1beta1/{name=projects/*/locations/*/operations/*}:wait' - post: '/v1beta1/{name=projects/*/locations/*/datasets/*/operations/*}:wait' - post: '/v1beta1/{name=projects/*/locations/*/datasets/*/dataItems/*/operations/*}:wait' diff --git a/google/cloud/aiplatform/v1beta1/custom_job.proto b/google/cloud/aiplatform/v1beta1/custom_job.proto index 399c14eaeb177..300642aea002b 100644 --- a/google/cloud/aiplatform/v1beta1/custom_job.proto +++ b/google/cloud/aiplatform/v1beta1/custom_job.proto @@ -195,6 +195,12 @@ message CustomJobSpec { // * AIP_TENSORBOARD_LOG_DIR = `//logs/` GcsDestination base_output_directory = 6; + // The ID of the location to store protected artifacts. e.g. us-central1. + // Populate only when the location is different than CustomJob location. + // List of supported locations: + // https://cloud.google.com/vertex-ai/docs/general/locations + string protected_artifact_location_id = 19; + // Optional. The name of a Vertex AI // [Tensorboard][google.cloud.aiplatform.v1beta1.Tensorboard] resource to // which this CustomJob will upload Tensorboard logs. Format: diff --git a/google/cloud/aiplatform/v1beta1/feature.proto b/google/cloud/aiplatform/v1beta1/feature.proto index e3d3d4656325c..668324a6e8914 100644 --- a/google/cloud/aiplatform/v1beta1/feature.proto +++ b/google/cloud/aiplatform/v1beta1/feature.proto @@ -30,9 +30,8 @@ option java_package = "com.google.cloud.aiplatform.v1beta1"; option php_namespace = "Google\\Cloud\\AIPlatform\\V1beta1"; option ruby_package = "Google::Cloud::AIPlatform::V1beta1"; -// Feature Metadata information that describes an attribute of an entity type. -// For example, apple is an entity type, and color is a feature that describes -// apple. +// Feature Metadata information. +// For example, color is a feature that describes an apple. message Feature { option (google.api.resource) = { type: "aiplatform.googleapis.com/Feature" @@ -73,6 +72,7 @@ message Feature { [(google.api.field_behavior) = OUTPUT_ONLY]; } + // Only applicable for Vertex AI Legacy Feature Store. // An enum representing the value type of a feature. enum ValueType { // The value type is unspecified. @@ -109,6 +109,7 @@ message Feature { // Immutable. Name of the Feature. // Format: // `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}/features/{feature}` + // `projects/{project}/locations/{location}/featureGroups/{feature_group}/features/{feature}` // // The last part feature is assigned by the client. The feature can be up to // 64 characters long and can consist only of ASCII Latin letters A-Z and a-z, @@ -119,14 +120,17 @@ message Feature { // Description of the Feature. string description = 2; - // Immutable. Type of Feature value. + // Immutable. Only applicable for Vertex AI Feature Store (Legacy). + // Type of Feature value. ValueType value_type = 3 [(google.api.field_behavior) = IMMUTABLE]; - // Output only. Timestamp when this EntityType was created. + // Output only. Only applicable for Vertex AI Feature Store (Legacy). + // Timestamp when this EntityType was created. google.protobuf.Timestamp create_time = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; - // Output only. Timestamp when this EntityType was most recently updated. + // Output only. Only applicable for Vertex AI Feature Store (Legacy). + // Timestamp when this EntityType was most recently updated. google.protobuf.Timestamp update_time = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; @@ -147,9 +151,11 @@ message Feature { // "overwrite" update happens. string etag = 7; - // Optional. Deprecated: The custom monitoring configuration for this Feature, - // if not set, use the monitoring_config defined for the EntityType this - // Feature belongs to. Only Features with type + // Optional. Only applicable for Vertex AI Feature Store (Legacy). + // Deprecated: The custom monitoring configuration for this Feature, if not + // set, use the monitoring_config defined for the EntityType this Feature + // belongs to. + // Only Features with type // ([Feature.ValueType][google.cloud.aiplatform.v1beta1.Feature.ValueType]) // BOOL, STRING, DOUBLE or INT64 can enable monitoring. // @@ -162,8 +168,10 @@ message Feature { FeaturestoreMonitoringConfig monitoring_config = 9 [deprecated = true, (google.api.field_behavior) = OPTIONAL]; - // Optional. If not set, use the monitoring_config defined for the EntityType - // this Feature belongs to. Only Features with type + // Optional. Only applicable for Vertex AI Feature Store (Legacy). + // If not set, use the monitoring_config defined for the EntityType this + // Feature belongs to. + // Only Features with type // ([Feature.ValueType][google.cloud.aiplatform.v1beta1.Feature.ValueType]) // BOOL, STRING, DOUBLE or INT64 can enable monitoring. // @@ -171,7 +179,8 @@ message Feature { // config on EntityType. bool disable_monitoring = 12 [(google.api.field_behavior) = OPTIONAL]; - // Output only. A list of historical + // Output only. Only applicable for Vertex AI Feature Store (Legacy). + // A list of historical // [SnapshotAnalysis][google.cloud.aiplatform.v1beta1.FeaturestoreMonitoringConfig.SnapshotAnalysis] // stats requested by user, sorted by // [FeatureStatsAnomaly.start_time][google.cloud.aiplatform.v1beta1.FeatureStatsAnomaly.start_time] @@ -179,8 +188,13 @@ message Feature { repeated FeatureStatsAnomaly monitoring_stats = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; - // Output only. The list of historical stats and anomalies with specified - // objectives. + // Output only. Only applicable for Vertex AI Feature Store (Legacy). + // The list of historical stats and anomalies with specified objectives. repeated MonitoringStatsAnomaly monitoring_stats_anomalies = 11 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Only applicable for Vertex AI Feature Store. + // The name of the BigQuery Table/View columnn hosting data for this version. + // If no value is provided, will use feature_id. + string version_column_name = 106; } diff --git a/google/cloud/aiplatform/v1beta1/feature_online_store.proto b/google/cloud/aiplatform/v1beta1/feature_online_store.proto index c1609aabc7a7d..711b024fb1fa3 100644 --- a/google/cloud/aiplatform/v1beta1/feature_online_store.proto +++ b/google/cloud/aiplatform/v1beta1/feature_online_store.proto @@ -61,7 +61,7 @@ message FeatureOnlineStore { AutoScaling auto_scaling = 1 [(google.api.field_behavior) = REQUIRED]; } - // Optimized storage type to replace lightning + // Optimized storage type message Optimized {} // The dedicated serving endpoint for this FeatureOnlineStore. Only need to diff --git a/google/cloud/aiplatform/v1beta1/feature_online_store_service.proto b/google/cloud/aiplatform/v1beta1/feature_online_store_service.proto index 8b56cc31c0c3e..d50756188d097 100644 --- a/google/cloud/aiplatform/v1beta1/feature_online_store_service.proto +++ b/google/cloud/aiplatform/v1beta1/feature_online_store_service.proto @@ -43,7 +43,7 @@ service FeatureOnlineStoreService { post: "/v1beta1/{feature_view=projects/*/locations/*/featureOnlineStores/*/featureViews/*}:fetchFeatureValues" body: "*" }; - option (google.api.method_signature) = "feature_view, id"; + option (google.api.method_signature) = "feature_view, data_key"; } // Search the nearest entities under a FeatureView. @@ -58,12 +58,34 @@ service FeatureOnlineStoreService { } } +// Format of the data in the Feature View. +enum FeatureViewDataFormat { + // Not set. Will be treated as the KeyValue format. + FEATURE_VIEW_DATA_FORMAT_UNSPECIFIED = 0; + + // Return response data in key-value format. + KEY_VALUE = 1; + + // Return response data in proto Struct format. + PROTO_STRUCT = 2; +} + +// Lookup key for a feature view. +message FeatureViewDataKey { + oneof key_oneof { + // String key to use for lookup. + string key = 1; + } +} + // Request message for // [FeatureOnlineStoreService.FetchFeatureValues][google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.FetchFeatureValues]. // All the features under the requested feature view will be returned. message FetchFeatureValuesRequest { // Format of the response data. enum Format { + option deprecated = true; + // Not set. Will be treated as the KeyValue format. FORMAT_UNSPECIFIED = 0; @@ -75,10 +97,12 @@ message FetchFeatureValuesRequest { } // Entity ID to fetch feature values for. + // Deprecated. Use + // [FetchFeatureValuesRequest.data_key][google.cloud.aiplatform.v1beta1.FetchFeatureValuesRequest.data_key]. oneof entity_id { // Simple ID. The whole string will be used as is to identify Entity to // fetch feature values for. - string id = 3; + string id = 3 [deprecated = true]; } // Required. FeatureView resource format @@ -90,8 +114,19 @@ message FetchFeatureValuesRequest { } ]; + // Optional. The request key to fetch feature values for. + FeatureViewDataKey data_key = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Response data format. If not set, + // [FeatureViewDataFormat.KEY_VALUE][google.cloud.aiplatform.v1beta1.FeatureViewDataFormat.KEY_VALUE] + // will be used. + FeatureViewDataFormat data_format = 7 + [(google.api.field_behavior) = OPTIONAL]; + // Specify response data format. If not set, KeyValue format will be used. - Format format = 5; + // Deprecated. Use + // [FetchFeatureValuesRequest.data_format][google.cloud.aiplatform.v1beta1.FetchFeatureValuesRequest.data_format]. + Format format = 5 [deprecated = true]; } // Response message for diff --git a/google/cloud/aiplatform/v1beta1/featurestore_service.proto b/google/cloud/aiplatform/v1beta1/featurestore_service.proto index 465669984e999..0a3cc0574775d 100644 --- a/google/cloud/aiplatform/v1beta1/featurestore_service.proto +++ b/google/cloud/aiplatform/v1beta1/featurestore_service.proto @@ -953,6 +953,11 @@ message DeleteEntityTypeRequest { // Request message for // [FeatureRegistryService.CreateFeature][google.cloud.aiplatform.v1beta1.FeatureRegistryService.CreateFeature]. message CreateFeatureRequest { + // Required. The resource name of the EntityType or FeatureGroup to create a + // Feature. Format for entity_type as parent: + // `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}` + // Format for feature_group as parent: + // `projects/{project}/locations/{location}/featureGroups/{feature_group}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -1008,8 +1013,9 @@ message BatchCreateFeaturesResponse { // [FeatureRegistryService.GetFeature][google.cloud.aiplatform.v1beta1.FeatureRegistryService.GetFeature]. message GetFeatureRequest { // Required. The name of the Feature resource. - // Format: + // Format for entity_type as parent: // `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}` + // Format for feature_group as parent: // `projects/{project}/locations/{location}/featureGroups/{feature_group}` string name = 1 [ (google.api.field_behavior) = REQUIRED, @@ -1025,8 +1031,9 @@ message GetFeatureRequest { // [FeatureRegistryService.ListFeatures][google.cloud.aiplatform.v1beta1.FeatureRegistryService.ListFeatures]. message ListFeaturesRequest { // Required. The resource name of the Location to list Features. - // Format: + // Format for entity_type as parent: // `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}` + // Format for feature_group as parent: // `projects/{project}/locations/{location}/featureGroups/{feature_group}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, @@ -1065,10 +1072,14 @@ message ListFeaturesRequest { // A page token, received from a previous // [FeaturestoreService.ListFeatures][google.cloud.aiplatform.v1beta1.FeaturestoreService.ListFeatures] + // call or + // [FeatureRegistryService.ListFeatures][google.cloud.aiplatform.v1beta1.FeatureRegistryService.ListFeatures] // call. Provide this to retrieve the subsequent page. // // When paginating, all other parameters provided to // [FeaturestoreService.ListFeatures][google.cloud.aiplatform.v1beta1.FeaturestoreService.ListFeatures] + // or or + // [FeatureRegistryService.ListFeatures][google.cloud.aiplatform.v1beta1.FeatureRegistryService.ListFeatures] // must match the call that provided the page token. string page_token = 4; @@ -1085,6 +1096,7 @@ message ListFeaturesRequest { // Mask specifying which fields to read. google.protobuf.FieldMask read_mask = 6; + // Only applicable for Vertex AI Feature Store (Legacy). // If set, return the most recent // [ListFeaturesRequest.latest_stats_count][google.cloud.aiplatform.v1beta1.ListFeaturesRequest.latest_stats_count] // of stats for each Feature in response. Valid value is [0, 10]. If number of @@ -1245,7 +1257,7 @@ message UpdateFeatureRequest { // // * `description` // * `labels` - // * `disable_monitoring` + // * `disable_monitoring` (Not supported for FeatureRegistry Feature) google.protobuf.FieldMask update_mask = 2; } diff --git a/google/cloud/aiplatform/v1beta1/index.proto b/google/cloud/aiplatform/v1beta1/index.proto index 15345a7c615e4..2f191141a6262 100644 --- a/google/cloud/aiplatform/v1beta1/index.proto +++ b/google/cloud/aiplatform/v1beta1/index.proto @@ -142,6 +142,55 @@ message IndexDatapoint { repeated string deny_list = 3; } + // This field allows restricts to be based on numeric comparisons rather + // than categorical tokens. + message NumericRestriction { + // Which comparison operator to use. Should be specified for queries only; + // specifying this for a datapoint is an error. + // + // Datapoints for which Operator is true relative to the query's Value + // field will be allowlisted. + enum Operator { + // Default value of the enum. + OPERATOR_UNSPECIFIED = 0; + + // Datapoints are eligible iff their value is < the query's. + LESS = 1; + + // Datapoints are eligible iff their value is <= the query's. + LESS_EQUAL = 2; + + // Datapoints are eligible iff their value is == the query's. + EQUAL = 3; + + // Datapoints are eligible iff their value is >= the query's. + GREATER_EQUAL = 4; + + // Datapoints are eligible iff their value is > the query's. + GREATER = 5; + } + + // The type of Value must be consistent for all datapoints with a given + // namespace name. This is verified at runtime. + oneof Value { + // Represents 64 bit integer. + int64 value_int = 2; + + // Represents 32 bit float. + float value_float = 3; + + // Represents 64 bit float. + double value_double = 4; + } + + // The namespace of this restriction. e.g.: cost. + string namespace = 1; + + // This MUST be specified for queries and must NOT be specified for + // datapoints. + Operator op = 5; + } + // Crowding tag is a constraint on a neighbor list produced by nearest // neighbor search requiring that no more than some value k' of the k // neighbors returned have the same value of crowding_attribute. @@ -167,6 +216,12 @@ message IndexDatapoint { // https://cloud.google.com/vertex-ai/docs/matching-engine/filtering repeated Restriction restricts = 4 [(google.api.field_behavior) = OPTIONAL]; + // Optional. List of Restrict of the datapoint, used to perform "restricted + // searches" where boolean rule are used to filter the subset of the database + // eligible for matching. This uses numeric comparisons. + repeated NumericRestriction numeric_restricts = 6 + [(google.api.field_behavior) = OPTIONAL]; + // Optional. CrowdingTag of the datapoint, the number of neighbors to return // in each crowding can be configured during query. CrowdingTag crowding_tag = 5 [(google.api.field_behavior) = OPTIONAL]; diff --git a/google/cloud/aiplatform/v1beta1/index_endpoint.proto b/google/cloud/aiplatform/v1beta1/index_endpoint.proto index 7c55142eacc11..46dfba3bfc123 100644 --- a/google/cloud/aiplatform/v1beta1/index_endpoint.proto +++ b/google/cloud/aiplatform/v1beta1/index_endpoint.proto @@ -191,10 +191,11 @@ message DeployedIndex { [(google.api.field_behavior) = OPTIONAL]; // Optional. A description of resources that are dedicated to the - // DeployedIndex, and that need a higher degree of manual configuration. If - // min_replica_count is not set, the default value is 2 (we don't provide SLA - // when min_replica_count=1). If max_replica_count is not set, the default - // value is min_replica_count. The max allowed replica count is 1000. + // DeployedIndex, and that need a higher degree of manual configuration. The + // field min_replica_count must be set to a value strictly greater than 0, or + // else validation will fail. We don't provide SLA when min_replica_count=1. + // If max_replica_count is not set, the default value is min_replica_count. + // The max allowed replica count is 1000. // // Available machine types for SMALL shard: // e2-standard-2 and all machine types available for MEDIUM and LARGE shard. diff --git a/google/cloud/aiplatform/v1beta1/machine_resources.proto b/google/cloud/aiplatform/v1beta1/machine_resources.proto index b7e19fa130fec..c51246f854627 100644 --- a/google/cloud/aiplatform/v1beta1/machine_resources.proto +++ b/google/cloud/aiplatform/v1beta1/machine_resources.proto @@ -52,6 +52,10 @@ message MachineSpec { // The number of accelerators to attach to the machine. int32 accelerator_count = 3; + + // Immutable. The topology of the TPUs. Corresponds to the TPU topologies + // available from GKE. (Example: tpu_topology: "2x2x1"). + string tpu_topology = 4 [(google.api.field_behavior) = IMMUTABLE]; } // A description of resources that are dedicated to a DeployedModel, and diff --git a/google/cloud/aiplatform/v1beta1/pipeline_service.proto b/google/cloud/aiplatform/v1beta1/pipeline_service.proto index 3b6d819d7bb17..4d8695ba0c70e 100644 --- a/google/cloud/aiplatform/v1beta1/pipeline_service.proto +++ b/google/cloud/aiplatform/v1beta1/pipeline_service.proto @@ -148,6 +148,22 @@ service PipelineService { }; } + // Batch deletes PipelineJobs + // The Operation is atomic. If it fails, none of the PipelineJobs are deleted. + // If it succeeds, all of the PipelineJobs are deleted. + rpc BatchDeletePipelineJobs(BatchDeletePipelineJobsRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1beta1/{parent=projects/*/locations/*}/pipelineJobs:batchDelete" + body: "*" + }; + option (google.api.method_signature) = "parent,names"; + option (google.longrunning.operation_info) = { + response_type: "BatchDeletePipelineJobsResponse" + metadata_type: "DeleteOperationMetadata" + }; + } + // Cancels a PipelineJob. // Starts asynchronous cancellation on the PipelineJob. The server // makes a best effort to cancel the pipeline, but success is not @@ -435,6 +451,37 @@ message DeletePipelineJobRequest { ]; } +// Request message for +// [PipelineService.BatchDeletePipelineJobs][google.cloud.aiplatform.v1beta1.PipelineService.BatchDeletePipelineJobs]. +message BatchDeletePipelineJobsRequest { + // Required. The name of the PipelineJobs' parent resource. + // Format: `projects/{project}/locations/{location}` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "aiplatform.googleapis.com/PipelineJob" + } + ]; + + // Required. The names of the PipelineJobs to delete. + // A maximum of 32 PipelineJobs can be deleted in a batch. + // Format: + // `projects/{project}/locations/{location}/pipelineJobs/{pipelineJob}` + repeated string names = 2 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/PipelineJob" + } + ]; +} + +// Response message for +// [PipelineService.BatchDeletePipelineJobs][google.cloud.aiplatform.v1beta1.PipelineService.BatchDeletePipelineJobs]. +message BatchDeletePipelineJobsResponse { + // PipelineJobs deleted. + repeated PipelineJob pipeline_jobs = 1; +} + // Request message for // [PipelineService.CancelPipelineJob][google.cloud.aiplatform.v1beta1.PipelineService.CancelPipelineJob]. message CancelPipelineJobRequest { diff --git a/google/cloud/aiplatform/v1beta1/prediction_service.proto b/google/cloud/aiplatform/v1beta1/prediction_service.proto index 14a7bca2d4dc6..55b67ed4add61 100644 --- a/google/cloud/aiplatform/v1beta1/prediction_service.proto +++ b/google/cloud/aiplatform/v1beta1/prediction_service.proto @@ -343,7 +343,7 @@ message ExplainResponse { repeated Explanation explanations = 1; // This field stores the results of the explanations run in parallel with - // the default explanation strategy/method. + // The default explanation strategy/method. map concurrent_explanations = 4; // ID of the Endpoint's DeployedModel that served this explanation. diff --git a/google/cloud/aiplatform/v1beta1/study.proto b/google/cloud/aiplatform/v1beta1/study.proto index 1075216a6c218..7f0d690d1c7cd 100644 --- a/google/cloud/aiplatform/v1beta1/study.proto +++ b/google/cloud/aiplatform/v1beta1/study.proto @@ -21,6 +21,7 @@ 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.V1Beta1"; option go_package = "cloud.google.com/go/aiplatform/apiv1beta1/aiplatformpb;aiplatformpb"; @@ -213,6 +214,17 @@ message TrialContext { 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. @@ -557,6 +569,62 @@ message StudySpec { [(google.api.field_behavior) = OUTPUT_ONLY]; } + // 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 @@ -650,6 +718,10 @@ message StudySpec { // The configuration info/options for transfer learning. Currently supported // for Vertex AI Vizier service, not HyperParameterTuningJob TransferLearningConfig transfer_learning_config = 10; + + // 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