VPC ネットワークにインデックス エンドポイントをデプロイして管理する

エンドポイントへのインデックスのデプロイでは、次の 3 つのタスクを行います。

  1. 必要に応じて IndexEndpoint を作成するか、既存の IndexEndpoint を再利用します。
  2. IndexEndpoint ID を取得します。
  3. インデックスを IndexEndpoint にデプロイします。

VPC ネットワーク内に IndexEndpoint を作成する

Index を既存の IndexEndpoint にデプロイする場合は、この手順をスキップできます。

インデックスを使用してベクトル マッチングのオンライン クエリを実行する前に、VPC ネットワーク ピアリング ネットワーク内の IndexEndpoint に Index をデプロイする必要があります。まず、IndexEndpoint を作成します。同じ VPC ネットワークを共有する IndexEndpoint には、複数のインデックスをデプロイできます。

gcloud

次の例では、gcloud ai index-endpoints create コマンドを使用します。

後述のコマンドデータを使用する前に、次のように置き換えます。

  • INDEX_ENDPOINT_NAME: インデックス エンドポイントの表示名。
  • VPC_NETWORK_NAME: インデックス エンドポイントのピアリング先となる Google Compute Engine ネットワーク名。
  • LOCATION: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud ai index-endpoints create \
    --display-name=INDEX_ENDPOINT_NAME \
    --network=VPC_NETWORK_NAME \
    --region=LOCATION \
    --project=PROJECT_ID

Windows(PowerShell)

gcloud ai index-endpoints create `
    --display-name=INDEX_ENDPOINT_NAME `
    --network=VPC_NETWORK_NAME `
    --region=LOCATION `
    --project=PROJECT_ID

Windows(cmd.exe)

gcloud ai index-endpoints create ^
    --display-name=INDEX_ENDPOINT_NAME ^
    --network=VPC_NETWORK_NAME ^
    --region=LOCATION ^
    --project=PROJECT_ID

次のようなレスポンスが返されます。

The Google Cloud CLI tool might take a few minutes to create the IndexEndpoint.

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • INDEX_ENDPOINT_NAME: インデックス エンドポイントの表示名。
  • VPC_NETWORK_NAME: インデックス エンドポイントのピアリング先となる Google Compute Engine ネットワーク名。
  • LOCATION: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • PROJECT_NUMBER: プロジェクトに自動生成されたプロジェクト番号。

HTTP メソッドと URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexEndpoints

リクエストの本文(JSON):

{
  "display_name": "INDEX_ENDPOINT_NAME",
  "network": "VPC_NETWORK_NAME"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateIndexEndpointOperationMetadata",
    "genericMetadata": {
      "createTime": "2022-01-13T04:09:56.641107Z",
      "updateTime": "2022-01-13T04:09:56.641107Z"
    }
  }
}

レスポンスに "done": true が含まれるまで、オペレーションのステータスをポーリングできます。

Terraform

次のサンプルでは、vertex_ai_index_endpoint Terraform リソースを使用してインデックス エンドポイントを作成します。

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

resource "google_vertex_ai_index_endpoint" "default" {
  display_name = "sample-endpoint"
  description  = "A sample index endpoint within a VPC network"
  region       = "us-central1"
  network      = "projects/${data.google_project.project.number}/global/networks/${google_compute_network.default.name}"
  depends_on = [
    google_service_networking_connection.default
  ]
}

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.default.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.default.name]
  # Workaround to allow `terraform destroy`, see https://github.com/hashicorp/terraform-provider-google/issues/18729
  deletion_policy = "ABANDON"
}

resource "google_compute_global_address" "default" {
  name          = "sample-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.default.id
}

resource "google_compute_network" "default" {
  name = "sample-network"
}

data "google_project" "project" {}

# Cloud Storage bucket name must be unique
resource "random_id" "default" {
  byte_length = 8
}

# Create a Cloud Storage bucket
resource "google_storage_bucket" "bucket" {
  name                        = "vertex-ai-index-bucket-${random_id.default.hex}"
  location                    = "us-central1"
  uniform_bucket_level_access = true
}

# Create index content
resource "google_storage_bucket_object" "data" {
  name    = "contents/data.json"
  bucket  = google_storage_bucket.bucket.name
  content = <<EOF
{"id": "42", "embedding": [0.5, 1.0], "restricts": [{"namespace": "class", "allow": ["cat", "pet"]},{"namespace": "category", "allow": ["feline"]}]}
{"id": "43", "embedding": [0.6, 1.0], "restricts": [{"namespace": "class", "allow": ["dog", "pet"]},{"namespace": "category", "allow": ["canine"]}]}
EOF
}

resource "google_vertex_ai_index" "default" {
  region       = "us-central1"
  display_name = "sample-index-batch-update"
  description  = "A sample index for batch update"
  labels = {
    foo = "bar"
  }

  metadata {
    contents_delta_uri = "gs://${google_storage_bucket.bucket.name}/contents"
    config {
      dimensions                  = 2
      approximate_neighbors_count = 150
      distance_measure_type       = "DOT_PRODUCT_DISTANCE"
      algorithm_config {
        tree_ah_config {
          leaf_node_embedding_count    = 500
          leaf_nodes_to_search_percent = 7
        }
      }
    }
  }
  index_update_method = "BATCH_UPDATE"

  timeouts {
    create = "2h"
    update = "1h"
  }
}

Python

Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。

def vector_search_create_index_endpoint_vpc(
    project: str, location: str, display_name: str, network: str
) -> aiplatform.MatchingEngineIndexEndpoint:
    """Create a vector search index endpoint within a VPC network.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        display_name (str): Required. The index endpoint display name
        network(str): Required. The VPC network name, in the format of
            projects/{project number}/global/networks/{network name}.

    Returns:
        aiplatform.MatchingEngineIndexEndpoint - The created index endpoint.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create Index Endpoint
    index_endpoint = aiplatform.MatchingEngineIndexEndpoint.create(
        display_name=display_name,
        network=network,
        description="Matching Engine VPC Index Endpoint",
    )

    return index_endpoint

コンソール

次の手順でインデックス エンドポイントを作成します。

  1. Google Cloud コンソールの [Agent Platform] セクションで、[デプロイと使用] セクションに移動します。[ベクトル検索] を選択します。

    [ベクトル検索] に移動

  2. アクティブなインデックスのリストが表示されます。
  3. ページの上部にある [インデックス エンドポイント] タブを選択します。インデックス エンドポイントが表示されます。
  4. [Create new index endpoint] をクリックします。[Create new index endpoint] パネルが開きます。
  5. インデックス エンドポイントの表示名を入力します。
  6. [Region] フィールドで、プルダウンからリージョンを選択します。
  7. [Access] フィールドで、[非公開] を選択します。
  8. ピアリングされた VPC ネットワークの詳細を入力します。ジョブをピアリングする Compute Engine ネットワークをフルネームで指定します。形式は projects/{project_num}/global/networks/{network_id} にする必要があります。
  9. [作成] をクリックします。

インデックスのデプロイ

gcloud

この例では、gcloud ai index-endpoints deploy-index コマンドを使用します。

後述のコマンドデータを使用する前に、次のように置き換えます。

  • INDEX_ENDPOINT_ID: インデックス エンドポイントの ID。
  • DEPLOYED_INDEX_ID: デプロイされたインデックスを一意に識別するユーザー指定の文字列。先頭は英字にします。英字、数字、アンダースコアのみ使用できます。形式のガイドラインについては、DeployedIndex.id をご覧ください。
  • DEPLOYED_INDEX_ENDPOINT_NAME: デプロイされたインデックス エンドポイントの表示名。
  • INDEX_ID: インデックスの ID。
  • LOCATION: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID \
    --deployed-index-id=DEPLOYED_INDEX_ID \
    --display-name=DEPLOYED_INDEX_ENDPOINT_NAME \
    --index=INDEX_ID \
    --region=LOCATION \
    --project=PROJECT_ID

Windows(PowerShell)

gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID `
    --deployed-index-id=DEPLOYED_INDEX_ID `
    --display-name=DEPLOYED_INDEX_ENDPOINT_NAME `
    --index=INDEX_ID `
    --region=LOCATION `
    --project=PROJECT_ID

Windows(cmd.exe)

gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID ^
    --deployed-index-id=DEPLOYED_INDEX_ID ^
    --display-name=DEPLOYED_INDEX_ENDPOINT_NAME ^
    --index=INDEX_ID ^
    --region=LOCATION ^
    --project=PROJECT_ID

次のようなレスポンスが返されます。

The Google Cloud CLI tool might take a few minutes to create the IndexEndpoint.

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • INDEX_ENDPOINT_ID: インデックス エンドポイントの ID。
  • DEPLOYED_INDEX_ID: デプロイされたインデックスを一意に識別するユーザー指定の文字列。先頭は英字にします。英字、数字、アンダースコアのみ使用できます。形式のガイドラインについては、DeployedIndex.id をご覧ください。
  • DEPLOYED_INDEX_ENDPOINT_NAME: デプロイされたインデックス エンドポイントの表示名。
  • INDEX_ID: インデックスの ID。
  • LOCATION: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • PROJECT_NUMBER: プロジェクトに自動生成されたプロジェクト番号。

HTTP メソッドと URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID:deployIndex

リクエストの本文(JSON):

{
 "deployedIndex": {
   "id": "DEPLOYED_INDEX_ID",
   "index": "projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID",
   "displayName": "DEPLOYED_INDEX_ENDPOINT_NAME"
 }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
 "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID/operations/OPERATION_ID",
 "metadata": {
   "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeployIndexOperationMetadata",
   "genericMetadata": {
     "createTime": "2022-10-19T17:53:16.502088Z",
     "updateTime": "2022-10-19T17:53:16.502088Z"
   },
   "deployedIndexId": "DEPLOYED_INDEX_ID"
 }
}

Terraform

次のサンプルでは、vertex_ai_index_endpoint_deployed_index Terraform リソースを使用して、デプロイするインデックス エンドポイントを作成します。

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

provider "google" {
  region = "us-central1"
}

resource "google_vertex_ai_index_endpoint_deployed_index" "default" {
  depends_on        = [google_vertex_ai_index_endpoint.default]
  index_endpoint    = google_vertex_ai_index_endpoint.default.id
  index             = google_vertex_ai_index.default.id
  deployed_index_id = "deployed_index_for_vpc"
}

resource "google_vertex_ai_index_endpoint" "default" {
  display_name = "sample-endpoint"
  description  = "A sample index endpoint within a VPC network"
  region       = "us-central1"
  network      = "projects/${data.google_project.project.number}/global/networks/${google_compute_network.default.name}"
  depends_on = [
    google_service_networking_connection.default
  ]
}

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.default.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.default.name]
  # Workaround to allow `terraform destroy`, see https://github.com/hashicorp/terraform-provider-google/issues/18729
  deletion_policy = "ABANDON"
}

resource "google_compute_global_address" "default" {
  name          = "sample-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.default.id
}

resource "google_compute_network" "default" {
  name = "sample-network"
}

data "google_project" "project" {}

# Cloud Storage bucket name must be unique
resource "random_id" "default" {
  byte_length = 8
}

# Create a Cloud Storage bucket
resource "google_storage_bucket" "bucket" {
  name                        = "vertex-ai-index-bucket-${random_id.default.hex}"
  location                    = "us-central1"
  uniform_bucket_level_access = true
}

# Create index content
resource "google_storage_bucket_object" "data" {
  name    = "contents/data.json"
  bucket  = google_storage_bucket.bucket.name
  content = <<EOF
{"id": "42", "embedding": [0.5, 1.0], "restricts": [{"namespace": "class", "allow": ["cat", "pet"]},{"namespace": "category", "allow": ["feline"]}]}
{"id": "43", "embedding": [0.6, 1.0], "restricts": [{"namespace": "class", "allow": ["dog", "pet"]},{"namespace": "category", "allow": ["canine"]}]}
EOF
}

resource "google_vertex_ai_index" "default" {
  region       = "us-central1"
  display_name = "sample-index-batch-update"
  description  = "A sample index for batch update"
  labels = {
    foo = "bar"
  }

  metadata {
    contents_delta_uri = "gs://${google_storage_bucket.bucket.name}/contents"
    config {
      dimensions                  = 2
      approximate_neighbors_count = 150
      distance_measure_type       = "DOT_PRODUCT_DISTANCE"
      algorithm_config {
        tree_ah_config {
          leaf_node_embedding_count    = 500
          leaf_nodes_to_search_percent = 7
        }
      }
    }
  }
  index_update_method = "BATCH_UPDATE"

  timeouts {
    create = "2h"
    update = "1h"
  }
}

Python

Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。

def vector_search_deploy_index(
    project: str,
    location: str,
    index_name: str,
    index_endpoint_name: str,
    deployed_index_id: str,
) -> None:
    """Deploy a vector search index to a vector search index endpoint.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_name (str): Required. The index to update. A fully-qualified index
          resource name or a index ID.  Example:
          "projects/123/locations/us-central1/indexes/my_index_id" or
          "my_index_id".
        index_endpoint_name (str): Required. Index endpoint to deploy the index
          to.
        deployed_index_id (str): Required. The user specified ID of the
          DeployedIndex.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index instance from an existing index
    index = aiplatform.MatchingEngineIndex(index_name=index_name)

    # Create the index endpoint instance from an existing endpoint.
    index_endpoint = aiplatform.MatchingEngineIndexEndpoint(
        index_endpoint_name=index_endpoint_name
    )

    # Deploy Index to Endpoint
    index_endpoint = index_endpoint.deploy_index(
        index=index, deployed_index_id=deployed_index_id
    )

    print(index_endpoint.deployed_indexes)

コンソール

次の手順で、インデックスをエンドポイントにデプロイします。

  1. Google Cloud コンソールの [Agent Platform] セクションで、[デプロイと使用] セクションに移動します。[ベクトル検索] を選択します。

    [ベクトル検索] に移動

  2. アクティブなインデックスのリストが表示されます。
  3. デプロイするインデックスの名前を選択します。インデックスの詳細ページが開きます。
  4. インデックスの詳細ページで、[ エンドポイントにデプロイ] をクリックします。インデックスのデプロイパネルが開きます。
  5. 表示名を入力します。この名前は ID として使用され、更新できません。
  6. [エンドポイント] プルダウンから、このインデックスをデプロイするエンドポイントを選択します。注: インデックスがすでにデプロイされている場合、そのエンドポイントは使用できません。
  7. 省略可: [マシンタイプ] フィールドで、標準またはハイメモリを選択します。
  8. 省略可。[自動スケーリングを有効にする] を選択すると、ワークロードの需要に応じてノード数が自動的に変更されます。自動スケーリングが無効になっている場合、デフォルトのレプリカ数は 2 です。
  9. [デプロイ] をクリックして、エンドポイントにインデックスをデプロイします。注: デプロイには 30 分ほどかかります。

自動スケーリングを有効にする

ベクトル検索は自動スケーリングをサポートしており、ワークロードの需要に応じてノード数を自動的に変更できます。需要が高い場合、ノードがノードプールに追加されます。指定した最大サイズを超えることはありません。需要が少ない場合、ノードプールは指定した最小サイズにスケールダウンされます。使用中の実際のノードと変更は、現在のレプリカをモニタリングすることで確認できます。

自動スケーリングを有効にするには、インデックスをデプロイするときに maxReplicaCount と minReplicaCount を指定します。

gcloud

次の例では、gcloud ai index-endpoints deploy-index コマンドを使用します。

後述のコマンドデータを使用する前に、次のように置き換えます。

  • INDEX_ENDPOINT_ID: インデックス エンドポイントの ID。
  • DEPLOYED_INDEX_ID: デプロイされたインデックスを一意に識別するユーザー指定の文字列。先頭は英字にします。英字、数字、アンダースコアのみ使用できます。形式のガイドラインについては、DeployedIndex.id をご覧ください。
  • DEPLOYED_INDEX_NAME: デプロイされたインデックスの表示名。
  • INDEX_ID: インデックスの ID。
  • MIN_REPLICA_COUNT: デプロイされたインデックスが常にデプロイされるマシンレプリカの最小数。指定する場合、値は 1 以上にする必要があります。
  • MAX_REPLICA_COUNT: デプロイされたインデックスをデプロイ可能なマシンレプリカの最大数。
  • LOCATION: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID \
    --deployed-index-id=DEPLOYED_INDEX_ID \
    --display-name=DEPLOYED_INDEX_NAME \
    --index=INDEX_ID \
    --min-replica-count=MIN_REPLICA_COUNT \
    --max-replica-count=MAX_REPLICA_COUNT \
    --region=LOCATION \
    --project=PROJECT_ID

Windows(PowerShell)

gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID `
    --deployed-index-id=DEPLOYED_INDEX_ID `
    --display-name=DEPLOYED_INDEX_NAME `
    --index=INDEX_ID `
    --min-replica-count=MIN_REPLICA_COUNT `
    --max-replica-count=MAX_REPLICA_COUNT `
    --region=LOCATION `
    --project=PROJECT_ID

Windows(cmd.exe)

gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID ^
    --deployed-index-id=DEPLOYED_INDEX_ID ^
    --display-name=DEPLOYED_INDEX_NAME ^
    --index=INDEX_ID ^
    --min-replica-count=MIN_REPLICA_COUNT ^
    --max-replica-count=MAX_REPLICA_COUNT ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • INDEX_ENDPOINT_ID: インデックス エンドポイントの ID。
  • DEPLOYED_INDEX_ID: デプロイされたインデックスを一意に識別するユーザー指定の文字列。先頭は英字にします。英字、数字、アンダースコアのみ使用できます。形式のガイドラインについては、DeployedIndex.id をご覧ください。
  • DEPLOYED_INDEX_NAME: デプロイされたインデックスの表示名。
  • INDEX_ID: インデックスの ID。
  • MIN_REPLICA_COUNT: デプロイされたインデックスが常にデプロイされるマシンレプリカの最小数。指定する場合、値は 1 以上にする必要があります。
  • MAX_REPLICA_COUNT: デプロイされたインデックスをデプロイ可能なマシンレプリカの最大数。
  • LOCATION: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • PROJECT_NUMBER: プロジェクトに自動生成されたプロジェクト番号。

HTTP メソッドと URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID:deployIndex

リクエストの本文(JSON):

{
 "deployedIndex": {
   "id": "DEPLOYED_INDEX_ID",
   "index": "projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID",
   "displayName": "DEPLOYED_INDEX_NAME",
   "automaticResources": {
     "minReplicaCount": MIN_REPLICA_COUNT,
     "maxReplicaCount": MAX_REPLICA_COUNT
   }
 }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
 "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID/operations/OPERATION_ID",
 "metadata": {
   "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeployIndexOperationMetadata",
   "genericMetadata": {
     "createTime": "2023-10-19T17:53:16.502088Z",
     "updateTime": "2023-10-19T17:53:16.502088Z"
   },
   "deployedIndexId": "DEPLOYED_INDEX_ID"
 }
}

Python

Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。

def vector_search_deploy_autoscaling_index(
    project: str,
    location: str,
    index_name: str,
    index_endpoint_name: str,
    deployed_index_id: str,
    min_replica_count: int,
    max_replica_count: int,
) -> None:
    """Deploy a vector search index to a vector search index endpoint.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_name (str): Required. The index to update. A fully-qualified index
          resource name or a index ID.  Example:
          "projects/123/locations/us-central1/indexes/my_index_id" or
          "my_index_id".
        index_endpoint_name (str): Required. Index endpoint to deploy the index
          to.
        deployed_index_id (str): Required. The user specified ID of the
          DeployedIndex.
        min_replica_count (int): Required. The minimum number of replicas to
          deploy.
        max_replica_count (int): Required. The maximum number of replicas to
          deploy.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index instance from an existing index
    index = aiplatform.MatchingEngineIndex(index_name=index_name)

    # Create the index endpoint instance from an existing endpoint.
    index_endpoint = aiplatform.MatchingEngineIndexEndpoint(
        index_endpoint_name=index_endpoint_name
    )

    # Deploy Index to Endpoint. Specifying min and max replica counts will
    # enable autoscaling.
    index_endpoint.deploy_index(
        index=index,
        deployed_index_id=deployed_index_id,
        min_replica_count=min_replica_count,
        max_replica_count=max_replica_count,
    )

コンソール

コンソールでは、インデックスのデプロイ時にのみ自動スケーリングを有効にできます。

  1. Google Cloud コンソールの [Agent Platform] セクションで、[デプロイと使用] セクションに移動します。[ベクトル検索] を選択します。

    [ベクトル検索] に移動

  2. アクティブなインデックスのリストが表示されます。
  3. デプロイするインデックスの名前を選択します。インデックスの詳細ページが開きます。
  4. インデックスの詳細ページで、[ エンドポイントにデプロイ] をクリックします。インデックスのデプロイパネルが開きます。
  5. 表示名を入力します。この名前は ID として使用され、更新できません。
  6. [エンドポイント] プルダウンから、このインデックスをデプロイするエンドポイントを選択します。注: インデックスがすでにデプロイされている場合、そのエンドポイントは使用できません。
  7. 省略可: [マシンタイプ] フィールドで、標準またはハイメモリを選択します。
  8. 省略可。[自動スケーリングを有効にする] を選択すると、ワークロードの需要に応じてノード数が自動的に変更されます。自動スケーリングが無効になっている場合、デフォルトのレプリカ数は 2 です。
  • minReplicaCount と maxReplicaCount の両方とも設定されていない場合、この 2 つはデフォルトで 2 に設定されます。
  • maxReplicaCount のみが設定されている場合、minReplicaCount はデフォルトで 2 に設定されます。
  • minReplicaCount のみが設定されている場合、maxReplicaCount の値は minReplicaCount と一致します。

DeployedIndex を変更する

MutateDeployedIndex API を使用すると、すでにデプロイされているインデックスのデプロイ リソース(minReplicaCount、maxReplicaCount など)を更新できます。

  • インデックスのデプロイ後にユーザーが machineType を変更することはできません。
  • リクエストで maxReplicaCount が指定されていない場合、DeployedIndex は既存の maxReplicaCount を引き続き使用します。

gcloud

次の例では、gcloud ai index-endpoints mutate-deployed-index コマンドを使用します。

後述のコマンドデータを使用する前に、次のように置き換えます。

  • INDEX_ENDPOINT_ID: インデックス エンドポイントの ID。
  • DEPLOYED_INDEX_ID: デプロイされたインデックスを一意に識別するユーザー指定の文字列。先頭は英字にします。英字、数字、アンダースコアのみ使用できます。形式のガイドラインについては、DeployedIndex.id をご覧ください。
  • MIN_REPLICA_COUNT: デプロイされたインデックスが常にデプロイされるマシンレプリカの最小数。指定する場合、値は 1 以上にする必要があります。
  • MAX_REPLICA_COUNT: デプロイされたインデックスをデプロイ可能なマシンレプリカの最大数。
  • LOCATION: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud ai index-endpoints mutate-deployed-index INDEX_ENDPOINT_ID \
    --deployed-index-id=DEPLOYED_INDEX_ID \
    --min-replica-count=MIN_REPLICA_COUNT \
    --max-replica-count=MAX_REPLICA_COUNT \
    --region=LOCATION \
    --project=PROJECT_ID

Windows(PowerShell)

gcloud ai index-endpoints mutate-deployed-index INDEX_ENDPOINT_ID `
    --deployed-index-id=DEPLOYED_INDEX_ID `
    --min-replica-count=MIN_REPLICA_COUNT `
    --max-replica-count=MAX_REPLICA_COUNT `
    --region=LOCATION `
    --project=PROJECT_ID

Windows(cmd.exe)

gcloud ai index-endpoints mutate-deployed-index INDEX_ENDPOINT_ID ^
    --deployed-index-id=DEPLOYED_INDEX_ID ^
    --min-replica-count=MIN_REPLICA_COUNT ^
    --max-replica-count=MAX_REPLICA_COUNT ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • INDEX_ENDPOINT_ID: インデックス エンドポイントの ID。
  • DEPLOYED_INDEX_ID: デプロイされたインデックスを一意に識別するユーザー指定の文字列。先頭は英字にします。英字、数字、アンダースコアのみ使用できます。形式のガイドラインについては、DeployedIndex.id をご覧ください。
  • MIN_REPLICA_COUNT: デプロイされたインデックスが常にデプロイされるマシンレプリカの最小数。指定する場合、値は 1 以上にする必要があります。
  • MAX_REPLICA_COUNT: デプロイされたインデックスをデプロイ可能なマシンレプリカの最大数。
  • LOCATION: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • PROJECT_NUMBER: プロジェクトに自動生成されたプロジェクト番号。

HTTP メソッドと URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID:mutateDeployedIndex

リクエストの本文(JSON):

{
  "deployedIndex": {
    "id": "DEPLOYED_INDEX_ID",
    "index": "projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID",
    "displayName": "DEPLOYED_INDEX_NAME",
    "min_replica_count": "MIN_REPLICA_COUNT",
    "max_replica_count": "MAX_REPLICA_COUNT"
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID/operations/OPERATION_ID",
"metadata": {
  "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeployIndexOperationMetadata",
  "genericMetadata": {
    "createTime": "2020-10-19T17:53:16.502088Z",
    "updateTime": "2020-10-19T17:53:16.502088Z"
  },
  "deployedIndexId": "DEPLOYED_INDEX_ID"
}
}

Terraform

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。詳細については、Terraform プロバイダのリファレンス ドキュメントをご覧ください。

provider "google" {
  region = "us-central1"
}

resource "google_vertex_ai_index_endpoint_deployed_index" "default" {
  depends_on        = [google_vertex_ai_index_endpoint.default]
  index_endpoint    = google_vertex_ai_index_endpoint.default.id
  index             = google_vertex_ai_index.default.id
  deployed_index_id = "deployed_index_for_mutate_vpc"
  # This example assumes the deployed index endpoint's resources configuration
  # differs from the values specified below. Terraform will mutate the deployed
  # index endpoint's resource configuration to match.
  automatic_resources {
    min_replica_count = 3
    max_replica_count = 5
  }
}

resource "google_vertex_ai_index_endpoint" "default" {
  display_name = "sample-endpoint"
  description  = "A sample index endpoint within a VPC network"
  region       = "us-central1"
  network      = "projects/${data.google_project.project.number}/global/networks/${google_compute_network.default.name}"
  depends_on = [
    google_service_networking_connection.default
  ]
}

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.default.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.default.name]
  # Workaround to allow `terraform destroy`, see https://github.com/hashicorp/terraform-provider-google/issues/18729
  deletion_policy = "ABANDON"
}

resource "google_compute_global_address" "default" {
  name          = "sample-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.default.id
}

resource "google_compute_network" "default" {
  name = "sample-network"
}

data "google_project" "project" {}

# Cloud Storage bucket name must be unique
resource "random_id" "default" {
  byte_length = 8
}

# Create a Cloud Storage bucket
resource "google_storage_bucket" "bucket" {
  name                        = "vertex-ai-index-bucket-${random_id.default.hex}"
  location                    = "us-central1"
  uniform_bucket_level_access = true
}

# Create index content
resource "google_storage_bucket_object" "data" {
  name    = "contents/data.json"
  bucket  = google_storage_bucket.bucket.name
  content = <<EOF
{"id": "42", "embedding": [0.5, 1.0], "restricts": [{"namespace": "class", "allow": ["cat", "pet"]},{"namespace": "category", "allow": ["feline"]}]}
{"id": "43", "embedding": [0.6, 1.0], "restricts": [{"namespace": "class", "allow": ["dog", "pet"]},{"namespace": "category", "allow": ["canine"]}]}
EOF
}

resource "google_vertex_ai_index" "default" {
  region       = "us-central1"
  display_name = "sample-index-batch-update"
  description  = "A sample index for batch update"
  labels = {
    foo = "bar"
  }

  metadata {
    contents_delta_uri = "gs://${google_storage_bucket.bucket.name}/contents"
    config {
      dimensions                  = 2
      approximate_neighbors_count = 150
      distance_measure_type       = "DOT_PRODUCT_DISTANCE"
      algorithm_config {
        tree_ah_config {
          leaf_node_embedding_count    = 500
          leaf_nodes_to_search_percent = 7
        }
      }
    }
  }
  index_update_method = "BATCH_UPDATE"

  timeouts {
    create = "2h"
    update = "1h"
  }
}

Python

Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。

def vector_search_mutate_deployed_index(
    project: str,
    location: str,
    index_endpoint_name: str,
    deployed_index_id: str,
    min_replica_count: int,
    max_replica_count: int,
) -> None:
    """Mutate the deployment resources of an already deployed index.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_endpoint_name (str): Required. Index endpoint to run the query
          against.
        deployed_index_id (str): Required. The ID of the DeployedIndex to run
          the queries against.
        min_replica_count (int): Required. The minimum number of replicas to
          deploy.
        max_replica_count (int): Required. The maximum number of replicas to
          deploy.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index endpoint instance from an existing endpoint
    index_endpoint = aiplatform.MatchingEngineIndexEndpoint(
        index_endpoint_name=index_endpoint_name
    )

    # Mutate the deployed index
    index_endpoint.mutate_deployed_index(
        deployed_index_id=deployed_index_id,
        min_replica_count=min_replica_count,
        max_replica_count=max_replica_count,
    )

パフォーマンスに影響するデプロイ設定

ベクトル検索を使用する場合、次のデプロイ設定はレイテンシ、可用性、コストに影響する可能性があります。このガイダンスはほとんどのケースに適用されます。ただし、必ず構成をテストして、ユースケースに適していることを確認してください。

設定 パフォーマンスへの影響
マシンタイプ

ハードウェアの選択は、選択したシャードサイズと直接関係しています。インデックスの作成時に指定したシャードの選択に応じて、マシンタイプごとにパフォーマンスと費用のトレードオフがあります。

料金ページを参照して、使用可能なハードウェアと料金を確認します。一般に、パフォーマンスは次の順序で向上します。

  • E2 標準
  • E2 ハイメモリ
  • N1 標準
  • N2D 標準
最小レプリカ数

minReplicaCount は、可用性とレイテンシの最小容量を予約して、トラフィックが低レベルから急速にスケールアップされたときにシステムでコールド スタートの問題が発生しないようにします。

ワークロードが低レベルに低下してから急速に高レベルに増加する場合は、初期のトラフィックの急増に対応できる数値を minReplicaCount に設定することを検討してください。

最大レプリカ数 maxReplicaCount は主に使用料金を管理するために使用します。特定のしきい値を超える費用の増加を防ぐことができます。ただし、レイテンシの増加と可用性の低下というトレードオフがあります。

IndexEndpoints を一覧取得する

IndexEndpoint リソースを一覧表示し、関連する DeployedIndex インスタンスの情報を表示するには、次のコードを実行します。

gcloud

次の例では、gcloud ai index-endpoints list コマンドを使用します。

後述のコマンドデータを使用する前に、次のように置き換えます。

  • LOCATION: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud ai index-endpoints list \
    --region=LOCATION \
    --project=PROJECT_ID

Windows(PowerShell)

gcloud ai index-endpoints list `
    --region=LOCATION `
    --project=PROJECT_ID

Windows(cmd.exe)

gcloud ai index-endpoints list ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

リクエストのデータを使用する前に、次のように置き換えます。

HTTP メソッドと URL:

GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexEndpoints

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
 "indexEndpoints": [
   {
     "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID",
     "displayName": "INDEX_ENDPOINT_DISPLAY_NAME",
     "deployedIndexes": [
       {
         "id": "DEPLOYED_INDEX_ID",
         "index": "projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID",
         "displayName": "DEPLOYED_INDEX_DISPLAY_NAME",
         "createTime": "2021-06-04T02:23:40.178286Z",
         "privateEndpoints": {
           "matchGrpcAddress": "GRPC_ADDRESS"
         },
         "indexSyncTime": "2022-01-13T04:22:00.151916Z",
         "automaticResources": {
           "minReplicaCount": 2,
           "maxReplicaCount": 10
         }
       }
     ],
     "etag": "AMEw9yP367UitPkLo-khZ1OQvqIK8Q0vLAzZVF7QjdZ5O3l7Zow-mzBo2l6xmiuuMljV",
     "createTime": "2021-03-17T04:47:28.460373Z",
     "updateTime": "2021-06-04T02:23:40.930513Z",
     "network": "VPC_NETWORK_NAME"
   }
 ]
}

Python

Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。

def vector_search_list_index_endpoint(
    project: str, location: str
) -> List[aiplatform.MatchingEngineIndexEndpoint]:
    """List vector search index endpoints.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name

    Returns:
        List of aiplatform.MatchingEngineIndexEndpoint
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # List Index Endpoints
    return aiplatform.MatchingEngineIndexEndpoint.list()

コンソール

次の手順でインデックス エンドポイントのリストを表示します。

  1. Google Cloud コンソールの [Agent Platform] セクションで、[デプロイと使用] セクションに移動します。[ベクトル検索] を選択します。

    [ベクトル検索] に移動

  2. ページの上部にある [インデックス エンドポイント] タブを選択します。
  3. 既存のインデックス エンドポイントがすべて表示されます。

詳細については、IndexEndpoint のリファレンス ドキュメントをご覧ください。

インデックスのデプロイ解除

インデックスのデプロイを解除するには、次のコードを実行します。

gcloud

次の例では、gcloud ai index-endpoints undeploy-index コマンドを使用します。

後述のコマンドデータを使用する前に、次のように置き換えます。

  • INDEX_ENDPOINT_ID: インデックス エンドポイントの ID。
  • DEPLOYED_INDEX_ID: デプロイされたインデックスを一意に識別するユーザー指定の文字列。先頭は英字にします。英字、数字、アンダースコアのみ使用できます。形式のガイドラインについては、DeployedIndex.id をご覧ください。
  • LOCATION: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud ai index-endpoints undeploy-index INDEX_ENDPOINT_ID \
    --deployed-index-id=DEPLOYED_INDEX_ID \
    --region=LOCATION \
    --project=PROJECT_ID

Windows(PowerShell)

gcloud ai index-endpoints undeploy-index INDEX_ENDPOINT_ID `
    --deployed-index-id=DEPLOYED_INDEX_ID `
    --region=LOCATION `
    --project=PROJECT_ID

Windows(cmd.exe)

gcloud ai index-endpoints undeploy-index INDEX_ENDPOINT_ID ^
    --deployed-index-id=DEPLOYED_INDEX_ID ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • INDEX_ENDPOINT_ID: インデックス エンドポイントの ID。
  • DEPLOYED_INDEX_ID: デプロイされたインデックスを一意に識別するユーザー指定の文字列。先頭は英字にします。英字、数字、アンダースコアのみ使用できます。形式のガイドラインについては、DeployedIndex.id をご覧ください。
  • LOCATION: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • PROJECT_NUMBER: プロジェクトに自動生成されたプロジェクト番号。

HTTP メソッドと URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID:undeployIndex

リクエストの本文(JSON):

{
 "deployed_index_id": "DEPLOYED_INDEX_ID"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
 "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID/operations/OPERATION_ID",
 "metadata": {
   "@type": "type.googleapis.com/google.cloud.aiplatform.v1.UndeployIndexOperationMetadata",
   "genericMetadata": {
     "createTime": "2022-01-13T04:09:56.641107Z",
     "updateTime": "2022-01-13T04:09:56.641107Z"
   }
 }
}

Python

Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。

def vector_search_undeploy_index(
    project: str,
    location: str,
    index_endpoint_name: str,
    deployed_index_id: str,
) -> None:
    """Mutate the deployment resources of an already deployed index.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_endpoint_name (str): Required. Index endpoint to run the query
          against.
        deployed_index_id (str): Required. The ID of the DeployedIndex to run
          the queries against.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index endpoint instance from an existing endpoint
    index_endpoint = aiplatform.MatchingEngineIndexEndpoint(
        index_endpoint_name=index_endpoint_name
    )

    # Undeploy the index
    index_endpoint.undeploy_index(
        deployed_index_id=deployed_index_id,
    )

コンソール

次の手順でインデックスのデプロイを解除します。

  1. Google Cloud コンソールの [Agent Platform] セクションで、[デプロイと使用] セクションに移動します。[ベクトル検索] を選択します。

    [ベクトル検索] に移動

  2. アクティブなインデックスのリストが表示されます。
  3. デプロイを解除するインデックスを選択します。インデックスの詳細ページが開きます。
  4. [デプロイされたインデックス] セクションで、デプロイを解除するインデックス エンドポイントを特定します。
  5. インデックス エンドポイントと同じ行にある オプション メニューをクリックし、[デプロイ解除] を選択します。
  6. 確認画面が表示されます。[デプロイ解除] をクリックします。注: デプロイ解除されるまで最大で 30 分かかることがあります。

IndexEndpoint の削除

IndexEndpoint を削除する前に、エンドポイントにデプロイされているすべてのインデックスのデプロイを解除する必要があります。

gcloud

次の例では、gcloud ai index-endpoints delete コマンドを使用します。

後述のコマンドデータを使用する前に、次のように置き換えます。

  • INDEX_ENDPOINT_ID: インデックス エンドポイントの ID。
  • LOCATION: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud ai index-endpoints delete INDEX_ENDPOINT_ID \
    --region=LOCATION \
    --project=PROJECT_ID

Windows(PowerShell)

gcloud ai index-endpoints delete INDEX_ENDPOINT_ID `
    --region=LOCATION `
    --project=PROJECT_ID

Windows(cmd.exe)

gcloud ai index-endpoints delete INDEX_ENDPOINT_ID ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • INDEX_ENDPOINT_ID: インデックス エンドポイントの ID。
  • LOCATION: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • PROJECT_NUMBER: プロジェクトに自動生成されたプロジェクト番号。

HTTP メソッドと URL:

DELETE https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
 "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID/operations/OPERATION_ID",
 "metadata": {
   "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeleteOperationMetadata",
   "genericMetadata": {
     "createTime": "2022-01-13T04:36:19.142203Z",
     "updateTime": "2022-01-13T04:36:19.142203Z"
   }
 },
 "done": true,
 "response": {
   "@type": "type.googleapis.com/google.protobuf.Empty"
 }
}

Python

Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。

def vector_search_delete_index_endpoint(
    project: str, location: str, index_endpoint_name: str, force: bool = False
) -> None:
    """Delete a vector search index endpoint.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_endpoint_name (str): Required. Index endpoint to run the query
          against.
        force (bool): Required. If true, undeploy any deployed indexes on this
          endpoint before deletion.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index endpoint instance from an existing endpoint
    index_endpoint = aiplatform.MatchingEngineIndexEndpoint(
        index_endpoint_name=index_endpoint_name
    )

    # Delete the index endpoint
    index_endpoint.delete(force=force)

コンソール

次の手順でインデックス エンドポイントを削除します。

  1. Google Cloud コンソールの [Agent Platform] セクションで、[デプロイと使用] セクションに移動します。[ベクトル検索] を選択します。

    [ベクトル検索] に移動

  2. ページの上部にある [インデックス エンドポイント] タブを選択します。
  3. 既存のインデックス エンドポイントがすべて表示されます。
  4. 削除するインデックス エンドポイントと同じ行にある オプション メニューをクリックして、[削除] を選択します。
  5. 確認画面が表示されます。[削除] をクリックします。インデックス エンドポイントが削除されました。