Valdチュートリアル | chiVe Datasetを利用した類似検索
Valdは、Kubernetes上で動作する高速近似近傍密ベクトル検索エンジンです。
クラウドネイティブアーキテクチャに基づいて設計されており、分散IndexによりBillionスケールのベクトルを扱うことができます。
Valdの主な特徴としては、以下が挙げられます。
- サービス停止なしのauto-index機能
- Persistent Volumeや外部ストレージ(S3互換)を利用したauto-backup機能
- フィルタリングのカスタマイズ
- ユーザーニーズに合わせたスケールアウト・柔軟なカスタマイズ
- 分散Indexing
本投稿では、ValdのチュートリアルとchiVeを利用したデモの実行を行います。
準備
本チュートリアルを進めるにあたり必要な依存について列挙します。必要に応じて、準備してください。
- Kubernetes cluster (v1.19~): GKE, EKS, k3d, kindなど
-
Helm (v3~)
Helmのインストール
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
- Docker: chiVe datasetを利用したデモで利用します
Vald clusterの構築
本sectionでは、Kubernetes clusterへVald clusterの構築を行います。
作成するVald cluster
-
Kubernetes clusterの確認
kubectl cluster-info
-
metrics-serverのdeploy
Valdでは、merics-serverを利用してPodのリソース状況を取得しているため、metrics-serverを準備します。(すでにdeployされている場合は不要です)kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml && \ kubectl wait -n kube-system --for=condition=ready pod -l k8s-app=metrics-server --timeout=600s
-
Vald repositoryのclone
本チュートリアルでは、Vald repositoryにあるサンプル設定ファイルを利用してdeploymentを行います。git clone https://github.com/vdaas/vald.git && \ cd vald
-
設定ファイルの編集
chiVeのデモを行うために、設定ファイル(./example/helm/values.yaml
)を編集します。./example/helm/values.yaml## vald-lb-gateway settings gateway: lb: ingress: ## ingressを利用する場合はtrueに設定し、必要に応じてannotationを追加してください。 enabled: false ## vald-agent-ngt settings agent: ngt: dimension: 300 distance_type: cos
-
Helmコマンドを利用したdeploy
設定ファイルを利用して、Vald clusterを構築します。# repoにvaldのchartsを追加 helm repo add vald https://vald.vdaas.org/charts # clusterのdeploy helm install vald vald/vald --values example/helm/values.yaml
-
確認
実際にdeployされているかどうか確認してみましょう。kubectl get pods
出力例
NAME READY STATUS RESTARTS AGE vald-agent-ngt-0 1/1 Running 0 7m12s vald-agent-ngt-1 1/1 Running 0 7m12s vald-agent-ngt-2 1/1 Running 0 7m12s vald-agent-ngt-3 1/1 Running 0 7m12s vald-agent-ngt-4 1/1 Running 0 7m12s vald-discoverer-7f9f697dbb-q44qh 1/1 Running 0 7m11s vald-lb-gateway-6b7b9f6948-4z5md 1/1 Running 0 7m12s vald-lb-gateway-6b7b9f6948-68g94 1/1 Running 0 6m56s vald-lb-gateway-6b7b9f6948-cvspq 1/1 Running 0 6m56s vald-manager-index-74c7b5ddd6-jrnlw 1/1 Running 0 7m12s
kubectl get svc
出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 9m29s vald-agent-ngt ClusterIP None <none> 8081/TCP,3001/TCP 8m48s vald-discoverer ClusterIP None <none> 8081/TCP,3001/TCP 8m48s vald-manager-index ClusterIP None <none> 8081/TCP,3001/TCP 8m48s vald-lb-gateway ClusterIP None <none> 8081/TCP,3001/TCP 8m48s
chiVe Datasetを利用したデモ
Valdでは、デモリポジトリを公開しています。
本sectionでは、その中からchiVeを利用した類似検索を行います。
デモコンテナの実行
-
事前準備(demo)
- リポジトリをクローンします。
git clone https://github.com/vdaas/vald-demo.git && \ cd vald-demo/chive
- デモで利用するデータを事前にDownloadします。
curl "https://sudachi.s3-ap-northeast-1.amazonaws.com/chive/chive-1.2-mc90.magnitude" -o "chive-1.2-mc90.magnitude"
- リポジトリをクローンします。
-
事前準備(Vald cluster)
- port-forwardを行い、clientからrequestが可能な状態にします。
kubectl port-forward deployment/vald-lb-gateway --address 0.0.0.0
- port-forwardを行い、clientからrequestが可能な状態にします。
-
コンテナの実行
docker run --user root -it -v $(pwd):/home/jovyan/work -p 8888:8888 -e UB_UID=root -e GRANT_SUDO=yes jupyter/datascience-notebook:python-3.7.6
NoteBookを利用したデモ
コンテナが実行されると、Web UIからjupyter Notebookへアクセスできます。
tokenの入力が求められるので、CLIに表示されているtokenを入力すると下記の画面に遷移できます。
token入力後のTopページ
work directoryに移動するとマウントされているファイルが表示されていることがわかります。
work directory
tutorial.ipynb
を選択すると、別タブでNotebookが開きます。
あとは、Notebookを手順通り進めれば完了です。
デモNotebookのTOP
適切にデータがロードされた場合の実行結果の例
Insert成功時の出力結果例
まとめ
本記事では、Helm
を用いたVald clusterのdeployとchiVe
Datasetを用いた類似検索のデモをチュートリアル形式で行いました。
各コンポーネントの解説や設定については、下記ドキュメントを参考にしてください。
質問等がありましたら、下記Slack WSに投稿してください。
Mediumでblog(英語)を公開しているので、こちらも是非ご覧ください。
公式X(Twitter)アカウントはこちら
Valdの関連記事
Discussion