Ejecutar Milvus con soporte GPU utilizando Helm Chart
Esta página ilustra cómo iniciar una instancia de Milvus con soporte GPU utilizando Helm Chart.
Visión general
Helm utiliza un formato de empaquetado llamado gráficos. Un gráfico es una colección de archivos que describen un conjunto relacionado de recursos Kubernetes. Milvus proporciona un conjunto de gráficos para ayudarle a desplegar dependencias y componentes de Milvus. Milvus Helm Chart es una solución que arranca el despliegue de Milvus en un cluster Kubernetes (K8s) utilizando el gestor de paquetes Helm.
Requisitos previos
Instale una StorageClass. Puede comprobar la StorageClass instalada de la siguiente manera.
$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBIINDINGMODE ALLOWVOLUMEEXPANSION AGE standard (default) k8s.io/minikube-hostpath Delete Immediate false
Compruebe los requisitos de hardware y software antes de la instalación.
Si encuentra algún problema instalando la imagen, contacte con nosotros en community@zilliz.com con detalles sobre el problema, y le proporcionaremos el soporte necesario.
Instalar Helm Chart para Milvus
Helm es un gestor de paquetes K8s que puede ayudarle a desplegar Milvus rápidamente.
- Añada el repositorio de Milvus Helm.
$ helm repo add milvus https://zilliztech.github.io/milvus-helm/
El repositorio de Milvus Helm Charts en https://milvus-io.github.io/milvus-helm/
ha sido archivado y puede obtener más actualizaciones en https://zilliztech.github.io/milvus-helm/
como se indica a continuación:
helm repo add zilliztech https://zilliztech.github.io/milvus-helm
helm repo update
# upgrade existing helm release
helm upgrade my-release zilliztech/milvus
El repositorio archivado sigue disponible para los gráficos hasta la versión 4.0.31. Para versiones posteriores, utilice el nuevo repositorio.
- Actualice los gráficos localmente.
$ helm repo update
Inicie Milvus
Una vez que haya instalado el gráfico Helm, puede iniciar Milvus en Kubernetes. En esta sección, le guiaremos a través de los pasos para iniciar Milvus con soporte GPU.
Debe iniciar Milvus con Helm especificando el nombre de la versión, el gráfico y los parámetros que espera cambiar. En esta guía, utilizamos my-release
como nombre de la versión. Para utilizar un nombre de versión diferente, sustituya my-release
en los siguientes comandos por el que esté utilizando.
Milvus le permite asignar uno o más dispositivos GPU a Milvus.
1. Asignar un único dispositivo GPU
Milvus con soporte GPU le permite asignar uno o más dispositivos GPU.
Milvus cluster
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 independiente
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. Asignar múltiples dispositivos GPU
Además de un único dispositivo GPU, también puede asignar múltiples dispositivos GPU a Milvus.
Cluster 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
En la configuración anterior, el indexNode y el queryNode comparten dos GPUs. Para asignar diferentes GPUs al indexNode y al queryNode, puede modificar la configuración en consecuencia estableciendo
extraEnv
en el archivo de configuración como se indica a continuación: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
- El nombre de la versión sólo debe contener letras, números y guiones. Los puntos no están permitidos en el nombre de la versión.
- La línea de comandos por defecto instala la versión cluster de Milvus cuando se instala Milvus con Helm. Se necesita una configuración adicional cuando se instala Milvus de forma independiente.
- Según la guía de migración de API obsoleta de Kuberenetes, la versión de API policy/v1beta1 de PodDisruptionBudget ya no se sirve a partir de la v1.25. Se sugiere migrar los manifiestos y clientes API para utilizar la versión policy/v1 API en su lugar.
Como solución para los usuarios que todavía utilizan la versión policy/v1beta1 API de PodDisruptionBudget en Kuberenetes v1.25 y posteriores, puede ejecutar el siguiente comando para instalar 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
- Consulte Milvus Helm Chart y Helm para obtener más información.
Milvus independiente
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
En la configuración anterior, el indexNode y el queryNode comparten dos GPUs. Para asignar GPUs diferentes al indexNode y al queryNode, puede modificar la configuración en consecuencia estableciendo extraEnv en el archivo de configuración como se indica a continuación:
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. Comprobar el estado de Milvus
Ejecute el siguiente comando para comprobar el estado de Milvus:
$ kubectl get pods
Tras el inicio de Milvus, la columna READY
muestra 1/1
para todos los pods.
Milvus cluster
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 independiente
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. Reenvíe un puerto local a Milvus
Compruebe en qué puerto local está escuchando el servidor Milvus. Sustituya el nombre del pod por el suyo propio.
$ kubectl get pod my-release-milvus-proxy-6bd7f5587-ds2xv --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530
A continuación, ejecute el siguiente comando para reenviar un puerto local al puerto en el que Milvus presta servicio.
$ kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530
Opcionalmente, puede utilizar :19530
en lugar de 27017:19530
en el comando anterior para dejar que kubectl
asigne un puerto local para usted de modo que no tenga que gestionar conflictos de puertos.
Por defecto, el reenvío de puertos de kubectl sólo escucha en localhost
. Utilice la bandera address
si desea que Milvus escuche en las direcciones IP seleccionadas o en todas. El siguiente comando hace que port-forward escuche en todas las direcciones IP de la máquina anfitriona.
$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
Forwarding from 0.0.0.0:27017 -> 19530
Desinstalar Milvus
Ejecute el siguiente comando para desinstalar Milvus.
$ helm uninstall my-release
Lo que sigue
Una vez instalado Milvus, puede
Comprobar el Inicio rápido para ver qué puede hacer Milvus.
Aprender las operaciones básicas de Milvus:
Despliegue su clúster Milvu en nubes:
Explore Milvus Backup, una herramienta de código abierto para realizar copias de seguridad de los datos de Milvus.
Explore Birdwatcher, una herramienta de código abierto para depurar Milvus y actualizaciones dinámicas de configuración.
Explore Attu, una herramienta GUI de código abierto para la gestión intuitiva de Milvus.