Per consentire agli sviluppatori di distribuire carichi di lavoro AI/ML nei cluster di TKG, l'operatore del cluster può configurare l'ambiente Kubernetes in modo che supporti le operazioni di NVIDIA vGPU.

Workflow dell'operatore del cluster per la distribuzione di carichi di lavoro AI/ML nei cluster di TKG

I passaggi generali per distribuire i carichi di lavoro AI/ML nei cluster di TKG sono i seguenti:
Passaggio Azione Collega
0

Verificare i requisiti di sistema.

Vedere Passaggio 0 dell'operatore: verificare i requisiti di sistema.
1 Scaricare kubectl e vSphere Plugin per Kubectl nella workstation locale. Vedere Passaggio 1 dell'operatore: installare Strumenti CLI Kubernetes di vSphere nella workstation.
2 Utilizzare kubectl per accedere al cluster supervisore, che compila .kube/config con il contesto per il nuovo cluster supervisore. Vedere Passaggio 2 dell'operatore: accedere al cluster supervisore.
3 Utilizzare kubectl per passare al contesto dello spazio dei nomi di vSphere. Vedere Passaggio 3 dell'operatore: passare al contesto dello spazio dei nomi di vSphere.
4 Utilizzare kubectl per elencare le classi di macchine virtuali e verificare che sia presente la classe abilitata per NVIDIA vGPU. Vedere Passaggio 4 dell'operatore: recuperare la classe della macchina virtuale personalizzata per i carichi di lavoro della vGPU.
5 Utilizzare kubectl per elencare le versioni di Tanzu Kubernetes disponibili e verificare che sia presente l'immagine Ubuntu. Vedere Passaggio 5 dell'operatore: recuperare la versione Tanzu Kubernetes di Ubuntu per i nodi GPU.
6 Creare la specifica YAML per il provisioning del cluster di TKG abilitato per GPU. Specificare la versione di TKR e la classe della macchina virtuale. Vedere Passaggio 6 dell'operatore: creare il file YAML per il provisioning del cluster di TKG abilitato per vGPU.
7 Eseguire il provisioning del cluster di TKG. Vedere Passaggio 7 dell'operatore: eseguire il provisioning del cluster di TKG.
8 Accedere al cluster e verificare il provisioning. Vedere Passaggio 8 dell'operatore: accedere al cluster di TKG e verificare il provisioning.
9 Preparare l'installazione dell'operatore della GPU NVAIE creando alcuni oggetti prerequisiti nel cluster di TKG, tra cui uno spazio dei nomi, i binding dei ruoli, il segreto dell'immagine e la mappa di configurazione della licenza. Vedere Passaggio 9 dell'operatore: preparazione all'installazione dell'operatore della GPU NVAIE.
10 Installare l'operatore della GPU NVAIE nel cluster. Vedere Passaggio 10 dell'operatore: installare NVIDIA GPU Operator nel cluster.
11 Distribuire i carichi di lavoro AI/ML nel cluster di TKG abilitato per vGPU. Vedere Passaggio 11 dell'operatore: distribuire un carico di lavoro AI/ML.

Passaggio 0 dell'operatore: verificare i requisiti di sistema

Fare riferimento ai seguenti requisiti di sistema per configurare l'ambiente per la distribuzione dei carichi di lavoro AI/ML nei cluster di TKG.
Requisito Descrizione

L'amministratore di vSphere ha configurato l'ambiente per NVIDIA vGPU

Vedere Workflow per l'amministratore di vSphere sulla distribuzione dei carichi di lavoro AI/ML nei cluster TKGS (vGPU).

OVA Ubuntu TKR

Release di Tanzu Kubernetes Ubuntu

ob-18691651-tkgs-ova-ubuntu-2004-v1.20.8---vmware.1-tkg.2

Strumento di provisioning del cluster di TKG

Servizio Tanzu Kubernetes Grid

Versione API: run.tanzu.vmware.com/v1alpha2

Operatore GPU NVIDIA

Operatore GPU v1.8.0

Container driver GPU NVIDIA

nvcr.io/nvstating/cnt-ea/driver:470.51-ubuntu20.04

Passaggio 1 dell'operatore: installare Strumenti CLI Kubernetes di vSphere nella workstation

Scaricare e installare Strumenti CLI Kubernetes di vSphere.

Se si utilizza Linux, è possibile eseguire il comando seguente per scaricare gli strumenti.

curl -LOk https://${SC_IP}/wcp/plugin/linux-amd64/vsphere-plugin.zip
unzip vsphere-plugin.zip
mv -v bin/* /usr/local/bin/

Per ulteriori istruzioni, vedere Download e installazione di Strumenti CLI Kubernetes di vSphere.

Passaggio 2 dell'operatore: accedere al cluster supervisore

Utilizzando Plug-in vSphere per kubectl, eseguire l'autenticazione con il Cluster supervisore.
kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME

Passaggio 3 dell'operatore: passare al contesto dello spazio dei nomi di vSphere

Utilizzando kubectl, passare al contesto dello Spazio dei nomi vSphere creato dall'amministratore di vSphere per il cluster di GPU TKG.
kubectl config get-contexts
kubectl config use-context TKGS-GPU-CLUSTER-NAMESPACE

Passaggio 4 dell'operatore: recuperare la classe della macchina virtuale personalizzata per i carichi di lavoro della vGPU

Verificare che la classe della macchina virtuale personalizzata con il profilo vGPU creato dall'amministratore di vSphere sia disponibile nello Spazio dei nomi vSphere di destinazione.
kubectl get virtualmachineclassbindings
Nota: La classe della macchina virtuale deve essere associata allo Spazio dei nomi vSphere di destinazione. Se la classe della macchina virtuale personalizzata per i carichi di lavoro della vGPU non è visualizzata, rivolgersi all'amministratore di vSphere.

Passaggio 5 dell'operatore: recuperare la versione Tanzu Kubernetes di Ubuntu per i nodi GPU

Verificare che la Release di Tanzu Kubernetes di Ubuntu richiesta che l'amministratore di vSphere ha sincronizzato dalla libreria di contenuti sia disponibile nello Spazio dei nomi vSphere.
kubectl get tanzukubernetesreleases
In alternativa, usare il collegamento:
kubectl get tkr

Passaggio 6 dell'operatore: creare il file YAML per il provisioning del cluster di TKG abilitato per vGPU

Creare il file YAML per il provisioning di un cluster di Tanzu Kubernetes.

Iniziare con uno degli esempi seguenti. Utilizzare le informazioni contrassegnate dall'output dei comandi precedenti per personalizzare la specifica del cluster. Fare riferimento all'elenco completo dei parametri di configurazione: Parametri di configurazione per il provisioning dei cluster Tanzu Kubernetes mediante l'API v1alpha2 del Servizio Tanzu Kubernetes Grid.

L'esempio 1 specifica due pool di nodi worker.
apiVersion: run.tanzu.vmware.com/v1alpha2
kind: TanzuKubernetesCluster
metadata:
   #cluster name
   name: tkgs-cluster-gpu-a100
   #target vsphere namespace
   namespace: tkgs-gpu-operator
spec:
   topology:
     controlPlane:
       replicas: 3
       #storage class for control plane nodes
       #use `kubectl describe storageclasses`
       #to get available pvcs
       storageClass: vwt-storage-policy
       vmClass: guaranteed-medium
       #TKR NAME for Ubuntu ova supporting GPU
       tkr:
         reference:
           name: 1.20.8---vmware.1-tkg.1
     nodePools:
     - name: nodepool-a100-primary
       replicas: 3
       storageClass: vwt-storage-policy
       #custom VM class for vGPU
       vmClass: class-vgpu-a100
       #TKR NAME for Ubuntu ova supporting GPU 
       tkr:
         reference:
           name: 1.20.8---vmware.1-tkg.1
     - name: nodepool-a100-secondary
       replicas: 3
       vmClass: class-vgpu-a100
       storageClass: vwt-storage-policy
       #TKR NAME for Ubuntu ova supporting GPU
       tkr:
         reference:
           name: 1.20.8---vmware.1-tkg.1
   settings:
     storage:
       defaultClass: vwt-storage-policy
     network:
       cni:
        name: antrea
       services:
        cidrBlocks: ["198.51.100.0/12"]
       pods:
        cidrBlocks: ["192.0.2.0/16"]
       serviceDomain: managedcluster.local
L'esempio 2 specifica un volume separato nei nodi worker per il runtime del container con una capacità di 50 GiB. Questa impostazione è configurabile. Per i carichi di lavoro AI/ML basati su container, è consigliabile fornire un volume separato di dimensioni adeguate.
apiVersion: run.tanzu.vmware.com/v1alpha2
kind: TanzuKubernetesCluster
metadata:
  name: tkc
  namespace: tkg-ns-auto
spec:
  distribution:
    fullVersion: v1.20.8+vmware.1-tkg.1
  topology:
    controlPlane:
      replicas: 3
      storageClass: vwt-storage-policy
      tkr:
        reference:
          name: v1.20.8---vmware.1-tkg.1
      vmClass: best-effort-medium
    nodePools:
    - name: workers
      replicas: 3
      storageClass: k8s-storage-policy
      tkr:
        reference:
          name: v1.20.8---vmware.1-tkg.1
      vmClass: vmclass-vgpu
      volumes:
      - capacity:
          storage: 50Gi
        mountPath: /var/lib/containerd
        name: containerd
      - capacity:
          storage: 50Gi
        mountPath: /var/lib/kubelet
        name: kubelet
    - name: nodepool-1
      replicas: 1
      storageClass: vwt-storage-policy
      vmClass: best-effort-medium
L'esempio 3 include metadati aggiuntivi del cluster, ad esempio un'etichetta.
apiVersion: run.tanzu.vmware.com/v1alpha2
kind: TanzuKubernetesCluster
metadata:
  annotations:
  labels:
    run.tanzu.vmware.com/tkr: v1.20.8---vmware.1-tkg.1
  name: tkgs-gpu-direct-rdma
  namespace: tkgs-ns
spec:
  settings:
    network:
      cni:
        name: antrea
      pods:
        cidrBlocks:
        - 192.168.0.0/16
      serviceDomain: cluster.local
      services:
        cidrBlocks:
        - 10.96.0.0/12
  topology:
    controlPlane:
      replicas: 3
      storageClass: tkgs-storage-policy
      vmClass: guaranteed-medium
      tkr:
        reference:
          name: v1.20.8---vmware.1-tkg.1
    nodePools:
    - name: workers
      replicas: 5
      storageClass: tkgs-storage-policy
      vmClass: claire-gpu-direct-rdma
      volumes:
      - capacity:
          storage: 50Gi
        mountPath: /var/lib/containerd
        name: containerd
      - capacity:
          storage: 50Gi
        mountPath: /var/lib/kubelet
        name: kubelet
      tkr:
        reference:
          name: v1.20.8---vmware.1-tkg.1

Passaggio 7 dell'operatore: eseguire il provisioning del cluster di TKG

Eseguire il provisioning del cluster eseguendo il comando kubectl seguente.
kubectl apply -f CLUSTER-NAME.yaml
Ad esempio:
kubectl apply -f tkgs-gpu-cluster-1.yaml
Monitorare la distribuzione dei nodi del cluster mediante kubectl.
kubectl get tanzukubernetesclusters -n NAMESPACE

Passaggio 8 dell'operatore: accedere al cluster di TKG e verificare il provisioning

Tramite Plug-in vSphere per kubectl accedere al cluster di TKG.
kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME \
--tanzu-kubernetes-cluster-name CLUSTER-NAME --tanzu-kubernetes-cluster-namespace NAMESPACE-NAME
Utilizzare i comandi seguenti per verificare il cluster:
kubectl cluster-info
kubectl get nodes
kubectl get namespaces
kubectl api-resources

Passaggio 9 dell'operatore: preparazione all'installazione dell'operatore della GPU NVAIE

Prima di installare l'operatore GPU con NVIDIA AI Enterprise, completare le attività seguenti per il cluster di TKG di cui è stato eseguito il provisioning. Per ulteriori istruzioni, vedere l'argomento relativo alle attività preliminari nella documentazione di NVAIE.
Nota: Se si utilizza NVIDIA Delegated Licensing Server (DLS), fare riferimento all'argomento seguente per le istruzioni: Appendice operatore del cluster per la distribuzione di carichi di lavoro AI/ML nei cluster TKG (DLS)
  1. Creare lo spazio dei nomi di Kubernetes gpu-operator-resources. È consigliabile distribuire sempre tutto in questo spazio dei nomi.
    kubectl create ns gpu-operator-resources
  2. Creare i binding del ruolo.

    Per i cluster di Tanzu Kubernetes è abilitato il criterio di sicurezza pod.

    Creare rolebindings.yaml.
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: psp:vmware-system-privileged:default
      namespace: default
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: psp:vmware-system-privileged
    subjects:
    - apiGroup: rbac.authorization.k8s.io
      kind: Group
      name: system:nodes
    - apiGroup: rbac.authorization.k8s.io
      kind: Group
      name: system:serviceaccounts
    Applicare il binding del ruolo.
    kubectl apply -f rolebindings.yaml
    Creare post-rolebindings.yaml.
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: psp:vmware-system-privileged:gpu-operator-resources
      namespace: gpu-operator-resources
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: psp:vmware-system-privileged
    subjects:
    - kind: Group
      apiGroup: rbac.authorization.k8s.io
      name: system:serviceaccounts
    Applicare il binding del ruolo:
    kubectl apply -f post-rolebindings.yaml
  3. Creare un segreto dell'immagine con credenziali NGC che possano essere utilizzate da Docker per estrarre le immagini di container dal catalogo di NVIDIA GPUCloud.
    kubectl create secret docker-registry registry-secret \
         --docker-server=server-name --docker-username='$oauthtoken' \
         --docker-password=<place_holder> \
         --docker-email=email-name -n gpu-operator-resources
  4. Creare una mappa di configurazione per il server delle licenze NVIDIA.
    kubectl create configmap licensing-config -n gpu-operator-resources --from-file=gridd.conf

    gridd.conf fa riferimento all'indirizzo del server delle licenze NVIDIA, ad esempio:

    # Description: Set License Server Address
    # Data type: string
    # Format:  "<address>"
    ServerAddress=<place_holder>
    

Passaggio 10 dell'operatore: installare NVIDIA GPU Operator nel cluster

Installare NVAIE GPU Operator versione 1.8.0 nel cluster di TKG. Per ulteriori istruzioni, fare riferimento alla documentazione dell'operatore della GPU.
Nota: Se si utilizza NVIDIA Delegated Licensing Server (DLS), fare riferimento all'argomento seguente per le istruzioni: Appendice operatore del cluster per la distribuzione di carichi di lavoro AI/ML nei cluster TKG (DLS)
  1. Installare Helm facendo riferimento alla documentazione di Helm.
  2. Aggiungere il repository Helm gpu-operator.
    helm repo add nvidia https://nvidia.github.io/gpu-operator
  3. Installare NVAIE GPU Operator eseguendo il comando seguente.

    Se necessario, sostituire i valori delle variabili di ambiente con quelli che corrispondono al proprio ambiente.

    export PRIVATE_REGISTRY="private/registry/path"
    export OS_TAG=ubuntu20.04
    export VERSION=460.73.01
    export VGPU_DRIVER_VERSION=460.73.01-grid
    export NGC_API_KEY=ZmJjMHZya...LWExNTRi
    export REGISTRY_SECRET_NAME=registry-secret
    
    helm install nvidia/gpu-operator \
       --set driver.repository=$PRIVATE_REGISTRY \
       --set driver.version=$VERSION \
       --set driver.imagePullSecrets={$REGISTRY_SECRET_NAME} \
       --set operator.defaultRuntime=containerd \
       --set driver.licensingConfig.configMapName=licensing-config

Passaggio 11 dell'operatore: distribuire un carico di lavoro AI/ML

Il catalogo di NVIDIA GPU Cloud offre diverse immagini di container predefinite che è possibile utilizzare per eseguire carichi di lavoro AI/ML nei cluster di Tanzu Kubernetes abilitati per vGPU. Per ulteriori informazioni sulle immagini disponibili, vedere la documentazione di NGC.