Utilizza una larghezza di banda di rete più elevata

Puoi utilizzare larghezze di banda di rete più elevate, pari o superiori a 100 Gbps, per migliorare le prestazioni dei carichi di lavoro distribuiti in esecuzione sulle VM GPU.

Larghezze di banda di rete più elevate sono supportate su configurazioni VM selezionate di VM per uso generico N1 con GPU NVIDIA T4 o V100 e su determinati tipi di macchine ottimizzate per l'acceleratore.

Per esaminare le configurazioni o i tipi di macchina che supportano queste frequenze di larghezza di banda di rete più elevate, consulta Larghezze di banda e GPU di rete.

Per informazioni generali sulla larghezza di banda della rete su Compute Engine, consulta Larghezza di banda di rete.

Panoramica

Per utilizzare le larghezze di rete più elevate disponibili per ogni VM GPU, completa i seguenti passaggi consigliati:

  1. Crea la tua VM GPU utilizzando un'immagine del sistema operativo che supporta il NIC virtuale (gVNIC) di Google. Per le VM A3, ti consigliamo di utilizzare un'immagine Container-Optimized OS.
  2. (Facoltativo) Installa Fast Socket. Fast Socket migliora le prestazioni di NCCL su reti da 100 Gbps o superiori riducendo la contesa tra più connessioni TCP. In alcune Deep Learning VM Images (DLVM) è preinstallato il socket veloce.

Usa Deep Learning VM Image

Puoi creare le tue VM utilizzando qualsiasi immagine supportata da GPU del progetto Deep Learning VM Images. In tutte le immagini DLVM supportate dalle GPU sono preinstallati il driver GPU, il software ML e gVNIC. Per un elenco di immagini DLVM, consulta Scegliere un'immagine.

Se vuoi utilizzare il socket veloce, puoi scegliere un'immagine DLVM, ad esempio: tf-latest-gpu-debian-10 o tf-latest-gpu-ubuntu-1804.

Creare VM che utilizzano larghezze di rete più elevate

Per larghezze di banda di rete più elevate, ti consigliamo di abilitare Google Virtual NIC (gVNIC). Per ulteriori informazioni, consulta la sezione Utilizzo del NIC virtuale di Google.

Per le VM A3, è richiesta la versione gVNIC 1.4.0rc3 o successiva. Questa versione del driver è disponibile in Container-Optimized OS. Per tutti gli altri sistemi operativi, devi installare gVNIC versione 1.4.0rc3 o successiva.

Per creare una VM con GPU collegate e una larghezza di banda di rete superiore, completa i seguenti passaggi:

  1. Verifica quanto segue:

    • Per le VM GPU N1 con le GPU T4 o V100 collegate: rivedi la larghezza di banda massima per la configurazione di CPU, GPU e memoria
    • Per le VM ottimizzate per l'acceleratore A3, A2 e G2: rivedi la larghezza di banda massima per il tuo tipo di macchina

    Per ulteriori informazioni, consulta l'articolo sulla larghezza di banda massima disponibile.

  2. Crea la VM GPU. Gli esempi seguenti mostrano come creare A3, A2 e N1 con VM V100 collegate.

    In questi esempi, le VM vengono create utilizzando Google Cloud CLI. Tuttavia, puoi anche utilizzare la console Google Cloud o l'API Compute Engine per creare queste VM. Per saperne di più sulla creazione di VM GPU, consulta Creare una VM con GPU collegate.

    A2 (A100)

    Ad esempio, per creare una VM con una larghezza di banda massima di 100 Gbps, a cui sono collegate otto GPU A100 e che utilizza l'immagine DLVM tf-latest-gpu, esegui questo comando:

    gcloud compute instances create VM_NAME \
     --project=PROJECT_ID \
     --zone=ZONE \
     --machine-type=a2-highgpu-8g \
     --maintenance-policy=TERMINATE --restart-on-failure \
     --image-family=tf-latest-gpu \
     --image-project=deeplearning-platform-release \
     --boot-disk-size=200GB \
     --network-interface=nic-type=GVNIC \
     --metadata="install-nvidia-driver=True,proxy-mode=project_editors" \
     --scopes=https://www.googleapis.com/auth/cloud-platform
    

    Sostituisci quanto segue:

    • VM_NAME: il nome della VM
    • PROJECT_ID : il tuo ID progetto
    • ZONE: la zona per la VM. Questa zona deve supportare il tipo di GPU specificato. Per ulteriori informazioni sulle zone, consulta la pagina relativa alla disponibilità delle regioni e delle zone GPU.

    A3 (H100)

    Per istruzioni dettagliate su come configurare le VM A3 con prestazioni di rete migliori, consulta Migliorare le prestazioni di rete con GPUDirect-TCPX.

    N1 (V100)

    Ad esempio, per creare una VM con una larghezza di banda massima di 100 Gbps, che ha otto GPU V100 collegate e che utilizza l'immagine DLVM tf-latest-gpu, esegui questo comando:

    gcloud compute instances create VM_NAME \
     --project PROJECT_ID \
     --custom-cpu 96 \
     --custom-memory 624 \
     --image-project=deeplearning-platform-release \
     --image-family=tf-latest-gpu \
     --accelerator type=nvidia-tesla-v100,count=8 \
     --maintenance-policy TERMINATE \
     --metadata="install-nvidia-driver=True"  \
     --boot-disk-size 200GB \
     --network-interface=nic-type=GVNIC \
     --zone=ZONE
    
  3. Se non utilizzi Deep Learning VM Image o Container-Optimized OS supportate da GPU, installa i driver GPU. Per ulteriori informazioni, consulta Installazione dei driver GPU.

  4. Facoltativo. Sulla VM, installa Fast Socket.

  5. Dopo aver configurato la VM, puoi verificare la larghezza di banda della rete.

Installa Fast Socket

NVIDIA Collective Communications Library (NCCL) è utilizzata da framework di deep learning come TensorFlow, PyTorch e Horovod per l'addestramento multi-GPU e multi-nodi.

Fast Socket è un servizio di trasporto di rete di proprietà di Google per NCCL. Su Compute Engine, Fast Socket migliora le prestazioni dell'NCCL sulle reti a 100 Gbps riducendo la contesa tra più connessioni TCP. Per ulteriori informazioni sull'uso di NCCL, consulta la guida dell'utente di NCCL.

La valutazione attuale mostra che Fast Socket migliora completamente la velocità effettiva del 30-60%, a seconda delle dimensioni del messaggio.

Per configurare un ambiente Fast Socket, puoi utilizzare Deep Learning VM Image con Fast Socket preinstallato o installare manualmente Fast Socket su una VM Linux. Per verificare se Fast Socket è preinstallato, consulta la sezione Verificare che Fast Socket sia abilitato.

Prima di installare Fast Socket su una VM Linux, devi installare NCCL. Per istruzioni dettagliate, consulta la documentazione di NVIDIA NCCL.

CentOS/RHEL

Per scaricare e installare Fast Socket su una VM CentOS o RHEL, completa i seguenti passaggi:

  1. Aggiungi il repository del pacchetto e importa le chiavi pubbliche.

    sudo tee /etc/yum.repos.d/google-fast-socket.repo << EOM
    [google-fast-socket]
    name=Fast Socket Transport for NCCL
    baseurl=https://packages.cloud.google.com/yum/repos/google-fast-socket
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
          https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOM
    
  2. Installa Fast Socket.

    sudo yum install google-fast-socket
    
  3. Verifica che l'opzione Fast Socket sia attivata.

SLES

Per scaricare e installare Fast Socket su una VM SLES, completa i seguenti passaggi:

  1. Aggiungi il repository del pacchetto.

    sudo zypper addrepo https://packages.cloud.google.com/yum/repos/google-fast-socket google-fast-socket
    
  2. Aggiungi chiavi del repository.

    sudo rpm --import https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    
  3. Installa Fast Socket.

    sudo zypper install google-fast-socket
    
  4. Verifica che l'opzione Fast Socket sia attivata.

Debian/Ubuntu

Per scaricare e installare Fast Socket su una VM Debian o Ubuntu, segui questi passaggi:

  1. Aggiungi il repository del pacchetto.

    echo "deb https://packages.cloud.google.com/apt google-fast-socket main" | sudo tee /etc/apt/sources.list.d/google-fast-socket.list
    
  2. Aggiungi chiavi del repository.

    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    
  3. Installa Fast Socket.

    sudo apt update && sudo apt install google-fast-socket
    
  4. Verifica che l'opzione Fast Socket sia attivata.

Verifica dell'abilitazione di Fast Socket

Sulla VM, completa i seguenti passaggi:

  1. Individua la home directory di NCCL.

    sudo ldconfig -p | grep nccl

    Ad esempio, su un'immagine DLVM, ottieni il seguente output:

    libnccl.so.2 (libc6,x86-64) => /usr/local/nccl2/lib/libnccl.so.2
    libnccl.so (libc6,x86-64) => /usr/local/nccl2/lib/libnccl.so
    libnccl-net.so (libc6,x86-64) => /usr/local/nccl2/lib/libnccl-net.so

    Questo mostra che la home directory dell'NCCL è /usr/local/nccl2.

  2. Verifica che NCCL carichi il plug-in Fast Socket. Per verificare, devi scaricare il pacchetto di test NCCL. Per scaricare il pacchetto di test, esegui questo comando:

    git clone https://github.com/NVIDIA/nccl-tests.git && \
    cd nccl-tests && make NCCL_HOME=NCCL_HOME_DIRECTORY

    Sostituisci NCCL_HOME_DIRECTORY con la home directory di NCCL.

  3. Dalla directory nccl-tests, esegui il processo all_reduce_perf:

    NCCL_DEBUG=INFO build/all_reduce_perf

    Se il protocollo Fast Socket è abilitato, nel log di output viene visualizzato il messaggio FastSocket plugin initialized.

    # nThread 1 nGpus 1 minBytes 33554432 maxBytes 33554432 step: 1048576(bytes) warmup iters: 5 iters: 20 validation: 1
    #
    # Using devices
    #   Rank  0 Pid  63324 on fast-socket-gpu device  0 [0x00] Tesla V100-SXM2-16GB
    .....
    fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : Flow placement enabled.
    fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : queue skip: 0
    fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : Using [0]ens12:10.240.0.24
    fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket plugin initialized
    ......
    

Controlla la larghezza di banda della rete

Quando lavori con GPU a larghezza di banda elevata, puoi utilizzare uno strumento per il traffico di rete, come iperf2, per misurare la larghezza di banda di rete.

Per controllare la velocità della larghezza di banda, sono necessarie almeno due VM con GPU collegate e in grado di supportare entrambe la velocità della larghezza di banda che stai testando.

Utilizza iPerf per eseguire il benchmark su sistemi basati su Debian.

  1. Crea due VM in grado di supportare le velocità di larghezza di banda richieste.

  2. Quando entrambe le VM sono in esecuzione, utilizza SSH per connetterti a una delle VM.

    gcloud compute ssh VM_NAME \
        --project=PROJECT_ID
    

    Sostituisci quanto segue:

    • VM_NAME: il nome della prima VM
    • PROJECT_ID: il tuo ID progetto
  3. Sulla prima VM, completa i seguenti passaggi:

    1. Installa iperf.

      sudo apt-get update && sudo apt-get install iperf
      
    2. Ottieni l'indirizzo IP interno di questa VM. Prendi nota di tutto ciò scrivendolo.

      ip a
      
    3. Avvia il server iPerf.

      iperf -s
      

      Questo avvia un server in ascolto delle connessioni per eseguire il benchmark. Lascia in esecuzione questa opzione per tutta la durata del test.

  4. Da un nuovo terminale client, connettiti alla seconda VM utilizzando SSH.

    gcloud compute ssh VM_NAME \
       --project=PROJECT_ID
    

    Sostituisci quanto segue:

    • VM_NAME: il nome della seconda VM
    • PROJECT_ID: il tuo ID progetto
  5. Sulla seconda VM, completa i seguenti passaggi:

    1. Installa iPerf.

      sudo apt-get update && sudo apt-get install iperf
      
    2. Esegui l'iperf test e specifica l'indirizzo IP della prima VM come destinazione.

      iperf -t 30 -c internal_ip_of_instance_1 -P 16
      

      Questa operazione esegue un test di 30 secondi e produce un risultato simile all'output seguente. Se iPerf non riesce a raggiungere l'altra VM, potrebbe essere necessario modificare la rete o le impostazioni del firewall sulle VM o forse nella console Google Cloud.

Quando utilizzi la larghezza di banda massima disponibile di 100 Gbps o 1000 Gbps (A3), tieni presente le seguenti considerazioni:

  • A causa dell'overhead delle intestazioni per protocolli come Ethernet, IP e TCP sullo stack di virtualizzazione, la velocità effettiva, misurata in netperf, satura a circa 90 Gbps o 800 Gbps (A3). Generalmente noto come goodput.

    TCP è in grado di raggiungere una velocità di rete di 100 o 1000 Gbps. Altri protocolli, come UDP, sono più lenti.

  • A causa di fattori quali l'overhead del protocollo e la congestione della rete, le prestazioni end-to-end dei flussi di dati potrebbero essere leggermente inferiori.

  • Devi utilizzare più flussi TCP per ottenere la larghezza di banda massima tra le istanze VM. Google consiglia da 4 a 16 stream. Con 16 flussi spesso massimizzi la velocità effettiva. A seconda dello stack di applicazioni e software, potrebbe essere necessario regolare le impostazioni per l'applicazione o per il codice per configurare più flussi.

Che cosa succede dopo?