Ejecutar Milvus con soporte para GPU mediante Helm Chart

En esta página se explica cómo iniciar una instancia de Milvus con soporte para GPU mediante Helm Chart.

Descripción general

Helm utiliza un formato de empaquetado denominado «charts». Un «chart» es un conjunto de archivos que describen un conjunto relacionado de recursos de Kubernetes. Milvus proporciona un conjunto de «charts» para ayudarte a implementar las dependencias y los componentes de Milvus. El «Helm Chart» de Milvus es una solución que inicia la implementación de Milvus en un clúster de Kubernetes (K8s) mediante el gestor de paquetes Helm.

Requisitos previos

Si tienes algún problema al descargar la imagen, ponte en contacto con nosotros en community@zilliz.com con los detalles del problema y te proporcionaremos la asistencia necesaria.

Instala el Helm Chart para Milvus

Helm es un gestor de paquetes de K8s que te ayuda a implementar Milvus rápidamente.

  1. Añade el repositorio Helm de Milvus.
$ helm repo add milvus https://zilliztech.github.io/milvus-helm/

El repositorio de Helm Charts de Milvus en https://milvus-io.github.io/milvus-helm/ ha sido archivado y puedes obtener más actualizaciones en https://zilliztech.github.io/milvus-helm/ de la siguiente manera:

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 estando disponible para los charts hasta la versión 4.0.31. Para versiones posteriores, utiliza el nuevo repositorio.

  1. Actualiza los gráficos localmente.
$ helm repo update

Iniciar Milvus

Una vez instalado el gráfico de Helm, puedes iniciar Milvus en Kubernetes. En esta sección, te guiaremos a través de los pasos para iniciar Milvus con soporte para GPU.

Debes iniciar Milvus con Helm especificando el nombre de la versión, el gráfico y los parámetros que esperas modificar. En esta guía, utilizamos « my-release » como nombre de la versión. Para utilizar un nombre de versión diferente, sustituye « my-release » en los siguientes comandos por el que estés utilizando.

Milvus te permite asignar uno o más dispositivos de GPU a Milvus.

1. Asignar un único dispositivo GPU

Milvus con soporte para GPU te permite asignar uno o más dispositivos GPU.

  • Clúster de 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 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 pulsarv3.enabled=false -f custom-values.yaml
    

2. Asignar varios dispositivos GPU

Además de un único dispositivo GPU, también puedes asignar varios dispositivos GPU a Milvus.

  • Clúster de 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
    

    En la configuración anterior, hay cuatro CPU disponibles, y cada dataNode y queryNode utiliza dos GPU. Para asignar diferentes GPU al dataNode y al queryNode, puede modificar la configuración en consecuencia estableciendo ` extraEnv ` en el archivo de configuración de la siguiente manera:

    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
    
    • El nombre de la versión solo debe contener letras, números y guiones. No se permiten puntos en el nombre de la versión.
    • La línea de comandos predeterminada instala la versión de clúster de Milvus al instalar Milvus con Helm. Se requieren ajustes adicionales al instalar Milvus de forma independiente.
    • Según la guía de migración de la API obsoleta de Kubernetes, la versión de la API policy/v1beta1 de PodDisruptionBudget ya no está disponible a partir de la versión v1.25. Se recomienda migrar los manifiestos y los clientes de la API para que utilicen, en su lugar, la versión de la API policy/v1.
      Como solución alternativa para los usuarios que aún utilicen la versión de la API «policy/v1beta1» de PodDisruptionBudget en Kubernetes v1.25 y posteriores, pueden 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 autónomo

    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
    

    En la configuración anterior, hay cuatro CPU disponibles, y cada dataNode y queryNode utiliza dos GPU. Para asignar diferentes GPU al dataNode y al queryNode, puede modificar la configuración en consecuencia estableciendo extraEnv en el archivo de configuración de la siguiente manera:

    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. Comprobar el estado de Milvus

Ejecute el siguiente comando para comprobar el estado de Milvus:

$ kubectl get pods

Una vez que Milvus se haya iniciado, la columna « READY » mostrará « 1/1 » para todos los pods.

  • Clúster de 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 autónomo

    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. Reenviar un puerto local a Milvus

Comprueba en qué puerto local está a la escucha el servidor de Milvus. Sustituye el nombre del pod por el tuyo.

$ kubectl get pod my-release-milvus-proxy-6bd7f5587-ds2xv --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
19530

A continuación, ejecuta el siguiente comando para reenviar un puerto local al puerto en el que Milvus está serviendo.

$ kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530

Si lo prefieres, puedes utilizar :19530 en lugar de 27017:19530 en el comando anterior para que kubectl te asigne un puerto local y así no tengas que gestionar conflictos de puertos.

Por defecto, el reenvío de puertos de kubectl solo escucha en localhost. Utiliza el indicador address si quieres que Milvus escuche en la dirección IP seleccionada o en todas ellas. El siguiente comando hace que el reenvío de puertos escuche en todas las direcciones IP de la máquina host.

$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
Forwarding from 0.0.0.0:27017 -> 19530

Ahora ya puedes conectarte a Milvus utilizando el puerto reenviado.

Acceder a la interfaz web de Milvus

Milvus incluye una herramienta GUI integrada llamada Milvus WebUI a la que puede acceder a través de su navegador. Milvus WebUI mejora la observabilidad del sistema con una interfaz sencilla e intuitiva. Puede utilizar Milvus WebUI para observar las estadísticas y métricas de los componentes y dependencias de Milvus, consultar los detalles de la base de datos y las colecciones, y ver una lista detallada de las configuraciones de Milvus. Para obtener más información sobre la interfaz web de Milvus, consulta Milvus WebUI

Para habilitar el acceso a la interfaz web de Milvus, es necesario redirigir el puerto del pod proxy a un puerto local.

$ kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27018:9091
Forwarding from 0.0.0.0:27018 -> 9091

Ahora ya puede acceder a la interfaz de usuario web de Milvus en http://localhost:27018.

Desinstalar Milvus

Ejecute el siguiente comando para desinstalar Milvus.

$ helm uninstall my-release

Storage V3 está desactivado de forma predeterminada. Actívalo antes de utilizar las funciones que dependen de él. Para conocer los requisitos y las consideraciones de compatibilidad, consulta Storage V3.

Próximos pasos

Una vez instalado Milvus, puedes: