跳到主要内容
版本:v2.4.x

使用 Helm Chart 运行支持 GPU 的 Milvus

本页说明如何使用 Helm Chart 启动支持 GPU 的 Milvus 实例。

概述

Helm 使用名为 Chart 的打包格式。Chart 是一组用于描述相关 Kubernetes 资源的文件。Milvus 提供了一组 Helm Charts,可帮助您部署 Milvus 依赖项和组件。Milvus Helm Chart 是一个使用 Helm 包管理器在 Kubernetes (K8s) 集群上引导部署 Milvus 的解决方案。

前提条件

说明

如果在拉取镜像时遇到问题,请通过 community@zilliz.com 联系我们并提供问题详情,我们将为你提供支持。

为 Milvus 安装 Helm Chart

Helm 是一个 K8s 软件包管理器,可以帮助你快速部署 Milvus。

  1. 添加 Milvus Helm Chart 仓库。
Shell
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/ 获取进一步更新,具体如下:

Shell
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。对于后续版本,请使用新仓库。

  1. 更新本地 Helm Chart 仓库。
Shell
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 集群

    Shell
    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
    Shell
    helm install my-release milvus/milvus -f custom-values.yaml
  • Milvus Standalone

    Shell
    cat <<EOF > custom-values.yaml
    standalone:
    resources:
    requests:
    nvidia.com/gpu: "1"
    limits:
    nvidia.com/gpu: "1"
    EOF
    Shell
    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 设备外,您还可以为 Milvus 分配多个 GPU 设备。

  • Milvus 集群

    Shell
    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 来相应修改配置,具体如下:

Shell
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
Shell
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 ChartHelm
  • Milvus Standalone

    Shell
    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(indexNode)和 QueryNode(queryNode)共享两个 GPU。要为 indexNode 和 queryNode 分配不同的 GPU,可以通过在配置文件中设置 extraEnv 来相应修改配置,如下所示:

Shell
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
Shell
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 状态:

Shell
kubectl get pods

Milvus 启动后,READY 列会显示所有 pod 的 1/1

  • Milvus 集群

    Shell
    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 Standalone

    Shell
    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 名称。

Shell
kubectl get pod my-release-milvus-proxy-6bd7f5587-ds2xv --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530

然后,运行以下命令将本地端口转发到 Milvus 服务的端口。

Shell
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 地址。

Shell
kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
Forwarding from 0.0.0.0:27017 -> 19530

卸载 Milvus

运行以下命令卸载 Milvus。

Shell
helm uninstall my-release

下一步

安装 Milvus 后,您可以