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
Installare una StorageClass. È possibile verificare la StorageClass installata come segue.
$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBIINDINGMODE ALLOWVOLUMEEXPANSION AGE standard (default) k8s.io/minikube-hostpath Delete Immediate false
Verificare i requisiti hardware e software prima dell'installazione.
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.
- 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 repo archiviato è ancora disponibile per i grafici fino alla versione 4.0.31. Per le versioni successive, utilizzare invece il nuovo repo.
- 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, utilizziamo 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 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 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 pulsar.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 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
Nella configurazione precedente, l'indexNode e il queryNode condividono due GPU. Per assegnare GPU diverse all'indexNode e al queryNode, si può modificare la configurazione impostando
extraEnv
nel file di configurazione come segue: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
- Il nome della release deve contenere solo lettere, numeri e trattini. I punti non sono ammessi nel nome della release.
- La linea 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 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
Nella configurazione precedente, l'indexNode e il queryNode condividono due GPU. Per assegnare GPU diverse all'indexNode e al queryNode, è possibile modificare la configurazione impostando extraEnv nel file di configurazione come segue:
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. 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.
Cluster Milvus
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 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
Quindi, eseguite 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
Disinstallare Milvus
Eseguire il seguente comando per disinstallare Milvus.
$ helm uninstall my-release
Cosa succede dopo
Dopo aver installato Milvus, è possibile
Controllare Quickstart per vedere cosa può fare Milvus.
Imparare le operazioni di base di Milvus:
Distribuire il cluster Milvus su cloud:
Esplorate Milvus Backup, uno strumento open-source per il backup dei dati di Milvus.
Esplorate Birdwatcher, uno strumento open-source per il debug di Milvus e gli aggiornamenti dinamici della configurazione.
Esplorate Attu, uno strumento open-source per la gestione intuitiva di Milvus.