🌲

Valdチュートリアル | chiVe Datasetを利用した類似検索

2022/08/20に公開

Valdは、Kubernetes上で動作する高速近似近傍密ベクトル検索エンジンです。
クラウドネイティブアーキテクチャに基づいて設計されており、分散IndexによりBillionスケールのベクトルを扱うことができます。

vald

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の構築を行います。

getstarted-vald-cluster
作成するVald cluster

  1. Kubernetes clusterの確認

    kubectl cluster-info
    
  2. 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
    
  3. Vald repositoryのclone
    本チュートリアルでは、Vald repositoryにあるサンプル設定ファイルを利用してdeploymentを行います。

    git clone https://github.com/vdaas/vald.git && \
    cd vald
    
  4. 設定ファイルの編集
    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
    
  5. 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
    
  6. 確認
    実際に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では、デモリポジトリを公開しています。

https://github.com/vdaas/vald-demo

本sectionでは、その中からchiVeを利用した類似検索を行います。

デモコンテナの実行

  1. 事前準備(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"
      
  2. 事前準備(Vald cluster)

    • port-forwardを行い、clientからrequestが可能な状態にします。
      kubectl port-forward deployment/vald-lb-gateway --address 0.0.0.0
      
  3. コンテナの実行

    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へアクセスできます。

http://localhost:8888/

tokenの入力が求められるので、CLIに表示されているtokenを入力すると下記の画面に遷移できます。

jupyter_top
token入力後のTopページ

work directoryに移動するとマウントされているファイルが表示されていることがわかります。

jupyter_work
work directory

tutorial.ipynbを選択すると、別タブでNotebookが開きます。
あとは、Notebookを手順通り進めれば完了です。

chive_top
デモNotebookのTOP

chive_data_load
適切にデータがロードされた場合の実行結果の例

chive_search_example
Insert成功時の出力結果例

まとめ

本記事では、Helmを用いたVald clusterのdeployとchiVe Datasetを用いた類似検索のデモをチュートリアル形式で行いました。

各コンポーネントの解説や設定については、下記ドキュメントを参考にしてください。

https://vald.vdaas.org/docs/

質問等がありましたら、下記Slack WSに投稿してください。

https://join.slack.com/t/vald-community/shared_invite/zt-db2ky9o4-R_9p2sVp8xRwztVa8gfnPA

Mediumでblog(英語)を公開しているので、こちらも是非ご覧ください。

https://medium.com/@vdaas-vald

公式X(Twitter)アカウントはこちら

https://twitter.com/vdaas_vald


Valdの関連記事

https://techblog.yahoo.co.jp/entry/2021061430159867/

Discussion