入门指南 (Get Started)
GPU部署(With GPU)
独立版安装 Helm GPU(Install_standalone-helm-gpu)

{{tab}}

安装支持GPU的Milvus独立部署

得益于NVIDIA的贡献,Milvus现在可以使用GPU设备来构建索引和执行ANN搜索。本指南将向您展示如何在您的机器上安装支持GPU的Milvus。

前提条件

在安装支持GPU的Milvus之前,请确保您具备以下前提条件:

  • 您的GPU设备的计算能力为7.0、7.5、8.0、8.6、8.9、9.0。要检查您的GPU设备是否满足要求,请查看NVIDIA开发者网站上的您的GPU计算能力 (opens in a new tab)

  • 您已在支持的Linux发行版 (opens in a new tab)之一上安装了适用于您的GPU设备的NVIDIA驱动程序,然后按照本指南 (opens in a new tab)安装了NVIDIA容器工具包。

    对于Ubuntu 22.04用户,您可以使用以下命令安装驱动程序和容器工具包:

    $ sudo apt install --no-install-recommends nvidia-headless-545 nvidia-utils-545

    对于其他操作系统用户,请参考官方安装指南 (opens in a new tab)

    您可以通过运行以下命令来检查驱动程序是否已正确安装:

    $ modinfo nvidia | grep "^version"
    version:        545.29.06

    建议您使用545及以上版本的驱动程序。

  • 您已安装了Kubernetes集群,并且kubectl命令行工具已配置为与您的集群通信。建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。

使用minikube创建K8s集群

我们建议使用minikube (opens in a new tab)在K8s上安装Milvus,这是一个允许您在本地运行K8s的工具。

1. 安装minikube

有关更多信息,请参见安装minikube (opens in a new tab)

2. 使用minikube启动K8s集群

安装minikube后,运行以下命令以启动K8s集群。

$ minikube start --gpus all

3. 检查K8s集群状态

运行$ kubectl cluster-info以检查您刚刚创建的K8s集群的状态。确保您可以通过kubectl访问K8s集群。如果您尚未在本地安装kubectl,请参见在minikube中使用kubectl (opens in a new tab)

Minikube在安装时依赖于默认的StorageClass。通过运行以下命令检查依赖性。其他安装方法需要手动配置StorageClass。有关更多信息,请参见更改默认StorageClass (opens in a new tab)

$ kubectl get sc
NAME                  PROVISIONER                  RECLAIMPOLICY    VOLUMEBIINDINGMODE    ALLOWVOLUMEEXPANSION     AGE
standard (default)    k8s.io/minikube-hostpath     Delete           Immediate             false                    3m36s

启动带有GPU工作节点的Kubernetes集群

如果您更喜欢使用支持GPU的工作节点,可以按照以下步骤创建带有GPU工作节点的K8s集群。我们建议在带有GPU工作节点的Kubernetes集群上安装Milvus,并使用默认存储类。

1. 准备GPU工作节点

有关更多信息,请参见准备GPU工作节点 (opens in a new tab)

2. 在Kubernetes上启用GPU支持

有关更多信息,请参见使用helm安装nvidia-device-plugin (opens in a new tab)

设置后,运行 kubectl describe node <gpu-worker-node> 以查看gpu资源。命令输出应类似于以下内容:

Capacity:
  ...
  nvidia.com/gpu:     4
  ...
Allocatable:
  ...
  nvidia.com/gpu:     4
  ...

注意:在这个例子中,我们已经用4个GPU卡设置了一个GPU工作节点。

3. 检查默认存储类

Milvus依靠默认存储类来自动为数据持久性提供卷。运行以下命令以检查存储类:

$ kubectl get sc

命令输出应类似于以下内容:

NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local-path (default)   rancher.io/local-path                           Delete          WaitForFirstConsumer   false                  461d

为Milvus安装Helm图表

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

  1. 将Milvus添加到Helm的存储库
$ helm repo add milvus https://zilliztech.github.io/milvus-helm/

The Milvus Helm Charts repo at https://milvus-io.github.io/milvus-helm/ has been archived and you can get further updates from https://zilliztech.github.io/milvus-helm/ as follows:

helm repo add zilliztech https://zilliztech.github.io/milvus-helm
helm repo update
# upgrade existing helm release
helm upgrade my-release zilliztech/milvus

The archived repo is still available for the charts up to 4.0.31. For later releases, use the new repo instead.

  1. 更新您的本地图表存储库。
$ helm repo update

开始Milvus

一旦你安装了Helm图表,你就可以在Kubernetes上启动Milvus了。在本节中,我们将指导您完成使用GPU支持启动Milvus的步骤。

您应该通过指定发布名称、图表和期望更改的参数来启动带有Helm的Milvus。在本指南中,我们使用my release作为发布名称。要使用不同的版本名称,请将以下命令中的my release替换为您正在使用的命令。 Milvus允许您将一个或多个GPU设备分配给Milvus。

  • 分配单个GPU设备

运行以下命令将单个GPU设备分配给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
  • 分配多个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 --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsar.enabled=false -f custom-values.yaml

Check the status of the running pods:

$ kubectl get pods

Milvus启动后,READY列显示所有pods的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虚拟机。

$ minikube stop

运行 minikube start 以重新启动群集。

删除 K8s 集群

删除集群、minikube虚拟机以及您创建的所有资源,包括持久卷。

$ minikube delete

接下来是什么

安装Milvus后,您可以: