使用 Helm Chart 執行具備 GPU 支援的 Milvus
本頁面說明如何透過 Helm Chart 啟動具備 GPU 支援的 Milvus 實例。
概述
Helm 使用一種稱為「圖表」(charts)的封裝格式。 Chart 是一組檔案的集合,用於描述一組相關的 Kubernetes 資源。Milvus 提供了一組 Chart,以協助您部署 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 Chart
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 及更早版本的圖表。若需更新版,請改用新儲存庫。
- 在本地端更新 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.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 裝置外,您也可以將多個 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 Chart和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 可用,且每個 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 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
若需,您可在上述指令中使用: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 後,您可以:
參閱《快速入門》以了解 Milvus 的功能。
學習 Milvus 的基本操作:
在雲端部署您的 Milvus 叢集:
探索Milvus WebUI,這是專為 Milvus 可觀察性與管理設計的直覺式網頁介面。
探索Milvus Backup,這是一款用於 Milvus 資料備份的開源工具。
探索Birdwatcher,這是一款用於 Milvus 除錯與動態配置更新的開源工具。
探索Attu,這是一款用於直觀管理 Milvus 的開源 GUI 工具。