使用 Helm Chart 运行支持 GPU 的 Milvus
本页说明如何使用 Helm Chart 启动支持 GPU 的 Milvus 实例。
概述
Helm 使用名为 Chart 的打包格式。Chart 是一组用于描述相关 Kubernetes 资源的文件。Milvus 提供了一组 Helm Charts,可帮助您部署 Milvus 依赖项和组件。Milvus Helm Chart 是一个使用 Helm 包管理器在 Kubernetes (K8s) 集群上引导部署 Milvus 的解决方案。
前提条件
-
安装 StorageClass。您可以按以下步骤检查已安装的 StorageClass。
$ kubectl get scNAME PROVISIONER RECLAIMPOLICY VOLUMEBIINDINGMODE ALLOWVOLUMEEXPANSION AGEstandard (default) k8s.io/minikube-hostpath Delete Immediate false -
安装前请检查 硬件和软件要求。
如果在拉取镜像时遇到问题,请通过 community@zilliz.com 联系我们并提供问题详情,我们将为你提供支持。
为 Milvus 安装 Helm Chart
Helm 是一个 K8s 软件包管理器,可以帮助你快速部署 Milvus。
- 添加 Milvus Helm Chart 仓库。
helm repo add milvus https://zilliztech.github.io/milvus-helm/
https://milvus-io.github.io/milvus-helm/ 上的 Milvus Helm Chart 仓库已归档,你可以从 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 Chart。对于后续版本,请使用新仓库。
- 更新本地 Helm Chart 仓库。
helm repo update
启动 Milvus
安装 Helm Chart 后,就可以在 Kubernetes 上启动 Milvus。在本节中,我们将指导你完成启动支持 GPU 的 Milvus 的步骤。
您应该通过指定 release name、Helm Chart 和您希望更改的参数,使用 Helm 启动 Milvus。在本指南中,我们使用 my-release 作为 release name。要使用不同的 release name,请将以下命令中的 my-release 替换为您正在使用的 release name。
Milvus 允许您为 Milvus 分配一个或多个 GPU 设备。
1. 分配单个 GPU 设备
支持 GPU 的 Milvus 允许您分配一个或多个 GPU 设备。
-
Milvus 集群
cat <<EOF > custom-values.yamlindexNode:resources:requests:nvidia.com/gpu: "1"limits:nvidia.com/gpu: "1"queryNode:resources:requests:nvidia.com/gpu: "1"limits:nvidia.com/gpu: "1"EOFhelm install my-release milvus/milvus -f custom-values.yaml -
Milvus Standalone
cat <<EOF > custom-values.yamlstandalone:resources:requests:nvidia.com/gpu: "1"limits:nvidia.com/gpu: "1"EOFhelm 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 设备外,您还可以为 Milvus 分配多个 GPU 设备。
-
Milvus 集群
cat <<EOF > custom-values.yamlindexNode: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
- release name 只能包含字母、数字和破折号。release name 中不允许使用圆点。
- 在使用 Helm 安装 Milvus 时,默认命令行会安装集群版本的 Milvus。独立安装 Milvus 时需要进一步设置。
- 根据 Kubernetes 的废弃 API 迁移指南,PodDisruptionBudget 的 policy/v1beta1 API 版本自 v1.25 起不再提供服务。建议您迁移清单和 API 客户端,改用 policy/v1 API 版本。
对于仍在 Kubernetes v1.25 及更高版本上使用 PodDisruptionBudget 的 policy/v1beta1 API 版本的用户,作为一种变通方法,您可以运行以下命令来安装 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 Standalone
cat <<EOF > custom-values.yamlindexNode: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(indexNode)和 QueryNode(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 AGEmy-release-etcd-0 1/1 Running 0 3m23smy-release-etcd-1 1/1 Running 0 3m23smy-release-etcd-2 1/1 Running 0 3m23smy-release-milvus-datacoord-6fd4bd885c-gkzwx 1/1 Running 0 3m23smy-release-milvus-datanode-68cb87dcbd-4khpm 1/1 Running 0 3m23smy-release-milvus-indexcoord-5bfcf6bdd8-nmh5l 1/1 Running 0 3m23smy-release-milvus-indexnode-5c5f7b5bd9-l8hjg 1/1 Running 0 3m24smy-release-milvus-proxy-6bd7f5587-ds2xv 1/1 Running 0 3m24smy-release-milvus-querycoord-579cd79455-xht5n 1/1 Running 0 3m24smy-release-milvus-querynode-5cd8fff495-k6gtg 1/1 Running 0 3m24smy-release-milvus-rootcoord-7fb9488465-dmbbj 1/1 Running 0 3m23smy-release-minio-0 1/1 Running 0 3m23smy-release-minio-1 1/1 Running 0 3m23smy-release-minio-2 1/1 Running 0 3m23smy-release-minio-3 1/1 Running 0 3m23smy-release-pulsar-autorecovery-86f5dbdf77-lchpc 1/1 Running 0 3m24smy-release-pulsar-bookkeeper-0 1/1 Running 0 3m23smy-release-pulsar-bookkeeper-1 1/1 Running 0 98smy-release-pulsar-broker-556ff89d4c-2m29m 1/1 Running 0 3m23smy-release-pulsar-proxy-6fbd75db75-nhg4v 1/1 Running 0 3m23smy-release-pulsar-zookeeper-0 1/1 Running 0 3m23smy-release-pulsar-zookeeper-metadata-98zbr 0/1 Completed 0 3m24s -
Milvus Standalone
NAME READY STATUS RESTARTS AGEmy-release-etcd-0 1/1 Running 0 30smy-release-milvus-standalone-54c4f88cb9-f84pf 1/1 Running 0 30smy-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 标志。以下命令将使端口转发监听主机上的所有 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。
helm uninstall my-release
下一步
安装 Milvus 后,您可以
-
查看 快速入门,了解 Milvus 的功能。
-
了解 Milvus 的基本操作:
-
在云上部署你的 Milvus 集群:
-
探索 Milvus 备份,一个用于 Milvus 数据备份的开源工具。
-
了解 Birdwatcher,用于调试 Milvus 和动态配置更新的开源工具。
-
探索用于直观管理 Milvus 的开源 GUI 工具 Attu。