跳到主要内容
版本:v3.0.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 的步骤。

您应该使用 Helm 启动 Milvus,具体方法是指定 release name、Helm Chart 和您期望更改的参数。在本指南中,我们使用 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
    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
    Shell
    helm install my-release milvus/milvus -f custom-values.yaml
  • 独立的 Milvus

    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 pulsarv3.enabled=false -f custom-values.yaml

2. 分配多个 GPU 设备

除了单个 GPU 设备,您还可以为 Milvus 分配多个 GPU 设备。

  • Milvus 集群

    Shell
    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,每个数据节点和查询节点使用两个 GPU。要为数据节点和查询节点分配不同的 GPU,可以通过在配置文件中设置 extraEnv 来相应修改配置,具体如下:

Shell
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
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
    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,每个数据节点和查询节点使用两个 GPU。要为数据节点和查询节点分配不同的 GPU,可以通过在配置文件中设置 extraEnv 来相应修改配置,具体如下:

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

Shell
kubectl get pods

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

  • Milvus 集群

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

Milvus 配备了一个名为 Milvus WebUI 的内置图形用户界面工具,可通过浏览器访问。Milvus Web UI 采用简单直观的界面,增强了系统的可观察性。你可以使用 Milvus Web UI 观察 Milvus 组件和依赖关系的统计和指标,检查数据库和 Collection 的详细信息,并列出详细的 Milvus 配置。有关 Milvus Web UI 的详细信息,请参阅 Milvus WebUI

要启用对 Milvus Web UI 的访问,需要将代理 pod 的端口转发到本地端口。

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

Shell
helm uninstall my-release

Storage V3 默认处于禁用状态。使用依赖 Storage V3 的功能前,请先启用它。有关要求和兼容性注意事项,请参阅 Storage V3

下一步

安装 Milvus 后,您可以