跳到主要内容

使用 Helm Chart 安装支持 GPU 的 Milvus

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

概述

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

前提条件

如果您在拉取镜像时遇到任何问题,请发送邮件至 community@zilliz.com,说明问题详情,我们将为您提供必要的支持。

安装 Milvus 的 Helm Chart

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

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

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

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

归档的仓库仍然可用于 4.0.31 及之前的版本。对于之后的版本,请使用新的仓库。

  1. 更新本地 charts。
$ helm repo update

启动 Milvus

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

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

Milvus 允许您为 Milvus 分配一个或多个 GPU 设备。

1. 分配单个 GPU 设备

Milvus 支持 GPU 允许您分配一个或多个 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 pulsarv3.enabled=false -f custom-values.yaml

2. 分配多个 GPU 设备

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

  • 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
    • release 名称只能包含字母、数字和破折号。不允许使用点号。
    • 使用 Helm 安装 Milvus 时,默认命令行安装的是集群版 Milvus。安装 Milvus 单机版需要额外设置。
    • 根据 Kubernetes 的 API 弃用指南,从 v1.25 版本开始,不再提供 policy/v1beta1 API 版本的 PodDisruptionBudget。建议将清单和 API 客户端迁移到使用 policy/v1 API 版本。
      对于仍在 Kubernetes v1.25 及更高版本上使用 policy/v1beta1 API 版本的 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 ChartHelm
  • Milvus 单机版

    cat <<EOF > custom-values.yaml
    standalone:
    resources:
    requests:
    nvidia.com/gpu: "2"
    limits:
    nvidia.com/gpu: "2"
    EOF
    $ 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

检查正在运行的 pod 的状态:

$ kubectl get pods

当所有 pod 都在运行时,READY 列显示 1/1

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

连接到 Milvus

验证 Milvus 服务器正在监听哪个本地端口。用您自己的 pod 名称替换。

$ kubectl get pod my-release-milvus-standalone-54c4f88cb9-f84pf --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530

打开一个新的终端并运行以下命令,将本地端口转发到 Milvus 使用的端口。您也可以省略指定的端口,使用 :19530kubectl 为您分配一个本地端口,这样您就不必管理端口冲突。

$ kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530

默认情况下,由 kubectl 转发的端口只监听 localhost。如果您希望 Milvus 服务器监听选定的 IP 或所有地址,请使用 address 标志。

$ 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

停止 K8s 集群

停止集群和 minikube VM,但不删除您创建的资源。

$ minikube stop

运行 minikube start 重启集群。

删除 K8s 集群

在删除集群和所有资源之前,运行 $ kubectl logs pod_name 获取 pod 的 stderr 日志。

删除集群、minikube VM 和您创建的所有资源,包括持久卷。

$ minikube delete

下一步

安装 Milvus 后,您可以: