使用 Helm Chart 執行具備 GPU 支援的 Milvus

本頁面說明如何透過 Helm Chart 啟動具備 GPU 支援的 Milvus 實例。

概述

Helm 使用一種稱為「圖表」(charts)的封裝格式。 Chart 是一組檔案的集合,用於描述一組相關的 Kubernetes 資源。Milvus 提供了一組 Chart,以協助您部署 Milvus 的依賴項與組件。Milvus Helm Chart是一項解決方案,可透過 Helm 套件管理器在 Kubernetes (K8s) 叢集上初始化 Milvus 的部署。

先決條件

若在拉取映像檔時遇到任何問題,請透過community@zilliz.com聯絡我們,並提供問題詳情,我們將為您提供必要的支援。

安裝 Milvus 的 Helm Chart

Helm 是一款 K8s 套件管理工具,可協助您快速部署 Milvus。

  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. 在本地端更新 Charts。
$ helm repo update

啟動 Milvus

安裝 Helm 圖表後,即可在 Kubernetes 上啟動 Milvus。本節將引導您逐步完成啟用 GPU 支援的 Milvus 啟動步驟。

您應透過 Helm 指定發行版名稱、圖表以及預期要變更的參數來啟動 Milvus。在本指南中,我們使用my-release 作為發行版名稱。若要使用不同的發行版名稱,請將以下指令中的my-release 替換為您正在使用的名稱。

Milvus 允許您為 Milvus 指派一個或多個 GPU 裝置。

1. 指派單一 GPU 裝置

支援 GPU 的 Milvus 允許您指派一個或多個 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 裝置外,您也可以將多個 GPU 裝置指派給 Milvus。

  • 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 可用,且每個 dataNode 和 queryNode 各使用兩顆 GPU。若要將不同的 GPU 指派給 dataNode 和 queryNode,您可以透過在配置檔案中設定 `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 ChartHelm
  • 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 可用,且每個 dataNode 和 queryNode 各使用兩顆 GPU。若要將不同的 GPU 分配給 dataNode 和 queryNode,您可以透過在配置檔案中將 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 啟動後,所有 Pod 的「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

若需,您可在上述指令中使用:19530 取代27017:19530 ,讓kubectl 為您分配一個本地端埠,如此便無需自行處理埠號衝突問題。

預設情況下,kubectl 的端口轉發僅監聽localhost 。若要讓 Milvus 監聽選定的或所有 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 的圖形化使用者介面工具,您可透過瀏覽器存取。Milvus WebUI 透過簡單直覺的介面,提升系統的可觀察性。您可以使用 Milvus WebUI 觀察 Milvus 各元件與依賴項的統計資料和指標、檢查資料庫與收集項的詳細資訊,以及列出詳細的 Milvus 配置。 有關 Milvus WebUI 的詳細資訊,請參閱Milvus WebUI

若要啟用對 Milvus WebUI 的存取,您需要將代理 pod 進行端口轉發至本機端口。

$ 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 WebUI。

解除安裝 Milvus

執行以下指令以解除安裝 Milvus。

$ helm uninstall my-release

Storage V3 預設為停用狀態。在使用依賴此功能的服務前,請先啟用它。有關需求與相容性考量,請參閱Storage V3

下一步

安裝完 Milvus 後,您可以:

翻譯者DeepL

Office Hours

Milvus 辦公時間

從 Milvus 的專家 Zilliz 取得生產部署的協助。

預約免費 1:1 課程

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?