PSA インデックスまたは PSC インデックスをクエリして最近傍を取得する

PSA インデックスまたは PSC インデックスを作成したら、クエリを実行して最近傍を取得できます。

PSC インデックスのクエリについて

PSC インデックスから作成されたコンピューティング アドレスを使用して、クエリを送信できます。次の例では、TARGET_IP を作成されたコンピューティング アドレスに置き換えます。

PSA インデックスのクエリについて

DeployedIndex には TARGET_IP があり、IndexEndpoints をリストすることで取得できます。

インデックスをクエリする

DeployedIndex をクエリするには、ポート 10000TARGET_IP に接続し、Match メソッドまたは BatchMatch メソッドを呼び出します。また、DOC_ID を使用してクエリすることもできます。

以下の例では、オープンソース ツールの grpc_cli を使用して、デプロイされたインデックス サーバーに grpc リクエストを送信します。

gRPC

最初の例では、Match メソッドを使用して単一のクエリを送信します。

./grpc_cli call ${TARGET_IP}:10000 google.cloud.aiplatform.container.v1.MatchService.Match 'deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.1,..]'

2 番目の例では、2 つのクエリを同じ BatchMatch リクエストに統合しています。

./grpc_cli call ${TARGET_IP}:10000 google.cloud.aiplatform.container.v1.MatchService.BatchMatch 'requests: [{deployed_index_id: "${DEPLOYED_INDEX_ID}", requests: [{deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.1,..]}, {deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.2,..]}]}]'

これらの API は、[サービスとピアリングされた同じ VPC](#vpc-network-peering-setup) で実行されているクライアントから呼び出す必要があります。

DOC_ID を使用してクエリを実行するには、次の例を使用します。

./grpc_cli call ${TARGET_IP}:10000  google.cloud.aiplatform.container.v1.MatchService.Match "deployed_index_id:'"test_index1"',embedding_id: '"606431"'"

この例では、トークンと数値の制限を使用してクエリを送信します。

./grpc_cli call ${TARGET_IP}:10000 google.cloud.aiplatform.container.v1.MatchService.Match 'deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [1, 1], "sparse_embedding": {"values": [111.0,111.1,111.2], "dimensions": [10,20,30]}, numeric_restricts: [{name: "double-ns", value_double: 0.3, op: LESS_EQUAL}, {name: "double-ns", value_double: -1.2, op: GREATER}, {name: "double-ns", value_double: 0., op: NOT_EQUAL}], restricts: [{name: "color", allow_tokens: ["red"]}]'

詳細については、クライアント ライブラリの説明をご覧ください。

コンソール

コンソールから VPC インデックスをクエリするには、次の手順を実施します。

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

    [ベクトル検索] に移動

  2. クエリを実行する VPC インデックスを選択します。[インデックスの情報] ページが開きます。
  3. [デプロイされたインデックス] セクションまで下にスクロールし、クエリを実行するデプロイされたインデックスを選択します。[デプロイされるインデックスの情報] ページが開きます。
  4. [インデックスのクエリ] セクションから、クエリ パラメータを選択します。ベクトルや特定のデータポイントでクエリを実行できます。
  5. オープンソース ツールの grpc_cli または Vertex AI SDK for Python を使用してクエリを実行します。

パフォーマンスに影響するクエリ時間の設定

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

パラメータの定義については、インデックス構成パラメータをご覧ください。

パラメータ 概要 パフォーマンスへの影響
approximateNeighborsCount

各シャードから取得するおおよその結果数をアルゴリズムに指定します。

approximateNeighborsCount の値は常に setNeighborsCount の値より大きくする必要があります。setNeighborsCount の値が小さい場合は、approximateNeighborsCount の値を 10 倍にすることをおすすめします。setNeighborsCount 値が大きい場合は、小さい乗数を使用できます。

approximateNeighborsCount の値を大きくすると、次のようにパフォーマンスに影響する可能性があります。

  • 再現率: 増加
  • レイテンシ: 増加する可能性がある
  • 可用性: 影響なし
  • 費用: 検索時に処理されるデータが増えるため、費用が増加する可能性がある

approximateNeighborsCount の値を小さくすると、次のようにパフォーマンスに影響する可能性があります。

  • 再現率: 減少
  • レイテンシ: 低下する可能性がある
  • 可用性: 影響なし
  • 費用: 検索時に処理されるデータが少ないため、費用が削減される
setNeighborCount クエリで返す結果の数を指定します。

300 以下の値は、ほとんどのユースケースでパフォーマンスを維持できます。値が大きい場合は、特定のユースケースでテストします。

fractionLeafNodesToSearch 最近傍を検索する際に参照するリーフノードの割合を制御します。これは、リーフノードあたりのエンベディングが多いほど、リーフあたりのデータが多く検査される leafNodeEmbeddingCount に関連しています。

fractionLeafNodesToSearch の値を大きくすると、次のようにパフォーマンスに影響する可能性があります。

  • 再現率: 増加
  • レイテンシ: 増加
  • 可用性: 影響なし
  • 費用: レイテンシが長くなると、マシンリソースの占有量が増えるため、費用が増加する可能性がある

fractionLeafNodesToSearch の値を小さくすると、次のようにパフォーマンスに影響する可能性があります。

  • 再現率: 減少
  • レイテンシ: 短縮
  • 可用性: 影響なし
  • 費用: レイテンシが短いほどマシンリソースを占有しなくなるため、費用が削減される

次のステップ