Helmチャートを使用してGPU対応のMilvusを実行する
このページでは、Helmチャートを使用してGPU対応のMilvusインスタンスを起動する方法について説明します。
概要
Helmでは、「チャート」と呼ばれるパッケージ形式が使用されます。 チャートとは、関連する一連の Kubernetes リソースを記述したファイルの集合です。Milvus では、Milvus の依存関係やコンポーネントをデプロイするためのチャートのセットを提供しています。Milvus Helm チャートは、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 Chart をインストールします
Helm は、Milvus を迅速にデプロイするのに役立つ K8s パッケージマネージャーです。
- 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 dataNode: 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.yamlMilvus スタンドアロン
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 pulsarv3.enabled=false -f custom-values.yaml
2. 複数のGPUデバイスの割り当て
単一のGPUデバイスに加え、Milvusに複数のGPUデバイスを割り当てることもできます。
Milvusクラスタ
cat <<EOF > custom-values.yaml dataNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" queryNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" EOF上記の構成では、4つのCPUが利用可能であり、各dataNodeおよびqueryNodeは2つのGPUを使用しています。dataNodeとqueryNodeに異なるGPUを割り当てるには、構成ファイルで
extraEnvを次のように設定して、構成を適宜変更します。cat <<EOF > custom-values.yaml dataNode: 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 をスタンドアロンでインストールする場合は、追加の設定が必要です。
- Kubernetesの非推奨API移行ガイドによると、v1.25以降、PodDisruptionBudgetのpolicy/v1beta1APIバージョンは提供されなくなりました。マニフェストおよびAPIクライアントを、代わりにpolicy/v1APIバージョンを使用するように移行することを推奨します。
Kubernetes 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チャートおよびHelmを参照してください。
Milvus スタンドアロン
cat <<EOF > custom-values.yaml dataNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" queryNode: resources: requests: nvidia.com/gpu: "2" limits: nvidia.com/gpu: "2" EOF上記の構成では、利用可能な CPU が 4 つあり、各 dataNode および queryNode が 2 つの GPU を使用しています。dataNode と queryNode に異なる GPU を割り当てるには、構成ファイル内の extraEnv を次のように設定して、構成を適宜変更してください:
cat <<EOF > custom-values.yaml dataNode: 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 pulsarv3.enabled=false -f custom-values.yaml
2. Milvusのステータスを確認する
以下のコマンドを実行して、Milvusのステータスを確認します:
$ kubectl get pods
Milvusが起動すると、すべてのポッドについて「READY 」列に「1/1 」と表示されます。
Milvusクラスタ
NAME READY STATUS RESTARTS AGE my-release-etcd-0 1/1 Running 0 3m24s my-release-etcd-1 1/1 Running 0 3m24s my-release-etcd-2 1/1 Running 0 3m24s my-release-milvus-datanode-698dbf7d77-rjkkq 1/1 Running 0 3m24s my-release-milvus-mixcoord-856d666559-rpj8z 1/1 Running 0 3m24s my-release-milvus-proxy-7f7cf47689-pzltw 1/1 Running 0 3m24s my-release-milvus-querynode-7fb6d5b5f8-92phj 1/1 Running 0 3m24s my-release-milvus-streamingnode-5867bfbcbf-cg9xx 1/1 Running 0 3m24s my-release-minio-0 1/1 Running 0 3m24s my-release-minio-1 1/1 Running 0 3m24s my-release-minio-2 1/1 Running 0 3m24s my-release-minio-3 1/1 Running 0 3m24s my-release-pulsarv3-bookie-0 1/1 Running 0 3m24s my-release-pulsarv3-bookie-1 1/1 Running 0 3m24s my-release-pulsarv3-bookie-2 1/1 Running 0 3m24s my-release-pulsarv3-bookie-init-p8hcq 0/1 Completed 0 3m24s my-release-pulsarv3-broker-0 1/1 Running 0 3m24s my-release-pulsarv3-broker-1 1/1 Running 0 3m24s my-release-pulsarv3-proxy-0 1/1 Running 0 3m24s my-release-pulsarv3-proxy-1 1/1 Running 0 3m24s my-release-pulsarv3-pulsar-init-8kjsj 0/1 Completed 0 3m24s my-release-pulsarv3-recovery-0 1/1 Running 0 3m24s my-release-pulsarv3-zookeeper-0 1/1 Running 0 3m24s my-release-pulsarv3-zookeeper-1 1/1 Running 0 3m24s my-release-pulsarv3-zookeeper-2 1/1 Running 0 3m24sMilvus スタンドアロン
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 サーバーがどのローカルポートでリスニングしているかを確認します。pod 名は実際のものに変更してください。
$ 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 フラグを使用してください。次のコマンドを実行すると、ポートフォワーディングがホストマシンのすべての 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 WebUIへのアクセス
Milvus には、ブラウザからアクセスできる「Milvus WebUI」という組み込みの GUI ツールが付属しています。Milvus WebUI は、シンプルで直感的なインターフェースにより、システムの可観測性を高めます。Milvus WebUI を使用すると、Milvus のコンポーネントや依存関係の統計情報やメトリクスを確認したり、データベースやコレクションの詳細を確認したり、Milvus の詳細な設定を一覧表示したりすることができます。 Milvus WebUIの詳細については、「Milvus WebUI」を参照してください。
Milvus WebUIへのアクセスを有効にするには、プロキシポッドをローカルポートにポートフォワードする必要があります。
$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27018:9091
Forwarding from 0.0.0.0:27018 -> 9091
これで、http://localhost:27018 から Milvus Web UI にアクセスできるようになります。
Milvus のアンインストール
以下のコマンドを実行して、Milvus をアンインストールします。
$ helm uninstall my-release
Storage V3 はデフォルトで無効になっています。Storage V3 に依存する機能を使用する前に、有効にしてください。要件および互換性に関する注意事項については、「Storage V3」を参照してください。
次の手順
Milvusのインストールが完了したら、以下の操作が可能です。
「クイックスタート」を参照して、Milvusの機能を確認してください。
Milvusの基本的な操作方法を学びましょう:
クラウド上に Milvus クラスターをデプロイする:
Milvusの可観測性と管理のための直感的なWebインターフェース「Milvus WebUI」をご覧ください。
Milvusデータのバックアップを行うオープンソースツール「Milvus Backup」をご覧ください。
Milvusのデバッグや動的な構成更新を行うためのオープンソースツール「Birdwatcher」をご覧ください。
Milvusを直感的に管理できるオープンソースのGUIツール「Attu」をご覧ください。