すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:基本的なベクトル検索

最終更新日:Apr 23, 2025

Proxima CE は、基本的なベクトル検索と数百万レベルの Top K 検索タスクをサポートしています。このトピックでは、Proxima CE でオフラインモードで基本的なベクトル検索タスクを実行する方法について説明し、例を示します。

前提条件

Proxima CE パッケージをインストールする、および入力テーブルを準備します。

制限事項

テナントレベルのスキーマ構文スイッチが有効になっているプロジェクトでは、ベクトル検索タスクはサポートされていません。有効になっている場合、Schema xxx does not exist のようなエラーメッセージが返されます。このトピックのコード例は、テナントレベルのスキーマ構文スイッチが無効になっているプロジェクトで実行してください。

注意事項

  • ボリューム権限を有効化し、外部ボリュームを正常に作成した場合は、DataWorks または odpscmd でボリュームメソッドを使用してタスクを実行できます。そうでない場合は、必要に応じて起動パラメーターとして AK または role_arn を入力する必要があります。これらは Proxima CE タスクによってプログラムで作成および使用されます。

  • DataWorks で Proxima CE タスクを実行する場合は、[スケジュール用の共有リソースグループ] を使用して [スモークテスト] を実行する必要があります。詳細については、「スモークテストを実行する」をご参照ください。

入力テーブルへのデータのインポート

プロセス全体をテストする場合は、DataWorks の SQL ノードで次のコマンドを実行して、小さなテーブルを生成し、簡易検索タスクを実行できます。

説明

関連するベクトルデータを、作成した doc テーブルと query テーブルにインポートする必要があります。

ALTER TABLE doc_table_float_smoke ADD PARTITION(pt='20221111');
INSERT OVERWRITE TABLE doc_table_float_smoke PARTITION (pt='20221111') VALUES
('1.nid','1~1~1~1~1~1~1~1'),
('2.nid','2~2~2~2~2~2~2~2'),
('3.nid','3~3~3~3~3~3~3~3'),
('4.nid','4~4~4~4~4~4~4~4'),
('5.nid','5~5~5~5~5~5~5~5'),
('6.nid','6~6~6~6~6~6~6~6'),
('7.nid','7~7~7~7~7~7~7~7'),
('8.nid','8~8~8~8~8~8~8~8'),
('9.nid','9~9~9~9~9~9~9~9'),
('10.nid','10~10~10~10~10~10~10~10');

ALTER TABLE query_table_float_smoke ADD PARTITION(pt='20221111');
INSERT OVERWRITE TABLE query_table_float_smoke PARTITION (pt='20221111') VALUES
('q1.nid','1~1~1~1~2~2~2~2'),
('q2.nid','4~4~4~4~3~3~3~3'),
('q3.nid','9~9~9~9~5~5~5~5');

実行

ビジネス要件に基づいて、DataWorks コンソールまたは MaxCompute クライアント (odpscmd) で基本的なベクトル検索タスクを実行できます。

重要

以下のコード例で使用されているパラメーターの詳細については、「リファレンス: Proxima CE パラメーター」をご参照ください。

DataWorks での実行

DataWorks で MaxCompute ODPS MR ノードを作成し、ODPS SQL スクリプトを使用して Proxima CE を実行できます。

image

  • 外部ボリュームを使用して基本的なベクトル検索タスクを実行します。

    --@resource_reference{"<proxima_ce_jar>"} -- アップロードされた proxima-ce JAR パッケージを参照します。「データ開発」ページで、アップロードされた JAR パッケージを右クリックし、「リソースの参照」を選択して、このコメント行を生成します。
    jar -resources <proxima_ce_jar>  -- アップロードされた proxima-ce JAR パッケージ
    -classpath <proxima_ce_jar> com.alibaba.proxima2.ce.ProximaCERunner  -- クラスパスはメイン関数エントリクラスを指定します
    -doc_table doc_table_float_smoke  -- 入力 doc テーブル
    -doc_table_partition 20221111  -- 入力 doc テーブルのパーティション
    -query_table query_table_float_smoke  -- 入力 query テーブル
    -query_table_partition 20221111  -- 入力 query テーブルのパーティション
    -output_table output_table_float_smoke  -- 出力テーブル
    -output_table_partition 20221111  -- 出力テーブルのパーティション
    -data_type float  -- ベクトルのデータ型
    -dimension 8  -- ベクトルの次元
    -topk 1  -- ベクトル検索の topk
    -job_mode train:build:seek:recall  -- 検索タスクモードを指定します。デフォルトは train:build:seek です。recall を追加すると、この検索の再現率が計算されます
    -external_volume_name <ext_volume> -- 作成済みのユーザー指定の OSS 上のボリューム。基盤となる OSS ディレクトリも作成する必要があります。そうでない場合、操作は失敗します
    -owner_id <oid>  -- ユーザーが自身を識別するために提供する一意の ID
    ; -- セミコロンを忘れないでください。これは ODPS SQL の終了マークです

    上記のコードを実行する際には、実際の状況に合わせて以下のパラメーターを置き換える必要があります。

    パラメーター

    説明

    proxima_ce_jar

    アップロードされた Proxima CE インストールパッケージの名前 (例: proxima-ce-aliyun-1.0.2.jar)。詳細については、「Proxima CE パッケージをインストールする」をご参照ください。

    ext_volume

    作成された外部ボリュームの名前。外部ボリュームの作成方法については、「外部ボリューム操作」をご参照ください。

    oid

    数字で構成される一意のユーザー識別子。推奨される長さは 32 桁以下です (例: 123456)。Alibaba Cloud アカウント ID を使用することをお勧めします。

  • RAM ロールの ARN を使用して基本的なベクトル検索タスクを実行します。

    --@resource_reference{"<proxima_ce_jar>"}  -- アップロードされた proxima-ce JAR パッケージを参照します。「データ開発」ページで、アップロードされた JAR パッケージを右クリックし、「リソースの参照」を選択して、このコメント行を生成します
    jar -resources <proxima_ce_jar>  -- アップロードされた proxima-ce JAR パッケージ
    -classpath <proxima_ce_jar> com.alibaba.proxima2.ce.ProximaCERunner  -- クラスパスはメイン関数エントリクラスを指定します
    -doc_table doc_table_float_smoke  -- 入力 doc テーブル
    -doc_table_partition 20221111  -- 入力 doc テーブルのパーティション
    -query_table query_table_float_smoke  -- 入力 query テーブル
    -query_table_partition 20221111  -- 入力 query テーブルのパーティション
    -output_table output_table_float_smoke  -- 出力テーブル
    -output_table_partition 20221111  -- 出力テーブルのパーティション
    -data_type float  -- ベクトルのデータ型
    -dimension 8  -- ベクトルの次元
    -topk 1  -- ベクトル検索の topk
    -job_mode train:build:seek:recall  -- 検索タスクモードを指定します。デフォルトは train:build:seek です。recall を追加すると、この検索の再現率が計算されます
    -oss_role_arn <rolearn> -- OSS にアクセスできるユーザーのクラウドアカウントの role_arn。acs:ram::1234xxx5678:role/xxx-role の形式です
    -oss_endpoint <endpoint> -- ターゲットリージョンのエンドポイント
    -oss_bucket <bucket> -- 作成された OSS バケット
    -owner_id <oid>  -- ユーザーが自身を識別するために提供する一意の ID
    ; -- セミコロンを忘れないでください。これは ODPS SQL の終了マークです

    上記のコードを実行する際には、実際の状況に合わせて以下のパラメーターを置き換える必要があります。

    パラメーター

    説明

    proxima_ce_jar

    アップロードされた Proxima CE インストールパッケージの名前 (例: proxima-ce-aliyun-1.0.1.jar)。詳細については、「Proxima CE パッケージをインストールする」をご参照ください。

    rolearn

    RAM ロールの ARN 情報 (例: acs:ram::1234xxx5678:role/xxx-role)。

    RAM コンソール にログインし、左側のナビゲーションウィンドウの [ID] ドロップダウンリストの [ロール] ページから取得できます。

    endpoint

    MaxCompute プロジェクトが配置されているリージョンの内部 OSS エンドポイント。詳細については、「リージョンとエンドポイント」をご参照ください。

    bucket

    MaxCompute プロジェクトと同じリージョンにある OSS バケットの名前。バケット名の表示方法については、「バケットを一覧表示する」をご参照ください。

    oid

    数字で構成される一意のユーザー識別子。推奨される長さは 32 桁以下です (例: 123456)。Alibaba Cloud アカウント ID を使用することをお勧めします。

odpscmd での実行

odpscmd を使用して実行する場合は、MaxCompute クライアント (odpscmd) で次のスクリプトを実行できます。

  • 外部ボリュームを使用して基本的なベクトル検索タスクを実行します。

    jar -resources <proxima_ce_jar> 
    -classpath <proxima_ce_jar_path> com.alibaba.proxima2.ce.ProximaCERunner 
    -doc_table doc_table_float_smoke 
    -doc_table_partition 20221111 
    -query_table query_table_float_smoke 
    -query_table_partition 20221111 
    -output_table output_table_float_smoke 
    -output_table_partition 20221111 
    -data_type float 
    -dimension 8 
    -topk 1 
    -job_mode train:build:seek:recall 
    -external_volume_name <ext_volume> 
    -owner_id <oid> 
    ;

    上記のコードを実行する際には、実際の状況に合わせて以下のパラメーターを置き換える必要があります。

    パラメーター

    説明

    proxima_ce_jar

    アップロードされた Proxima CE インストールパッケージの名前 (例: proxima-ce-aliyun-1.0.1.jar)。詳細については、「Proxima CE パッケージをインストールする」をご参照ください。

    proxima_ce_jar_path

    Proxima CE JAR パッケージのローカルパス。ここでは、JAR パッケージ名のみを使用すると、JAR が実行スクリプトと同じディレクトリにあることを示します。

    ext_volume

    作成された外部ボリュームの名前。外部ボリュームの作成方法については、「外部ボリューム操作」をご参照ください。

    oid

    数字で構成される一意のユーザー識別子。推奨される長さは 32 桁以下です (例: 123456)。Alibaba Cloud アカウント ID を使用することをお勧めします。

  • RAM ロールの ARN を使用して基本的なベクトル検索タスクを実行します。

    jar -resources <proxima_ce_jar> 
    -classpath <proxima_ce_jar_path> com.alibaba.proxima2.ce.ProximaCERunner 
    -doc_table doc_table_float_smoke 
    -doc_table_partition 20221111 
    -query_table query_table_float_smoke 
    -query_table_partition 20221111 
    -output_table output_table_float_smoke 
    -output_table_partition 20221111 
    -data_type float 
    -dimension 8 
    -topk 1 
    -job_mode train:build:seek:recall 
    -oss_role_arn <rolearn> 
    -oss_endpoint <endpoint> 
    -oss_bucket <bucket> 
    -owner_id <oid> 
    ;

    上記のコードを実行する際には、実際の状況に合わせて以下のパラメーターを置き換える必要があります。

    パラメーター

    説明

    proxima_ce_jar

    アップロードされた Proxima CE インストールパッケージの名前 (例: proxima-ce-aliyun-1.0.1.jar)。詳細については、「Proxima CE パッケージをインストールする」をご参照ください。

    proxima_ce_jar_path

    Proxima CE JAR パッケージのローカルパス。ここでは、JAR パッケージ名のみを使用すると、JAR が実行スクリプトと同じディレクトリにあることを示します。

    rolearn

    RAM ロールの ARN 情報 (例: acs:ram::1234xxx5678:role/xxx-role)。

    RAM コンソール にログインし、左側のナビゲーションウィンドウの [ID] ドロップダウンリストの [ロール] ページから取得できます。

    endpoint

    MaxCompute プロジェクトが配置されているリージョンの内部 OSS エンドポイント。詳細については、「OSS リージョンとエンドポイント」をご参照ください。

    bucket

    MaxCompute プロジェクトと同じリージョンにある OSS バケットの名前。バケット名の表示方法については、「バケットを一覧表示する」をご参照ください。

    oid

    数字で構成される一意のユーザー識別子。推奨される長さは 32 桁以下です (例: 123456)。Alibaba Cloud アカウント ID を使用することをお勧めします。

結果

  • 出力結果の例。

    Vector retrieval - Data type: 4, Vector dimension: 8, Retrieval method: HNSW, Calculation method: Squared Euclidean, Construction mode: train:build:seek:recall  
    Doc table information - Table name: doc_table_float_smoke, Partition: 20221111, Doc count: 10, Vector delimiter: ~  
    Query table information - Table name: query_table_float_smoke, Partition: 20221111, Query count: 3, Vector delimiter: ~  
    Output table information - Table name: output_table_float_smoke, Partition: 20221111  
    Row and column information - Row count: 1, Column count: 1, Doc count per column index: 1000000  
    Clear Volume index: false  
    
    Time consumption of each worker (unit: seconds):  
       SegmentationWorker:      1  
       TmpTableWorker:      0  
       KmeansGraphWorker:       0  
       BuildJobWorker:      120  
       SeekJobWorker:       60  
       TmpResultJoinWorker:     0  
       RecallWorker:        60  
       CleanUpWorker:       1  
    Total time consumption (unit: minutes):  
    
    Actual recall rate:  
        Recall@1:   1.0
  • 出力テーブルの結果の例。

    +------------+------------+------------+------------+
    | pk         | knn_result | score      | pt         |
    +------------+------------+------------+------------+
    | q1.nid     | 1.nid      | 4.0        | 20221111   |
    | q2.nid     | 3.nid      | 4.0        | 20221111   |
    | q3.nid     | 7.nid      | 32.0       | 20221111   |

数百万レベルの Top K 検索

Proxima 2.x カーネルのパフォーマンス向上により、Proxima CE は、起動パラメーター -topk を設定するだけで、数百万レベルの Top K 検索取得 (数百万のベクターの中からクエリベクターに最も類似した K 個の結果を高速に検索) をサポートできます。