Helmチャートを使用してGPU対応のMilvusを実行する

このページでは、Helmチャートを使用してGPU対応のMilvusインスタンスを起動する方法について説明します。

概要

Helmでは、「チャート」と呼ばれるパッケージ形式が使用されます。 チャートとは、関連する一連の Kubernetes リソースを記述したファイルの集合です。Milvus では、Milvus の依存関係やコンポーネントをデプロイするためのチャートのセットを提供しています。Milvus Helm チャートは、Helm パッケージマネージャーを使用して Kubernetes (K8s) クラスター上で Milvus のデプロイを初期化するソリューションです。

前提条件

イメージの取得で問題が発生した場合は、問題の詳細を明記の上、community@zilliz.comまでご連絡ください。必要なサポートを提供いたします。

Milvus 用 Helm Chart をインストールします

Helm は、Milvus を迅速にデプロイするのに役立つ K8s パッケージマネージャーです。

  1. 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 までのチャートについては引き続き利用可能です。それ以降のリリースについては、新しいリポジトリをご利用ください。

  1. ローカルでチャートを更新します。
$ 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.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 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             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 サーバーがどのローカルポートでリスニングしているかを確認します。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のインストールが完了したら、以下の操作が可能です。

翻訳DeepL

Office Hours

ミルバス営業時間

Milvusの専門家であるZillizから、本番導入の支援を受けましょう。

無料1:1セッションを予約する

マネージド Milvus を無料で試す

Zilliz Cloud は手間いらず、Milvus を基盤に 10 倍高速です。

始める
フィードバック

このページは役に立ちましたか ?