使用 Helm Chart 運行支援 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 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 repo 已經歸檔,您可以從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
存檔的 repo 仍可使用於 4.0.31 之前的圖表。對於之後的版本,請使用新的 repo。
- 在本地更新圖表。
$ helm repo update
啟動 Milvus
安裝 Helm 圖表後,您就可以在 Kubernetes 上啟動 Milvus。在本節中,我們會引導您完成啟動支援 GPU 的 Milvus 的步驟。
您應該使用 Helm 來啟動 Milvus,方法是指定版本名稱、圖表,以及您期望變更的參數。在本指南中,我們使用my-release
作為版本名稱。若要使用不同的發行版名稱,請將下列指令中的my-release
改為您正在使用的名稱。
Milvus 允許您指派一個或多個 GPU 裝置到 Milvus。
1.指定單一 GPU 裝置
支援 GPU 的 Milvus 允許您指定一個或多個 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) 共用兩個 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 的廢棄 API 移轉指南,PodDisruptionBudget 的policy/v1beta1API 版本自 v1.25 起不再提供服務。建議您遷移艙單和 API 用戶端,改用policy/v1API 版本。
對於仍在 Kuberenetes v1.25 及更新版本上使用policy/v1beta1API 版本 PodDisruptionBudget 的使用者,作為一個解決方案,您可以執行下列指令來安裝 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 共用兩個 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 伺服器正在聆聽的本機連接埠。用您自己的 pod 名稱取代 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
。以下指令會讓 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 WebUI
Milvus 隨附一個內建的 GUI 工具,稱為 Milvus WebUI,您可以透過瀏覽器存取。Milvus Web UI 以簡單直觀的介面增強系統的可觀察性。您可以使用 Milvus Web UI 觀察 Milvus 元件和相依性的統計和指標、檢查資料庫和收集的詳細資訊,以及列出 Milvus 的詳細配置。有關 Milvus Web UI 的詳細資訊,請參閱Milvus WebUI。
要啟用對 Milvus Web UI 的存取,您需要將代理 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 Web UI。
卸載 Milvus
執行以下指令卸載 Milvus。
$ helm uninstall my-release
下一步
安裝 Milvus 後,您可以
查看快速入門,了解 Milvus 的功能。
學習 Milvus 的基本操作:
在雲上部署您的 Milvu 集群:
探索Milvus WebUI,Milvus 可觀察與管理的直覺式網頁介面。
探索Milvus 備份,Milvus 資料備份的開放原始碼工具。
探索Birdwatcher,用於調試 Milvus 和動態組態更新的開放原始碼工具。
探索Attu,一個開放源碼 GUI 工具,用於直觀的 Milvus 管理。