Helmチャートを使用したGPUサポート付きMilvusの実行
このページでは、Helm Chartを使用してGPUをサポートしたMilvusインスタンスを起動する方法を説明します。
概要
Helmはチャートと呼ばれるパッケージングフォーマットを使用します。チャートとは、Kubernetesリソースの関連セットを記述したファイルの集まりです。Milvusは、Milvusの依存関係やコンポーネントをデプロイするのに役立つチャートのセットを提供します。Milvus Helm Chartは、Helmパッケージマネージャを使用してKubernetes (K8s)クラスタ上でMilvusのデプロイをブートストラップするソリューションです。
前提条件
StorageClassをインストールします。インストールしたStorageClassは以下の手順で確認できます。
$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBIINDINGMODE ALLOWVOLUMEEXPANSION AGE standard (default) k8s.io/minikube-hostpath Delete Immediate false
インストール前にハードウェアとソフトウェアの要件を確認してください。
イメージのプル時に問題が発生した場合は、community@zilliz.comまで問題の詳細をご連絡ください。
Milvus 用 Helm チャートのインストール
HelmはK8sパッケージマネージャであり、Milvusの迅速なデプロイを支援します。
- Milvus Helmリポジトリを追加します。
$ helm repo add milvus https://zilliztech.github.io/milvus-helm/
https://milvus-io.github.io/milvus-helm/
にある Milvus Helm Charts リポジトリはアーカイブされ、以下のようにhttps://zilliztech.github.io/milvus-helm/
からさらなるアップデートを取得できます:
helm repo add zilliztech https://zilliztech.github.io/milvus-helm
helm repo update
# upgrade existing helm release
helm upgrade my-release zilliztech/milvus
アーカイブされたリポジトリは4.0.31までのチャートで利用可能です。それ以降のリリースについては、代わりに新しいレポを使用してください。
- ローカルでのチャート更新
$ helm repo update
Milvusの起動
Helmチャートをインストールしたら、Kubernetes上でMilvusを起動できます。このセクションでは、GPUをサポートしたMilvusを起動する手順を説明します。
リリース名、チャート、変更するパラメータを指定して、HelmでMilvusを起動する必要があります。このガイドでは、リリース名としてmy-release
を使用します。別のリリース名を使用するには、以下のコマンドのmy-release
を使用しているものに置き換えてください。
Milvusでは、1つまたは複数のGPUデバイスをMilvusに割り当てることができます。
1.単一のGPUデバイスを割り当てる
GPUをサポートするMilvusでは、1つ以上のGPUデバイスを割り当てることができます。
Milvusクラスタ
cat <<EOF > custom-values.yaml indexNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" queryNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" EOF
$ helm install my-release milvus/milvus -f custom-values.yaml
Milvusスタンドアロン
cat <<EOF > custom-values.yaml standalone: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" EOF
$ helm install my-release milvus/milvus --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsar.enabled=false -f custom-values.yaml
2.複数のGPUデバイスの割り当て
単一のGPUデバイスに加えて、複数のGPUデバイスをMilvusに割り当てることもできます。
Milvusクラスタ
cat <<EOF > custom-values.yaml indexNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" queryNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" EOF
上記の構成では、indexNodeとqueryNodeが2つのGPUを共有しています。indexNodeとqueryNodeに異なるGPUを割り当てるには、設定ファイルの
extraEnv
:cat <<EOF > custom-values.yaml indexNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" extraEnv: - name: CUDA_VISIBLE_DEVICES value: "0" queryNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" extraEnv: - name: CUDA_VISIBLE_DEVICES value: "1" EOF
$ helm install my-release milvus/milvus -f custom-values.yaml
- リリース名にはアルファベット、数字、ダッシュのみを使用します。リリース名には、文字、数字、およびダッシュのみを含める必要があります。
- デフォルトのコマンドラインは、Helmを使用してMilvusをインストールする際にMilvusのクラスタバージョンをインストールします。Milvusをスタンドアロンでインストールする場合は、さらなる設定が必要です。
- Kuberenetesのdeprecated API migration guideによると、PodDisruptionBudgetのpolicy/v1beta1APIバージョンはv1.25から提供されなくなった。代わりにpolicy/v1APIバージョンを使用するようにマニフェストおよびAPIクライアントを移行することが推奨されます。
Kuberenetes v1.25以降でPodDisruptionBudgetのpolicy/v1beta1APIバージョンを使用しているユーザのための回避策として、代わりに以下のコマンドを実行してMilvusをインストールすることができます:
helm install my-release milvus/milvus --set pulsar.bookkeeper.pdb.usePolicy=false,pulsar.broker.pdb.usePolicy=false,pulsar.proxy.pdb.usePolicy=false,pulsar.zookeeper.pdb.usePolicy=false
- 詳細はMilvus Helm ChartおよびHelmを参照。
Milvusスタンドアロン
cat <<EOF > custom-values.yaml indexNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" queryNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" EOF
上記の構成では、indexNodeとqueryNodeは2つのGPUを共有しています。indexNodeとqueryNodeに異なるGPUを割り当てるには、設定ファイルのextraEnvを以下のように設定することで、適宜設定を変更することができます:
cat <<EOF > custom-values.yaml indexNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" extraEnv: - name: CUDA_VISIBLE_DEVICES value: "0" queryNode: resources: requests: nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1" extraEnv: - name: CUDA_VISIBLE_DEVICES value: "1" EOF
$ helm install my-release milvus/milvus --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsar.enabled=false -f custom-values.yaml
2.Milvus ステータスのチェック
以下のコマンドを実行してMilvusのステータスをチェックします:
$ kubectl get pods
Milvusが起動すると、READY
列にすべてのPodの1/1
が表示されます。
Milvusクラスタ
NAME READY STATUS RESTARTS AGE my-release-etcd-0 1/1 Running 0 3m23s my-release-etcd-1 1/1 Running 0 3m23s my-release-etcd-2 1/1 Running 0 3m23s my-release-milvus-datacoord-6fd4bd885c-gkzwx 1/1 Running 0 3m23s my-release-milvus-datanode-68cb87dcbd-4khpm 1/1 Running 0 3m23s my-release-milvus-indexcoord-5bfcf6bdd8-nmh5l 1/1 Running 0 3m23s my-release-milvus-indexnode-5c5f7b5bd9-l8hjg 1/1 Running 0 3m24s my-release-milvus-proxy-6bd7f5587-ds2xv 1/1 Running 0 3m24s my-release-milvus-querycoord-579cd79455-xht5n 1/1 Running 0 3m24s my-release-milvus-querynode-5cd8fff495-k6gtg 1/1 Running 0 3m24s my-release-milvus-rootcoord-7fb9488465-dmbbj 1/1 Running 0 3m23s my-release-minio-0 1/1 Running 0 3m23s my-release-minio-1 1/1 Running 0 3m23s my-release-minio-2 1/1 Running 0 3m23s my-release-minio-3 1/1 Running 0 3m23s my-release-pulsar-autorecovery-86f5dbdf77-lchpc 1/1 Running 0 3m24s my-release-pulsar-bookkeeper-0 1/1 Running 0 3m23s my-release-pulsar-bookkeeper-1 1/1 Running 0 98s my-release-pulsar-broker-556ff89d4c-2m29m 1/1 Running 0 3m23s my-release-pulsar-proxy-6fbd75db75-nhg4v 1/1 Running 0 3m23s my-release-pulsar-zookeeper-0 1/1 Running 0 3m23s my-release-pulsar-zookeeper-metadata-98zbr 0/1 Completed 0 3m24s
Milvusスタンドアロン
NAME READY STATUS RESTARTS AGE my-release-etcd-0 1/1 Running 0 30s my-release-milvus-standalone-54c4f88cb9-f84pf 1/1 Running 0 30s my-release-minio-5564fbbddc-mz7f5 1/1 Running 0 30s
3.ローカルポートをMilvusに転送する
Milvusサーバがリッスンしているローカルポートを確認します。ポッド名を自分のものに置き換えてください。
$ kubectl get pod my-release-milvus-proxy-6bd7f5587-ds2xv --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530
次に、以下のコマンドを実行し、ローカルポートをMilvusがリッスンしているポートに転送します。
$ kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530
オプションとして、上記のコマンドで27017:19530
の代わりに:19530
を使用すると、kubectl
にローカルポートを割り当てさせることができ、ポートの競合を管理する必要がなくなります。
デフォルトでは、kubectlのポートフォワーディングはlocalhost
のみをリッスンします。Milvusに選択したIPアドレスまたはすべてのIPアドレスをリッスンさせたい場合は、address
フラグを使用してください。以下のコマンドは、port-forwardをホストマシンのすべてのIPアドレスでリッスンするようにします。
$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
Forwarding from 0.0.0.0:27017 -> 19530
Milvusのアンインストール
以下のコマンドを実行し、Milvusをアンインストールします。
$ helm uninstall my-release
次の作業
Milvusをインストールしたら
クイックスタートでMilvusの機能を確認する。
Milvusの基本操作を学ぶ:
Milvuクラスタをクラウドにデプロイする:
MilvusのデータバックアップのためのオープンソースツールであるMilvus Backupを紹介します。
オープンソースのMilvusデバッグツールであるBirdwatcherのご紹介。
Milvusを直感的に管理するオープンソースのGUIツールAttuをご覧ください。