跳到主要内容

使用 Helm Chart 运行支持 GPU 的 Milvus

本页面介绍如何使用 Helm Chart 启动支持 GPU 的 Milvus 实例。

概述

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

先决条件

为 Milvus 安装 Helm Chart

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

  1. 添加 Milvus Helm 仓库。
$ helm repo add milvus https://zilliztech.github.io/milvus-helm/

Milvus Helm Charts 仓库位于 https://milvus-io.github.io/milvus-helm/,已存档,您可以从 https://zilliztech.github.io/milvus-helm/ 获取进一步更新,操作如下:

helm repo add zilliztech https://zilliztech.github.io/milvus-helm
helm repo update
# 升级现有的 Helm 发布
helm upgrade my-release zilliztech/milvus

存档的仓库仍可提供 4.0.31 版本之前的图表。对于更新版本,请改用新仓库。

  1. 在本地更新 Charts。
$ helm repo update

启动 Milvus

安装 Helm Chart 后,您可以在 Kubernetes 上启动 Milvus。在本节中,我们将指导您完成启动支持 GPU 的 Milvus 的步骤。

您应该通过指定发布名称、Chart 和您期望更改的参数来使用 Helm 启动 Milvus。在本指南中,我们使用 my-release 作为发布名称。要使用不同的发布名称,请将以下命令中的 my-release 替换为您正在使用的名称。

Milvus 允许您为 Milvus 指定一个或多个 GPU 设备。

1. 指定单个 GPU 设备

支持 GPU 的 Milvus 允许您为 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。要将不同的 GPU 分配给 indexNode 和 queryNode,您可以相应地修改配置,通过在配置文件中设置 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 独立模式时需要进一步设置。
    • 根据 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 独立部署

    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 启动后,所有 pod 的 READY 列都会显示 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

Pulsar Bookkeeper

my-release-pulsar-bookkeeper-0                   1/1    Running   0        3m23s
my-release-pulsar-bookkeeper-1 1/1 Running 0 98s

Pulsar Broker

my-release-pulsar-broker-556ff89d4c-2m29m        1/1    Running   0        3m23s

Pulsar Proxy

my-release-pulsar-proxy-6fbd75db75-nhg4v         1/1    Running   0        3m23s

Pulsar Zookeeper

my-release-pulsar-zookeeper-0                    1/1    Running   0        3m23s
my-release-pulsar-zookeeper-metadata-98zbr 0/1 Completed 0 3m24s

Milvus Standalone

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。

$ helm uninstall my-release

接下来做什么

安装了 Milvus 后,您可以: