使用 Helm Chart 运行支持 GPU 的 Milvus

本页面演示了如何使用 Helm 图表启动支持 GPU 的 Milvus 实例。

概述

Helm 使用一种名为“图表”(charts)的打包格式。 Chart 是一组文件的集合,用于描述一组相关的 Kubernetes 资源。Milvus 提供了一套 Chart,以帮助您部署 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
# upgrade existing helm release
helm upgrade my-release zilliztech/milvus

存档仓库仍可提供 4.0.31 及更早版本的图表。对于后续版本,请改用新仓库。

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

启动 Milvus

安装 Helm 图表后,您即可在 Kubernetes 上启动 Milvus。本节将指导您完成启用 GPU 支持的 Milvus 启动步骤。

您应使用 Helm 启动 Milvus,并指定发布名称、图以及您计划修改的参数。在本指南中,我们使用my-release 作为发布名称。若要使用其他发布名称,请在以下命令中将my-release 替换为您实际使用的名称。

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

1. 分配单个 GPU 设备

支持 GPU 的 Milvus 允许您分配一个或多个 GPU 设备。

  • Milvus 集群

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

    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
    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 可用,每个 dataNode 和 queryNode 各使用两个 GPU。若要为 dataNode 和 queryNode 分配不同的 GPU,您可以通过在配置文件中按如下方式设置 `extraEnv ` 来相应修改配置:

    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
    
    $ helm install my-release milvus/milvus -f custom-values.yaml
    
    • 发布名称只能包含字母、数字和连字符。发布名称中不允许使用点号。
    • 使用 Helm 安装 Milvus 时,默认命令行会安装 Milvus 集群版本。若安装 Milvus Standalone,则需要进行进一步设置。
    • 根据Kubernetes 已弃用 API 迁移指南,自 v1.25 起,PodDisruptionBudget policy/v1beta1API 版本将不再提供服务。建议您将配置文件和 API 客户端迁移至policy/v1API 版本。
      对于仍在 Kubernetes v1.25 及更高版本上使用 PodDisruptionBudget 的policy/v1beta1API 版本的用户,作为临时解决方案,您可以运行以下命令来安装 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

    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
    

    在上述配置中,共有 4 个 CPU 可用,每个 dataNode 和 queryNode 各使用 2 个 GPU。若要为 dataNode 和 queryNode 分配不同的 GPU,可通过在配置文件中按如下方式设置 extraEnv 来相应修改配置:

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

$ kubectl get pods

Milvus 启动后,所有 Pod 的“READY ”列将显示“1/1 ”。

  • Milvus 集群

    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

    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 WebUI

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

要启用对 Milvus WebUI 的访问,您需要将代理 Pod 的端口转发到本地端口。

$ 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 WebUI。

卸载 Milvus

运行以下命令以卸载 Milvus。

$ helm uninstall my-release

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

下一步

安装 Milvus 后,您可以:

翻译自DeepL

Office Hours

米尔沃斯办公时间

向 Milvus 专家 Zilliz 寻求生产部署方面的帮助。

预订免费的 1:1 课程

想要更快、更简单、更好用的 Milvus SaaS服务 ?

Zilliz Cloud是基于Milvus的全托管向量数据库,拥有更高性能,更易扩展,以及卓越性价比

免费试用 Zilliz Cloud
反馈

此页对您是否有帮助?