pgvectorを利用することで、ベクトル型の格納と類似検索が標準で利用可能となります。
本機能を利用するデータベースに対してCREATE EXTENSIONを実施します。psqlコマンドを利用して、セットアップするデータベースに接続します。
postgres=# CREATE EXTENSION vector; CREATE EXTENSION
SUPERUSERのパスワード自動生成機能を利用していて本機能をセットアップする場合、“6.6.1 CREATE EXTENSION”を参照してCREATE EXTENSIONを実施してください。
注意
OSSの名前は“pgvector”ですが、バイナリと拡張機能自体の名前は“vector”であることに注意してください。
pgvectorscaleを利用することで、ベクトルデータ処理高速化が実現可能となります。
本機能を利用するデータベースに対してCREATE EXTENSIONを実施します。CASCADEオプションを追加することで依存しているpgvectorも同時にCREATE EXTENSIONします。psqlコマンドを利用して、セットアップするデータベースに接続します。
postgres=# CREATE EXTENSION IF NOT EXISTS vectorscale CASCADE; CREATE EXTENSION
SUPERUSERのパスワード自動生成機能を利用していて本機能をセットアップする場合、“6.6.1 CREATE EXTENSION”を参照してCREATE EXTENSIONを実施してください。
注意
OSSの名前は“pgvectorscale”ですが、バイナリと拡張機能自体の名前は“vectorscale”であることに注意してください。
ベクトルデータベースは、近似検索により応答を高速化します。近似検索と全件検索の比較を再現率という指標で表すことができます。
再現率を測定することで、ベクトルデータベース検索の精度を測定することができるようになります。
定期的に再現率の測定することで、目標とする再現率を満たしていることを確認できます。再現率が目標値を下回った場合、ベクトルデータベースのパラメータのチューニングやインデックスの再構築を検討してください。
Operatorでは、定期的にベクトルデータベースの再現率を測定し監視することができます。本節ではベクトルデータベースの再現率の定期的な測定と監視を有効化する手順を説明します。
FEPClusterカスタムリソースのspec.fep.measurement.recallForVector.enableをtrueにすることでベクトルデータベースの再現率測定が有効化されます。
ベクトルデータベースの再現率測定が有効化されると、測定用のCronjobが構築します。測定用のCronjobは、定期的に指定したベクトルデータベースのオブジェクトに対して、ランダムなベクトルに関する近似検索と全件検索を複数回実行し再現率を測定します。
測定した結果は平均され、vector_database_recall_summaryテーブルに格納されます。テーブルを参照することで、測定時点の平均の再現率を知ることができます。
ベクトルデータベースの再現率測定を有効化しているときに、spec.fep.monitoring.enableをtrueにしてFEPExporterのモニタリング機能を有効化することで、vector_database_recall_summaryテーブルの情報をメトリクスとして収集しベクトルデータベースの再現率を監視することができます。
モニタリング機能の有効化に加えて、FEPClusterカスタムリソースのパラメータspec.fep.measurement.recallForVector.alertThresholdを定義することで、ベクトルデータベースの再現率が指定値を下回ったときAlertManagerからアラートを通知できるようになります。
ベクトルデータベースの再現率測定を有効化するFEPClusterのカスタムリソースの定義例を説明します。
この定義例では、毎月1日0時に測定を開始し、測定開始から40時間経過したら測定を終了します。
spec: fep: measurement: recallForVector: enable: true schedule: "0 0 1 * *" maxDuration: "40h" parallelJobs: 5 topK: 50 alertThreshold: 0.7 # モニタリング機能が有効な時にアラート通知する閾値を指定 # 測定対象のデータベースオブジェクトを指定 targets: - database: "mydb" tableConfigs: # データベースに対して複数のオブジェクトを指定 - schemaObject: "schema.table1.column1" - schemaObject: "schema.table2.column2" distanceMetric: l2 # ベクトルデータベースの再現率測定とモニタリング機能を有効化するとPrometheusで再現率の監視が有効 monitoring: enable: true
ベクトルデータベースの再現率測定のスケジュールは、測定を実行しても影響の少ない業務負荷の低い時間帯を指定してください。
ベクトルデータベースの再現率測定の結果を格納するvector_database_recall_summaryテーブルには下記の情報が含まれます。測定対象のオブジェクトごとに行が挿入され、測定されるごとに情報が更新されます。
カラム名 | 型 | 説明 |
---|---|---|
db_name | text | データベース名 |
schema_object_name | text | スキーマオブジェクト名 |
start_time | timestamp with timezone | 開始時刻 |
end_time | timestamp with timezone | 終了時刻 |
avg_recall | numeric | 平均再現率 |
mean_num | numeric | ベクトルの平均個数 |
expected_sample_size | integer | 期待される試行回数 |
actual_sample_size | integer | 実際の試行回数 |
failure_count | integer | 失敗回数 |
created_at | timestamp with timezone | レコード挿入時刻 |
ベクトルデータベースの再現率測定を有効にして、FEPClusterカスタムリソースのspec.fep.monitoring.enableをtrueにするとFEPExporterのモニタリング機能で、再現率の監視が有効になります。
ベクトルデータベースの再現率測定が有効な時に有効なメトリクス
メトリクス名 | 説明 |
---|---|
avg_vector_recall | ベクトルデータベースの近似検索における再現率の測定値を監視します。 |
また、FEPClusterカスタムリソースのパラメータspec.fep.measurement.recallForVector.alertThresholdを定義することで下記のアラートルールを追加します。
追加されるアラートルール
アラートルール | アラートレベル | 条件の永続性 | 説明 |
---|---|---|---|
VectorDbLowRecall | Warning | - | ベクトルデータベースの再現率がFEPClusterカスタムリソースのspec.fep.measurement.recallForVector.alertThreshold指定された閾値を下回っています。 |