{{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。
- 将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.
- 更新您的本地图表存储库。
$ 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使用的端口。或者,省略指定的端口,并使用:19530
让kubectl
为您分配一个本地端口,这样您就不必管理端口冲突。
$ 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后,您可以:
-
检查Hello-Milvus,用不同的SDK运行一个示例代码,看看Milvus能做什么。
-
学习Milvus的基本操作:
-
- 探索Milvus Backup,一个用于Milvus数据备份的开源工具。
- 探索Birdwatcher,这是一个用于调试Milvus和动态配置更新的开源工具。
- 浏览Attu (opens in a new tab),一个用于直观Milvus管理的开源GUI工具。