Eseguire Milvus con supporto GPU utilizzando Helm Chart

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

Panoramica

Helm utilizza un formato di pacchettizzazione denominato "chart". Un chart è un insieme di file che descrivono un set correlato di risorse Kubernetes. Milvus fornisce una serie di chart per aiutarti a distribuire le dipendenze e i componenti di Milvus. Il chart Helm di Milvus è una soluzione che avvia la distribuzione di Milvus su un cluster Kubernetes (K8s) utilizzando il gestore di pacchetti Helm.

Prerequisiti

Se si riscontrano problemi durante il download dell'immagine, contattarci all'indirizzo community@zilliz.com fornendo i dettagli del problema e forniremo l'assistenza necessaria.

Installare Helm Chart per Milvus

Helm è un gestore di pacchetti K8s che consente di distribuire rapidamente Milvus.

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

Il repository Helm Chart di Milvus all'indirizzo https://milvus-io.github.io/milvus-helm/ è stato archiviato; è 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 chart fino alla versione 4.0.31. Per le versioni successive, utilizzare invece il nuovo repository.

  1. Aggiornare i chart localmente.
$ helm repo update

Avvia Milvus

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

È necessario avviare Milvus con Helm specificando il nome della release, il chart e i parametri che si intende modificare. In questa guida utilizziamo my-release come nome della release. Per utilizzare un nome di release diverso, sostituire my-release nei comandi seguenti con quello che si sta utilizzando.

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

1. Assegnare un singolo dispositivo GPU

Milvus con supporto GPU consente 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. Assegnazione di 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 sopra riportata 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 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 versione deve contenere solo lettere, numeri e trattini. I punti non sono consentiti nel nome della versione.
    • La riga di comando predefinita installa la versione cluster di Milvus durante l’installazione di Milvus con Helm. Sono necessarie ulteriori impostazioni durante l’installazione di Milvus in modalità standalone.
    • In base alla guida alla migrazione delle API deprecate di Kubernetes, la versione API policy/v1beta1 di PodDisruptionBudget non è più supportata a partire dalla v1.25. Si consiglia di migrare i manifest e i client API per utilizzare invece la versione API policy/v1.
      Come soluzione alternativa per gli utenti che utilizzano ancora la versione API policy/v1beta1 di PodDisruptionBudget su Kubernetes v1.25 e versioni 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, consultare Milvus Helm Chart e Helm.
  • 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 sopra riportata, 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 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 --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set pulsarv3.enabled=false -f custom-values.yaml
    

2. Verifica dello stato di Milvus

Eseguire il seguente comando per verificare lo stato di Milvus:

$ kubectl get pods

Dopo l’avvio di Milvus, la colonna « READY » (Stato del cluster) visualizza « 1/1 » per tutti i pod.

  • Cluster 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 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. Reindirizzare una porta locale a Milvus

Verifica su quale porta locale è in ascolto il server Milvus. Sostituisci il nome del pod con il tuo.

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

Quindi, eseguire il seguente comando per inoltrare una porta locale alla porta su cui è in ascolto Milvus.

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

Facoltativamente, è possibile utilizzare :19530 al posto di 27017:19530 nel comando sopra riportato per consentire a kubectl di allocare una porta locale automaticamente, in modo da evitare di dover gestire eventuali conflitti di porta.

Per impostazione predefinita, il port forwarding di kubectl ascolta solo su localhost. Utilizza il flag address se desideri che Milvus ascolti sull'indirizzo IP selezionato o su tutti gli indirizzi IP. Il comando seguente imposta il port forwarding in modo che ascolti su tutti gli indirizzi IP della macchina 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.

Accedere all’interfaccia utente web di Milvus

Milvus include uno strumento GUI integrato denominato Milvus WebUI, a cui è possibile accedere tramite il browser. Milvus WebUI migliora l’osservabilità del sistema grazie a un’interfaccia semplice e intuitiva. È possibile utilizzare Milvus WebUI per monitorare le statistiche e le metriche dei componenti e delle dipendenze di Milvus, verificare i dettagli del database e delle raccolte ed elencare le configurazioni dettagliate di Milvus. Per ulteriori dettagli su Milvus WebUI, consultare Milvus WebUI

Per abilitare l’accesso a Milvus WebUI, è necessario effettuare il port forwarding 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 a Milvus Web UI all'indirizzo http://localhost:27018.

Disinstallazione di Milvus

Eseguire il seguente comando per disinstallare Milvus.

$ helm uninstall my-release

Storage V3 è disabilitato per impostazione predefinita. Abilitarlo prima di utilizzare le funzionalità che dipendono da esso. Per i requisiti e le considerazioni sulla compatibilità, consultare Storage V3.

Prossimi passi

Una volta installato Milvus, è possibile:

Tradotto daDeepL

Office Hours

Orari d'ufficio di Milvus

Chiedete aiuto per la distribuzione in produzione a Zilliz, gli esperti di Milvus.

Prenota una sessione gratuita 1:1

Prova Milvus gestito gratuitamente

Zilliz Cloud è senza problemi, basato su Milvus e 10 volte più veloce.

Inizia
Feedback

Questa pagina è stata utile?