milvus-logo
LFAI
首页
  • 开始

使用 Helm Chart 在支持 GPU 的情况下运行 Milvus

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

概述

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

前提条件

如果在绘制镜像时遇到任何问题,请通过community@zilliz.com联系我们并提供问题详情,我们将为您提供必要的支持。

为 Milvus 安装 Helm 图表

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 允许您为 Milvus 分配一个或多个 GPU 设备。

1.分配单个 GPU 设备

支持 GPU 的 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 设备,您还可以为 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
    

    在上述配置中,索引节点和查询节点共享两个 GPU。要为索引节点和查询节点分配不同的 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
    
    • 版本名称只能包含字母、数字和破折号。版本名称中不允许使用圆点。
    • 在使用 Helm 安装 Milvus 时,默认命令行会安装群集版本的 Milvus。独立安装 Milvus 时需要进一步设置。
    • 根据Kuberenetes 的废弃 API 迁移指南,PodDisruptionBudget 的policy/v1beta1API 版本自 v1.25 起不再提供服务。建议迁移清单和 API 客户端,改用policy/v1API 版本。
      对于仍在 Kuberenetes 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 图表Helm了解更多信息。
  • 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 启动后,READY 列会显示所有 pod 的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
    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

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

$ 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 后,您可以

翻译自DeepL

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

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

免费试用 Zilliz Cloud
反馈

此页对您是否有帮助?