Crea un'istanza A3 Mega, A3 High o A3 Edge con GPUDirect abilitato

Questo documento descrive la configurazione per le istanze di macchine virtuali (VM) A3 Mega, A3 High o A3 Edge con otto GPU NVIDIA H100 collegate e che utilizzano una delle seguenti tecnologie GPUDirect: GPUDirect-TCPX o GPUDirect-TCPXO. Per creare un'istanza A3 High con meno di 8 GPU, consulta Crea un'istanza A3 High o A2.

La tecnologia GPUDirect che utilizzi dipende dal tipo di macchina A3 che selezioni.

  • GPUDirect-TCPXO: è uno stack di rete con trasferimento simile a RDMA supportato sui tipi di macchine A3 Mega (a3-megagpu-8g) con otto GPU H100.
  • GPUDirect-TCPX: è una versione ottimizzata di TCP guest che offre una latenza inferiore ed è supportata sui tipi di macchine A3 High (a3-highgpu-8g) e A3 Edge (a3-edgegpu-8g) che dispongono di otto GPU H100.

La serie di macchine A3 ottimizzate per l'acceleratore ha 208 vCPU e fino a 1872 GB di memoria. I tipi di macchina a3-megagpu-8g, a3-highgpu-8g e a3-edgegpu-8g offrono 80 GB di memoria GPU per GPU. Questi tipi di macchine possono raggiungere fino a 1800 Gbps di larghezza di banda di rete, il che le rende ideali per HPC, database e modelli linguistici di grandi dimensioni basati su Transformer.

GPUDirect-TCPX e GPUDirect-TCPXO utilizzano la tecnologia NVIDIA GPUDirect per aumentare le prestazioni e ridurre la latenza delle VM A3. Ciò è possibile consentendo il trasferimento dei payload dei pacchetti di dati direttamente dalla memoria GPU all'interfaccia di rete, bypassando la CPU e la memoria di sistema. Si tratta di una forma di accesso diretto alla memoria da remoto (RDMA). Se combinate con Google Virtual NIC (gVNIC), le VM A3 possono offrire il throughput più elevato tra le VM in un cluster rispetto ai tipi di macchine ottimizzati per l'acceleratore A2 o G2 di generazione precedente.

Questo documento descrive come creare una VM A3 Mega, A3 High o A3 Edge e attivare GPUDirect-TCPX o GPUDirect-TCPXO per testare le prestazioni di rete migliorate della GPU.

Prima di iniziare

  • Per esaminare le limitazioni e i passaggi preliminari aggiuntivi per la creazione di istanze con GPU collegate, ad esempio la selezione di un'immagine sistema operativo e il controllo della quota di GPU, consulta la Panoramica della creazione di un'istanza con GPU collegate.
  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione verifica la tua identità per l'accesso a Google Cloud servizi e API. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:
    1. Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il comando seguente:

      gcloud init

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

    2. Set a default region and zone.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per creare VM, chiedi all'amministratore di concederti il ruolo IAM Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) nel progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per creare VM. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per creare VM sono necessarie le seguenti autorizzazioni:

  • compute.instances.create sul progetto
  • Per utilizzare un'immagine personalizzata per creare la VM: compute.images.useReadOnly sull'immagine
  • Per utilizzare uno snapshot per creare la VM: compute.snapshots.useReadOnly sullo snapshot
  • Per utilizzare un template di istanza per creare la VM: compute.instanceTemplates.useReadOnly sul template di istanza
  • Per specificare una subnet per la VM: compute.subnetworks.use sul progetto o sulla subnet scelta
  • Per specificare un indirizzo IP statico per la VM: compute.addresses.use sul progetto
  • Per assegnare un indirizzo IP esterno alla VM quando utilizzi una rete VPC: compute.subnetworks.useExternalIp sul progetto o sulla subnet scelta
  • Per assegnare una rete legacy alla VM: compute.networks.use sul progetto
  • Per assegnare un indirizzo IP esterno alla VM quando utilizzi una rete legacy: compute.networks.useExternalIp sul progetto
  • Per impostare i metadati dell'istanza VM per la VM: compute.instances.setMetadata sul progetto
  • Per impostare i tag per la VM: compute.instances.setTags sulla VM
  • Per impostare le etichette per la VM: compute.instances.setLabels sulla VM
  • Per impostare un service account che la VM possa utilizzare: compute.instances.setServiceAccount sulla VM
  • Per creare un nuovo disco per la VM: compute.disks.create sul progetto
  • Per collegare un disco esistente in modalità di sola lettura o di lettura e scrittura: compute.disks.use sul disco
  • Per collegare un disco esistente in modalità di sola lettura: compute.disks.useReadOnly sul disco

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Panoramica

Per testare le prestazioni di rete con GPUDirect, completa i seguenti passaggi:

  1. Configura una o più reti Virtual Private Cloud (VPC) con un valore MTU elevato.
  2. Crea l'istanza GPU.

Configura le reti VPC

Per consentire una comunicazione efficiente per le tue VM GPU, devi creare una rete di gestione e una o più reti di dati. La rete di gestione viene utilizzata per l'accesso esterno, ad esempio SSH, e per la maggior parte delle comunicazioni di rete generali. Le reti di dati vengono utilizzate per la comunicazione ad alte prestazioni tra le GPU su VM diverse, ad esempio per il traffico di accesso diretto alla memoria remota (RDMA).

Per queste reti VPC, ti consigliamo di impostare l'unità massima di trasmissione (MTU) su un valore maggiore. Valori MTU più elevati aumentano le dimensioni dei pacchetti e riducono l'overhead delle intestazioni dei pacchetti, il che aumenta il throughput dei dati del payload. Per ulteriori informazioni su come creare reti VPC, consulta Crea e verifica una rete MTU con frame jumbo.

Crea una rete di gestione, una subnet e una regola firewall

Per configurare la rete di gestione, completa i seguenti passaggi:

  1. Crea la rete di gestione utilizzando il comando networks create:

    gcloud compute networks create NETWORK_NAME_PREFIX-mgmt-net \
        --project=PROJECT_ID \
        --subnet-mode=custom \
        --mtu=8244
    
  2. Crea la subnet di gestione utilizzando il comando networks subnets create:

    gcloud compute networks subnets create NETWORK_NAME_PREFIX-mgmt-sub \
        --project=PROJECT_ID \
        --network=NETWORK_NAME_PREFIX-mgmt-net \
        --region=REGION \
        --range=192.168.0.0/24
    
  3. Crea le regole firewall utilizzando il comando firewall-rules create.

    1. Crea una regola firewall per la rete di gestione.

      gcloud compute firewall-rules create NETWORK_NAME_PREFIX-mgmt-internal \
          --project=PROJECT_ID \
          --network=NETWORK_NAME_PREFIX-mgmt-net \
          --action=ALLOW \
          --rules=tcp:0-65535,udp:0-65535,icmp \
          --source-ranges=192.168.0.0/16
      
    2. Crea la regola firewall tcp:22 per limitare gli indirizzi IP di origine che possono connettersi alla tua VM utilizzando SSH.

      gcloud compute firewall-rules create NETWORK_NAME_PREFIX-mgmt-external-ssh \
          --project=PROJECT_ID \
          --network=NETWORK_NAME_PREFIX-mgmt-net \
          --action=ALLOW \
          --rules=tcp:22 \
          --source-ranges=SSH_SOURCE_IP_RANGE
      
    3. Crea la regola firewall icmp che può essere utilizzata per verificare la presenza di problemi di trasmissione dei dati nella rete.

      gcloud compute firewall-rules create NETWORK_NAME_PREFIX-mgmt-external-ping \
          --project=PROJECT_ID \
          --network=NETWORK_NAME_PREFIX-mgmt-net \
          --action=ALLOW \
          --rules=icmp \
          --source-ranges=0.0.0.0/0
      

Sostituisci quanto segue:

  • NETWORK_NAME_PREFIX: il prefisso del nome da utilizzare per le reti VPC e le subnet.
  • PROJECT_ID: il tuo ID progetto.
  • REGION: la regione in cui vuoi creare le reti.
  • SSH_SOURCE_IP_RANGE: l'intervallo IP in formato CIDR. Questo specifica quali indirizzi IP di origine possono connettersi alla VM utilizzando SSH.

Crea reti dati, subnet e regole firewall

Il numero di reti di dati varia a seconda del tipo di macchina GPU che stai creando.

A3 Mega

A3 Mega richiede otto reti dati. Utilizza il seguente comando per creare otto reti dati, ciascuna con subnet e regole firewall.

for N in $(seq 1 8); do
gcloud compute networks create NETWORK_NAME_PREFIX-data-net-$N \
    --project=PROJECT_ID \
    --subnet-mode=custom \
    --mtu=8244

gcloud compute networks subnets create NETWORK_NAME_PREFIX-data-sub-$N \
    --project=PROJECT_ID \
    --network=NETWORK_NAME_PREFIX-data-net-$N \
    --region=REGION \
    --range=192.168.$N.0/24

gcloud compute firewall-rules create NETWORK_NAME_PREFIX-data-internal-$N \
    --project=PROJECT_ID \
    --network=NETWORK_NAME_PREFIX-data-net-$N \
    --action=ALLOW \
    --rules=tcp:0-65535,udp:0-65535,icmp \
    --source-ranges=192.168.0.0/16
done

A3 High e A3 Edge

A3 High e A3 Edge richiedono quattro reti di dati. Utilizza il seguente comando per creare quattro reti dati, ciascuna con subnet e regole firewall.

for N in $(seq 1 4); do
gcloud compute networks create NETWORK_NAME_PREFIX-data-net-$N \
    --project=PROJECT_ID \
    --subnet-mode=custom \
    --mtu=8244

gcloud compute networks subnets create NETWORK_NAME_PREFIX-data-sub-$N \
    --project=PROJECT_ID \
    --network=NETWORK_NAME_PREFIX-data-net-$N \
    --region=REGION \
    --range=192.168.$N.0/24

gcloud compute firewall-rules create NETWORK_NAME_PREFIX-data-internal-$N \
    --project=PROJECT_ID \
    --network=NETWORK_NAME_PREFIX-data-net-$N \
    --action=ALLOW \
    --rules=tcp:0-65535,udp:0-65535,icmp \
    --source-ranges=192.168.0.0/16
done

Crea istanze A3 Mega (GPUDirect-TCPXO)

Crea le istanze A3 Mega utilizzando l'immagine Container-Optimized OS cos-121-lts o successiva.

COS

Per testare le prestazioni di rete con GPUDirect-TCPXO, crea almeno due istanze VM A3 Mega. Crea ogni VM utilizzando l'immagine Container-Optimized OS cos-121-lts o successiva e specificando le reti VPC create nel passaggio precedente.

Le VM A3 Mega richiedono nove interfacce di rete Google Virtual NIC (gVNIC), una per la rete di gestione e otto per le reti di dati.

In base al modello di provisioning che vuoi utilizzare per creare la VM, seleziona una delle seguenti opzioni:

Standard

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=a3-megagpu-8g \
    --maintenance-policy=TERMINATE \
    --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address

Sostituisci quanto segue:

  • VM_NAME: il nome dell'istanza VM.
  • PROJECT_ID: l'ID progetto.
  • ZONE: una zona che supporta il tuo tipo di macchina.
  • BOOT_DISK_SIZE: le dimensioni del disco di avvio in GB, ad esempio 50.
  • NETWORK_NAME_PREFIX: il prefisso del nome da utilizzare per le reti VPC e le subnet.

Spot

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=a3-megagpu-8g \
    --maintenance-policy=TERMINATE \
    --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address \
    --provisioning-model=SPOT \
    --instance-termination-action=TERMINATION_ACTION

Sostituisci quanto segue:

  • VM_NAME: il nome dell'istanza VM.
  • PROJECT_ID: l'ID progetto.
  • ZONE: una zona che supporta il tuo tipo di macchina.
  • BOOT_DISK_SIZE: le dimensioni del disco di avvio in GB, ad esempio 50.
  • NETWORK_NAME_PREFIX: il prefisso del nome da utilizzare per le reti VPC e le subnet.
  • TERMINATION_ACTION: indica se arrestare o eliminare la VM in caso di prerilascio. Specifica uno dei seguenti valori:
    • Per arrestare la VM: STOP
    • Per eliminare la VM: DELETE

Avvio flessibile

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=a3-megagpu-8g \
    --maintenance-policy=TERMINATE \
    --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address \
    --provisioning-model=FLEX_START \
    --instance-termination-action=TERMINATION_ACTION \
    --max-run-duration=RUN_DURATION \
    --request-valid-for-duration=VALID_FOR_DURATION \
    --reservation-affinity=none

Sostituisci quanto segue:

  • VM_NAME: il nome dell'istanza VM.
  • PROJECT_ID: l'ID progetto.
  • ZONE: una zona che supporta il tuo tipo di macchina.
  • BOOT_DISK_SIZE: le dimensioni del disco di avvio in GB, ad esempio 50.
  • NETWORK_NAME_PREFIX: il prefisso del nome da utilizzare per le reti VPC e le subnet.
  • TERMINATION_ACTION: indica se arrestare o eliminare la VM al termine della durata di esecuzione. Specifica uno dei seguenti valori:
    • Per arrestare la VM: STOP
    • Per eliminare la VM: DELETE
  • RUN_DURATION: il tempo massimo di esecuzione della VM prima che Compute Engine la arresti o la elimini. Devi formattare il valore come numero di giorni, ore, minuti o secondi seguito rispettivamente da d, h, m e s. Ad esempio, un valore di 30m definisce un tempo di 30 minuti, mentre un valore di 1h2m3s definisce un tempo di un'ora, due minuti e tre secondi. Puoi specificare un valore compreso tra 10 minuti e 7 giorni.
  • VALID_FOR_DURATION: il tempo massimo di attesa per il provisioning delle risorse richieste. Devi formattare il valore come numero di giorni, ore, minuti o secondi seguiti rispettivamente da d, h, m e s. In base ai requisiti di zona per il tuo workload, specifica una delle seguenti durate per aumentare le probabilità di riuscita della richiesta di creazione della VM:
    • Se il tuo workload richiede la creazione della VM in una zona specifica, specifica una durata compresa tra 90 secondi (90s) e due ore (2h). Durate più lunghe aumentano le probabilità di ottenere risorse.
    • Se la VM può essere eseguita in qualsiasi zona all'interno della regione, specifica una durata di zero secondi (0s). Questo valore specifica che Compute Engine alloca le risorse solo se sono immediatamente disponibili. Se la richiesta di creazione non va a buon fine perché le risorse non sono disponibili, riprova la richiesta in una zona diversa.

Con prenotazione

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=a3-megagpu-8g \
    --maintenance-policy=TERMINATE \
    --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address \
    --provisioning-model=RESERVATION_BOUND \
    --instance-termination-action=TERMINATION_ACTION \
    --reservation-affinity=specific \
    --reservation=RESERVATION_URL

Sostituisci quanto segue:

  • VM_NAME: il nome dell'istanza VM.
  • PROJECT_ID: l'ID progetto.
  • ZONE: una zona che supporta il tuo tipo di macchina.
  • BOOT_DISK_SIZE: le dimensioni del disco di avvio in GB, ad esempio 50.
  • NETWORK_NAME_PREFIX: il prefisso del nome da utilizzare per le reti VPC e le subnet.
  • TERMINATION_ACTION: indica se arrestare o eliminare la VM al termine del periodo di prenotazione. Specifica uno dei seguenti valori:
    • Per arrestare la VM: STOP
    • Per eliminare la VM: DELETE
  • RESERVATION_URL: l'URL della prenotazione che vuoi utilizzare. Specifica uno dei seguenti valori:
    • Se hai creato la prenotazione nello stesso progetto: example-reservation
    • Se la prenotazione si trova in un progetto diverso e il tuo progetto può utilizzarla: projects/PROJECT_ID/reservations/example-reservation.

Installa i driver della GPU

Installa i driver della GPU su ogni VM A3 Mega.

  1. Installa i driver GPU NVIDIA.

    sudo cos-extensions install gpu -- --version=latest
    
  2. Rimonta il percorso.

    sudo mount --bind /var/lib/nvidia /var/lib/nvidia
    sudo mount -o remount,exec /var/lib/nvidia
    

Concedi alle NIC l'accesso alle GPU

Su ogni VM A3 Mega, concedi alle NIC l'accesso alle GPU.

  1. Modifica le impostazioni del firewall per accettare tutte le connessioni TCP in entrata e abilitare la comunicazione tra i nodi del cluster:
    sudo /sbin/iptables -I INPUT -p tcp -m tcp -j ACCEPT
  2. Configura il modulo dmabuf. Carica il modulo import-helper, che fa parte del framework dmabuf. Questo framework consente la condivisione della memoria ad alta velocità e senza copia tra la GPU e la scheda di interfaccia di rete (NIC), un componente fondamentale per la tecnologia GPUDirect:
    sudo modprobe import-helper
  3. Configura Docker per autenticare le richieste ad Artifact Registry.
    docker-credential-gcr configure-docker --registries us-docker.pkg.dev
  4. Avvia RxDM nel container. RxDM è un servizio di gestione che viene eseguito insieme all'applicazione GPU per gestire la memoria GPU. Questo servizio prealloca e gestisce la memoria GPU per il traffico di rete in entrata, un elemento chiave della tecnologia GPUDirect ed essenziale per il networking ad alte prestazioni. Avvia un container Docker denominato rxdm:
    docker run --pull=always --rm --detach --name rxdm \
        --network=host  --cap-add=NET_ADMIN  \
        --privileged \
        --volume /var/lib/nvidia:/usr/local/nvidia \
        --device /dev/nvidia0:/dev/nvidia0 \
        --device /dev/nvidia1:/dev/nvidia1 \
        --device /dev/nvidia2:/dev/nvidia2 \
        --device /dev/nvidia3:/dev/nvidia3 \
        --device /dev/nvidia4:/dev/nvidia4 \
        --device /dev/nvidia5:/dev/nvidia5 \
        --device /dev/nvidia6:/dev/nvidia6 \
        --device /dev/nvidia7:/dev/nvidia7 \
        --device /dev/nvidia-uvm:/dev/nvidia-uvm \
        --device /dev/nvidiactl:/dev/nvidiactl \
        --device /dev/dmabuf_import_helper:/dev/dmabuf_import_helper \
        --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64 \
        us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/tcpgpudmarxd-dev:v1.0.19 \
        --num_hops=2 --num_nics=8

    Per verificare che RxDM sia stato avviato correttamente, esegui il comando. Attendi il messaggio "Buffer manager initialization complete" (Inizializzazione del buffer manager completata) per confermare l'inizializzazione riuscita di RxDM.

    docker container logs --follow  rxdm

    In alternativa, controlla il log di completamento dell'inizializzazione di RxDM.

    docker container logs rxdm 2>&1 | grep "Buffer manager initialization complete"

Configura l'ambiente NCCL

Su ogni VM A3 Mega, completa i seguenti passaggi:

  1. Installa la libreria nccl-net, un plug-in per NCCL che consente la comunicazione GPUDirect sulla rete.Il seguente comando estrae l'immagine del programma di installazione e installa i file di libreria necessari in /var/lib/tcpxo/lib64/.
    NCCL_NET_IMAGE="us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/nccl-plugin-gpudirecttcpx-dev:v1.0.13-1"
    
    docker run --pull=always --rm --privileged \
        --network=host --cap-add=NET_ADMIN \
        --volume /var/lib/nvidia:/usr/local/nvidia  \
        --volume /var/lib:/var/lib \
        --device /dev/nvidia0:/dev/nvidia0   \
        --device /dev/nvidia1:/dev/nvidia1  \
        --device /dev/nvidia2:/dev/nvidia2  \
        --device /dev/nvidia3:/dev/nvidia3  \
        --device /dev/nvidia4:/dev/nvidia4  \
        --device /dev/nvidia5:/dev/nvidia5  \
        --device /dev/nvidia6:/dev/nvidia6  \
        --device /dev/nvidia7:/dev/nvidia7  \
        --device /dev/nvidia-uvm:/dev/nvidia-uvm  \
        --device /dev/nvidiactl:/dev/nvidiactl  \
        --device /dev/dmabuf_import_helper:/dev/dmabuf_import_helper  \
        --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/var/lib/tcpxo/lib64 \
        ${NCCL_NET_IMAGE} install  --install-nccl
    
    sudo mount --bind /var/lib/tcpxo /var/lib/tcpxo && sudo mount -o remount,exec /var/lib/tcpxo
    
  2. Avvia un container dedicato nccl-tests per i test NCCL. Questo container è preconfigurato con gli strumenti e gli script di utilità necessari, garantendo un ambiente pulito e coerente per la verifica delle prestazioni di configurazione di GPUDirect.

    Questo comando riutilizza la variabile NCCL_NET_IMAGE impostata nel passaggio precedente.

    docker run --pull=always --rm --detach --name nccl \
        --network=host --cap-add=NET_ADMIN \
        --privileged \
        --volume /var/lib/nvidia:/usr/local/nvidia  \
        --volume /var/lib/tcpxo:/var/lib/tcpxo \
        --shm-size=8g \
        --device /dev/nvidia0:/dev/nvidia0 \
        --device /dev/nvidia1:/dev/nvidia1 \
        --device /dev/nvidia2:/dev/nvidia2 \
        --device /dev/nvidia3:/dev/nvidia3 \
        --device /dev/nvidia4:/dev/nvidia4 \
        --device /dev/nvidia5:/dev/nvidia5 \
        --device /dev/nvidia6:/dev/nvidia6 \
        --device /dev/nvidia7:/dev/nvidia7 \
        --device /dev/nvidia-uvm:/dev/nvidia-uvm \
        --device /dev/nvidiactl:/dev/nvidiactl \
        --device /dev/dmabuf_import_helper:/dev/dmabuf_import_helper \
        --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/var/lib/tcpxo/lib64 \
        ${NCCL_NET_IMAGE} daemon

Esegui il benchmark nccl-tests

Per eseguire il benchmark nccl-tests su una singola VM A3 Mega, completa i seguenti passaggi:

  1. Apri una shell bash interattiva all'interno del container nccl-tests.
    docker exec -it nccl bash
  2. Dall'interno della shell bash del container nccl-tests, completa i seguenti passaggi.

    1. Configura l'ambiente per un'esecuzione multi-nodo impostando SSH e generando file host. Sostituisci VM_NAME_1 e VM_NAME_2 con i nomi di ciascuna VM.
      /scripts/init_ssh.sh VM_NAME_1 VM_NAME_2
      /scripts/gen_hostfiles.sh VM_NAME_1 VM_NAME_2
        

      Viene creata una directory denominata /scripts/hostfiles2.

    2. Esegui il all_gather_perf benchmark per misurare il rendimento collettivo della comunicazione:
      /scripts/run-nccl-tcpxo.sh all_gather_perf "${LD_LIBRARY_PATH}" 8 eth1,eth2,eth3,eth4,eth5,eth6,eth7,eth8 1M 512M 3 2 10 8 2 10

Crea istanze A3 High e Edge (GPUDirect-TCPX)

Crea le istanze A3 High e Edge utilizzando l'immagine Container-Optimized OS cos-121-lts o successiva.

COS

Per testare le prestazioni di rete con GPUDirect-TCPX, devi creare almeno due VM A3 High o Edge. Crea ogni VM utilizzando l'immagine Container-Optimized OS cos-121-lts o successiva e specificando le reti VPC create nel passaggio precedente.

Le VM devono utilizzare l'interfaccia di rete Google Virtual NIC (gVNIC). Per le VM A3 High o Edge, devi utilizzare la versione 1.4.0rc3 o successive del driver gVNIC. Questa versione del driver è disponibile su Container-Optimized OS. La prima NIC virtuale viene utilizzata come NIC principale per la rete e l'archiviazione generiche, mentre le altre quattro NIC virtuali sono allineate con NUMA con due delle otto GPU sullo stesso switch PCIe.

In base al modello di provisioning che vuoi utilizzare per creare la VM, seleziona una delle seguenti opzioni:

Standard

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address

Sostituisci quanto segue:

  • VM_NAME: il nome della VM.
  • PROJECT_ID: l'ID progetto.
  • ZONE: una zona che supporta il tuo tipo di macchina.
  • MACHINE_TYPE: il tipo di macchina per la VM Specifica a3-highgpu-8g o a3-edgegpu-8g.
  • BOOT_DISK_SIZE: le dimensioni del disco di avvio in GB, ad esempio 50.
  • NETWORK_NAME_PREFIX: il prefisso del nome da utilizzare per le reti VPC e le subnet.

Spot

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --provisioning-model=SPOT \
    --instance-termination-action=TERMINATION_ACTION

Sostituisci quanto segue:

  • VM_NAME: il nome della VM.
  • PROJECT_ID: l'ID progetto.
  • ZONE: una zona che supporta il tuo tipo di macchina.
  • MACHINE_TYPE: il tipo di macchina per la VM Specifica a3-highgpu-8g o a3-edgegpu-8g.
  • BOOT_DISK_SIZE: le dimensioni del disco di avvio in GB, ad esempio 50.
  • NETWORK_NAME_PREFIX: il prefisso del nome da utilizzare per le reti VPC e le subnet.
  • TERMINATION_ACTION: indica se arrestare o eliminare la VM in caso di prerilascio. Specifica uno dei seguenti valori:
    • Per arrestare la VM: STOP
    • Per eliminare la VM: DELETE

Avvio flessibile

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --provisioning-model=FLEX_START \
    --instance-termination-action=TERMINATION_ACTION \
    --max-run-duration=RUN_DURATION \
    --request-valid-for-duration=VALID_FOR_DURATION \
    --reservation-affinity=none

Sostituisci quanto segue:

  • VM_NAME: il nome della VM.
  • PROJECT_ID: l'ID progetto.
  • ZONE: una zona che supporta il tuo tipo di macchina.
  • MACHINE_TYPE: il tipo di macchina per la VM Specifica a3-highgpu-8g o a3-edgegpu-8g.
  • BOOT_DISK_SIZE: le dimensioni del disco di avvio in GB, ad esempio 50.
  • NETWORK_NAME_PREFIX: il prefisso del nome da utilizzare per le reti VPC e le subnet.
  • TERMINATION_ACTION: indica se arrestare o eliminare la VM al termine della durata di esecuzione. Specifica uno dei seguenti valori:
    • Per arrestare la VM: STOP
    • Per eliminare la VM: DELETE
  • RUN_DURATION: il tempo massimo di esecuzione della VM prima che Compute Engine la arresti o la elimini. Devi formattare il valore come numero di giorni, ore, minuti o secondi seguito rispettivamente da d, h, m e s. Ad esempio, un valore di 30m definisce un tempo di 30 minuti, mentre un valore di 1h2m3s definisce un tempo di un'ora, due minuti e tre secondi. Puoi specificare un valore compreso tra 10 minuti e 7 giorni.
  • VALID_FOR_DURATION: il tempo massimo di attesa per il provisioning delle risorse richieste. Devi formattare il valore come numero di giorni, ore, minuti o secondi seguiti rispettivamente da d, h, m e s. In base ai requisiti di zona per il tuo workload, specifica una delle seguenti durate per aumentare le probabilità di riuscita della richiesta di creazione della VM:
    • Se il tuo workload richiede la creazione della VM in una zona specifica, specifica una durata compresa tra 90 secondi (90s) e due ore (2h). Durate più lunghe aumentano le probabilità di ottenere risorse.
    • Se la VM può essere eseguita in qualsiasi zona all'interno della regione, specifica una durata di zero secondi (0s). Questo valore specifica che Compute Engine alloca le risorse solo se sono immediatamente disponibili. Se la richiesta di creazione non va a buon fine perché le risorse non sono disponibili, riprova la richiesta in una zona diversa.

Con prenotazione

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --provisioning-model=RESERVATION_BOUND \
    --instance-termination-action=TERMINATION_ACTION \
    --reservation-affinity=specific \
    --reservation=RESERVATION_URL

Sostituisci quanto segue:

  • VM_NAME: il nome della VM.
  • PROJECT_ID: l'ID progetto.
  • ZONE: una zona che supporta il tuo tipo di macchina.
  • MACHINE_TYPE: il tipo di macchina per la VM Specifica a3-highgpu-8g o a3-edgegpu-8g.
  • BOOT_DISK_SIZE: le dimensioni del disco di avvio in GB, ad esempio 50.
  • NETWORK_NAME_PREFIX: il prefisso del nome da utilizzare per le reti VPC e le subnet.
  • TERMINATION_ACTION: indica se arrestare o eliminare la VM al termine del periodo di prenotazione. Specifica uno dei seguenti valori:
    • Per arrestare la VM: STOP
    • Per eliminare la VM: DELETE
  • RESERVATION_URL: l'URL della prenotazione che vuoi utilizzare. Specifica uno dei seguenti valori:
    • Se hai creato la prenotazione nello stesso progetto: example-reservation
    • Se la prenotazione si trova in un progetto diverso e il tuo progetto può utilizzarla: projects/PROJECT_ID/reservations/example-reservation.

Installa i driver della GPU

Su ogni VM A3 High o Edge, completa i seguenti passaggi.

  1. Installa i driver GPU NVIDIA eseguendo il seguente comando:
    sudo cos-extensions install gpu -- --version=latest
  2. Monta di nuovo il percorso eseguendo il seguente comando:
    sudo mount --bind /var/lib/nvidia /var/lib/nvidia
    sudo mount -o remount,exec /var/lib/nvidia

Concedi alle NIC l'accesso alle GPU

Su ogni VM A3 High o Edge, concedi alle NIC l'accesso alle GPU completando i seguenti passaggi:

  1. Configura il registry.
    • Se utilizzi Container Registry, esegui il seguente comando:
      docker-credential-gcr configure-docker
    • Se utilizzi Artifact Registry, esegui il seguente comando:
      docker-credential-gcr configure-docker --registries us-docker.pkg.dev
  2. Configura il gestore del percorso dati in arrivo. Deve essere eseguito un servizio di gestione, GPUDirect-TCPX Receive Data Path Manager, insieme alle applicazioni che utilizzano GPUDirect-TCPX. Per avviare il servizio su ogni VM Container-Optimized OS, esegui il seguente comando:
    docker run --pull=always --rm \
        --name receive-datapath-manager \
        --detach \
        --privileged \
        --cap-add=NET_ADMIN --network=host \
        --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \
        --device /dev/nvidia0:/dev/nvidia0 \
        --device /dev/nvidia1:/dev/nvidia1 \
        --device /dev/nvidia2:/dev/nvidia2 \
        --device /dev/nvidia3:/dev/nvidia3 \
        --device /dev/nvidia4:/dev/nvidia4 \
        --device /dev/nvidia5:/dev/nvidia5 \
        --device /dev/nvidia6:/dev/nvidia6 \
        --device /dev/nvidia7:/dev/nvidia7 \
        --device /dev/nvidia-uvm:/dev/nvidia-uvm \
        --device /dev/nvidiactl:/dev/nvidiactl \
        --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64 \
        --volume /run/tcpx:/run/tcpx \
        --entrypoint /tcpgpudmarxd/build/app/tcpgpudmarxd \
        us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/tcpgpudmarxd \
        --gpu_nic_preset a3vm --gpu_shmem_type fd --uds_path "/run/tcpx" --setup_param "--verbose 128 2 0"
       
  3. Verifica che il container receive-datapath-manager sia stato avviato.
    docker container logs --follow receive-datapath-manager

    L'output dovrebbe essere simile al seguente:

    I0000 00:00:1687813309.406064       1 rx_rule_manager.cc:174] Rx Rule Manager server(s) started...
  4. Per interrompere la visualizzazione dei log, premi ctrl-c.
  5. Installa le regole della tabella IP.
    sudo iptables -I INPUT -p tcp -m tcp -j ACCEPT
  6. Configura la NVIDIA Collective Communications Library (NCCL) e il plug-in GPUDirect-TCPX.

    Per utilizzare NCCL con il supporto di GPUDirect-TCPX è necessaria una versione specifica della libreria NCCL e una combinazione di file binari del plug-in GPUDirect-TCPX. Google Cloud offre pacchetti che soddisfano questo requisito.

    Per installare il pacchetto Google Cloud , esegui il seguente comando:

    docker run --rm -v /var/lib:/var/lib us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/nccl-plugin-gpudirecttcpx install --install-nccl
    sudo mount --bind /var/lib/tcpx /var/lib/tcpx
    sudo mount -o remount,exec /var/lib/tcpx

    Se il comando ha esito positivo, i file libnccl-net.so e libnccl.so vengono inseriti nella directory /var/lib/tcpx/lib64.

Esegui test

Su ogni VM A3 High o Edge, esegui un test NCCL completando i seguenti passaggi:

  1. Avvia il container.
    #!/bin/bash
    
    function run_tcpx_container() {
    docker run \
       -u 0 --network=host \
       --cap-add=IPC_LOCK \
       --userns=host \
       --volume /run/tcpx:/tmp \
       --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \
       --volume /var/lib/tcpx/lib64:/usr/local/tcpx/lib64 \
       --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 \
       --device /dev/nvidia0:/dev/nvidia0 \
       --device /dev/nvidia1:/dev/nvidia1 \
       --device /dev/nvidia2:/dev/nvidia2 \
       --device /dev/nvidia3:/dev/nvidia3 \
       --device /dev/nvidia4:/dev/nvidia4 \
       --device /dev/nvidia5:/dev/nvidia5 \
       --device /dev/nvidia6:/dev/nvidia6 \
       --device /dev/nvidia7:/dev/nvidia7 \
       --device /dev/nvidia-uvm:/dev/nvidia-uvm \
       --device /dev/nvidiactl:/dev/nvidiactl \
       --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/usr/local/tcpx/lib64 \
       "$@"
    }
    

    Il comando precedente completa quanto segue:

    • Monta i dispositivi NVIDIA da /dev nel container
    • Imposta lo spazio dei nomi di rete del container sull'host
    • Imposta lo spazio dei nomi dell'utente del container sull'host
    • Aggiunge CAP_IPC_LOCK alle funzionalità del container
    • Monta /tmp dell'host su /tmp del container
    • Monta il percorso di installazione della NCCL e del plug-in GPUDirect-TCPX NCCL nel container e aggiungi il percorso montato a LD_LIBRARY_PATH
  2. Dopo aver avviato il container, le applicazioni che utilizzano NCCL possono essere eseguite al suo interno. Ad esempio, per eseguire il test run-allgather, completa i seguenti passaggi:
    1. Su ogni VM A3 High o Edge, esegui quanto segue:
      $ run_tcpx_container -it --rm us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/nccl-plugin-gpudirecttcpx shell
    2. Su una VM, esegui i seguenti comandi:
      1. Configura la connessione tra le VM. Sostituisci VM-0 e VM-1 con i nomi di ciascuna VM.
        /scripts/init_ssh.sh VM-0 VM-1
        pushd /scripts && /scripts/gen_hostfiles.sh VM-0 VM-1; popd

        Viene creata una directory /scripts/hostfiles2 su ogni VM.

      2. Esegui lo script.
        /scripts/run-allgather.sh 8 eth1,eth2,eth3,eth4 1M 512M 2

    L'esecuzione dello script run-allgather richiede circa due minuti. Alla fine dei log, vedrai i risultati di all-gather.

    Se nei log NCCL viene visualizzata la riga seguente, significa che GPUDirect-TCPX è stato inizializzato correttamente.

    NCCL INFO NET/GPUDirectTCPX ver. 3.1.1.
    

GPU multi-istanza

Una GPU multi-istanza partiziona una singola GPU NVIDIA H100 all'interno della stessa VM in un massimo di sette istanze GPU indipendenti. Vengono eseguite contemporaneamente, ognuna con la propria memoria cache, la propria cache e i propri multiprocessori streaming. Questa configurazione consente alla GPU NVIDIA H100 di offrire una qualità del servizio (QoS) coerente con un utilizzo fino a 7 volte superiore rispetto ai modelli di GPU precedenti.

Puoi creare fino a sette GPU multi-istanza. Con le GPU H100 da 80 GB, a ogni GPU multi-istanza vengono allocati 10 GB di memoria.

Per ulteriori informazioni sull'utilizzo delle GPU multi-istanza, consulta la Guida dell'utente per le GPU multi-istanza NVIDIA.

Per creare GPU multi-istanza, completa i seguenti passaggi:

  1. Crea le istanze A3 Mega, A3 High o A3 Edge.

  2. Installa i driver della GPU.

  3. Attiva la modalità MIG. Per istruzioni, vedi Attivare il MIG.

  4. Configura le partizioni GPU. Per istruzioni, vedi Utilizzare le partizioni GPU.