Eseguire Milvus con il supporto GPU usando Helm Chart

Questa pagina illustra come avviare un'istanza di Milvus con supporto GPU usando Helm Chart.

Panoramica

Helm utilizza un formato di packaging chiamato chart. Un grafico è una raccolta di file che descrivono un insieme correlato di risorse Kubernetes. Milvus fornisce una serie di grafici per aiutare a distribuire le dipendenze e i componenti di Milvus. Milvus Helm Chart è una soluzione che avvia la distribuzione di Milvus su un cluster Kubernetes (K8s) utilizzando il gestore di pacchetti Helm.

Prerequisiti

Se si riscontrano problemi nell'estrazione dell'immagine, contattare community@zilliz.com con i dettagli del problema e verrà fornito il supporto necessario.

Installare Helm Chart per Milvus

Helm è un gestore di pacchetti K8s che può aiutarvi a distribuire Milvus rapidamente.

  1. Aggiungere il repository Milvus Helm.
$ helm repo add milvus https://zilliztech.github.io/milvus-helm/

Il repository di Milvus Helm Charts all'indirizzo https://milvus-io.github.io/milvus-helm/ è stato archiviato ed è possibile ottenere ulteriori aggiornamenti da https://zilliztech.github.io/milvus-helm/ come segue:

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

Il repository archiviato è ancora disponibile per i grafici fino alla versione 4.0.31. Per le versioni successive, utilizzare invece il nuovo repo.

  1. Aggiornare i grafici localmente.
$ helm repo update

Avviare Milvus

Una volta installato il grafico Helm, è possibile avviare Milvus su Kubernetes. In questa sezione, vi guideremo attraverso i passaggi per avviare Milvus con il supporto GPU.

È necessario avviare Milvus con Helm specificando il nome della release, il grafico e i parametri che si prevede di modificare. In questa guida, usiamo my-release come nome della release. Per utilizzare un nome di release diverso, sostituire my-release nei comandi seguenti con quello utilizzato.

Milvus consente di assegnare uno o più dispositivi GPU a Milvus.

1. Assegnare un singolo dispositivo GPU

Milvus con supporto GPU permette di assegnare uno o più dispositivi GPU.

  • Cluster 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 standalone

    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. Assegnare più dispositivi GPU

Oltre a un singolo dispositivo GPU, è possibile assegnare a Milvus anche più dispositivi GPU.

  • Cluster 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
    

    Nella configurazione precedente, sono disponibili quattro CPU e ogni dataNode e queryNode utilizza due GPU. Per assegnare GPU diverse al dataNode e al queryNode, si può modificare la configurazione di conseguenza impostando extraEnv nel file di configurazione come segue:

    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
    
    • Il nome della release deve contenere solo lettere, numeri e trattini. I punti non sono ammessi nel nome della release.
    • La riga di comando predefinita installa la versione cluster di Milvus durante l'installazione di Milvus con Helm. Per l'installazione di Milvus standalone sono necessarie ulteriori impostazioni.
    • Secondo la guida alla migrazione delle API deprecate di Kuberenetes, la versione API policy/v1beta1 di PodDisruptionBudget non viene più utilizzata a partire dalla v1.25. Si suggerisce di migrare i manifesti e i client API per utilizzare invece la versione API policy/v1.
      Come soluzione per gli utenti che utilizzano ancora la versione API policy/v1beta1 di PodDisruptionBudget su Kuberenetes v1.25 e successive, è possibile eseguire il seguente comando per installare 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
    • Per ulteriori informazioni, vedere Grafico Helm e Helm di Milvus.
  • Milvus standalone

    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
    

    Nella configurazione precedente, sono disponibili quattro CPU e ogni dataNode e queryNode utilizza due GPU. Per assegnare GPU diverse al dataNode e al queryNode, è possibile modificare la configurazione impostando extraEnv nel file di configurazione come segue:

    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. Controllare lo stato di Milvus

Eseguire il seguente comando per verificare lo stato di Milvus:

$ kubectl get pods

Dopo l'avvio di Milvus, la colonna READY visualizza 1/1 per tutti i pod.

  • Milvus cluster

    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 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. Inoltrare una porta locale a Milvus

Verificare la porta locale su cui è in ascolto il server Milvus. Sostituite il nome del pod con il vostro.

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

Eseguite quindi il seguente comando per inoltrare una porta locale alla porta su cui Milvus è in ascolto.

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

Facoltativamente, si può usare :19530 invece di 27017:19530 nel comando precedente per lasciare che kubectl assegni una porta locale per l'utente, in modo da non dover gestire conflitti di porte.

Per impostazione predefinita, il port-forwarding di kubectl ascolta solo su localhost. Usate il flag address se volete che Milvus ascolti su uno o tutti gli indirizzi IP selezionati. Il comando seguente fa sì che il port-forward sia in ascolto su tutti gli indirizzi IP del computer host.

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

Ora è possibile connettersi a Milvus utilizzando la porta inoltrata.

Accesso all'interfaccia web di Milvus

Milvus viene fornito con uno strumento GUI integrato, chiamato Milvus WebUI, a cui si può accedere tramite il browser. Milvus WebUI migliora l'osservabilità del sistema con un'interfaccia semplice e intuitiva. Con Milvus Web UI si possono osservare le statistiche e le metriche dei componenti e delle dipendenze di Milvus, controllare i dettagli del database e della raccolta ed elencare le configurazioni dettagliate di Milvus. Per maggiori informazioni su Milvus Web UI, vedere Milvus WebUI.

Per abilitare l'accesso all'interfaccia web di Milvus, è necessario effettuare il port-forward del pod proxy su una porta locale.

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

Ora è possibile accedere all'interfaccia web di Milvus all'indirizzo http://localhost:27018.

Disinstallare Milvus

Eseguire il seguente comando per disinstallare Milvus.

$ helm uninstall my-release

Cosa succede dopo

Dopo aver installato Milvus, è possibile