Utilizzare una larghezza di banda di rete maggiore


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

Le VM con GPU collegate su Compute Engine sono disponibili con le seguenti larghezze di banda di rete:

  • Per le VM N1 per uso generale con GPU T4 e V100 collegate, puoi ottenere una larghezza di banda di rete massima fino a 100 Gbps, in base alla combinazione di GPU e vCPU.
  • Per le VM A2 e G2 ottimizzate per l'acceleratore, puoi ottenere una larghezza di banda di rete massima fino a 100 Gbps, in base al tipo di macchina.
  • Per le VM ottimizzate per l'acceleratore A3, puoi ottenere una larghezza di banda massima della rete fino a 1800 Gbps.

Per esaminare le configurazioni o i tipi di macchine che supportano queste velocità di larghezza di banda della rete più elevate, consulta Larghezza di banda della rete e GPU.

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

Panoramica

Per utilizzare le larghezze di banda 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 Google Virtual NIC (gVNIC). Per le VM A3, è consigliabile utilizzare un'immagine Container-Optimized OS.
  2. (Facoltativo) Installa Fast Socket. La porta Fast migliora le prestazioni di NCCL su reti di almeno 100 Gbps riducendo la contesa tra più connessioni TCP. In alcune Deep Learning VM Images (DLVM) è preinstallato Fast Socket.

Utilizzare le Deep Learning VM Image

Puoi creare le VM utilizzando qualsiasi immagine supportata da GPU dal progetto Immagini VM di deep learning. Tutte le immagini DLVM supportate dalla GPU hanno il driver GPU, il software ML e la gVNIC preinstallati. Per un elenco di immagini DLVM, consulta Scegliere un'immagine.

Se vuoi utilizzare Fast Socket, puoi scegliere un'immagine DLVM come: tf-latest-gpu-debian-10 o tf-latest-gpu-ubuntu-1804.

Creare VM che utilizzano larghezze di banda di rete più elevate

Per larghezze di banda di rete superiori, ti consigliamo di attivare Google Virtual NIC (gVNIC). Per ulteriori informazioni, consulta la sezione Utilizzare Google Virtual NIC.

Per le VM A3 è necessaria la versione 1.4.0rc3 o successive di gVNIC. Questa versione del driver è disponibile su Container-Optimized OS. Per tutti gli altri sistemi operativi, devi installare gVNIC 1.4.0rc3 o versioni successive.

Per creare una VM con GPU collegate e una larghezza di banda di rete superiore, completa quanto segue:

  1. Esamina la larghezza di banda massima della rete disponibile per ogni tipo di macchina con GPU collegate.
  2. Crea la VM GPU. Gli esempi riportati di seguito 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 ulteriori informazioni sulla creazione di VM con GPU, consulta Creare una VM con GPU collegate.

    A3 (H100)

    Per istruzioni dettagliate su come configurare le VM A3 per massimizzare le prestazioni della rete, consulta quanto segue:

    A2 (A100)

    Ad esempio, per creare una VM con una larghezza di banda massima di 100 Gbps, con otto GPU A100 collegate e che utilizza l'immagine DLVM tf-latest-gpu, esegui il seguente 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 della VM. Questa zona deve supportare il tipo di GPU specificato. Per saperne di più sulle zone, consulta Disponibilità di regioni e zone GPU.

    N1 (V100)

    Ad esempio, per creare una VM con una larghezza di banda massima di 100 Gbps, con otto GPU V100 collegate e che utilizza l'immagine DLVM tf-latest-gpu, esegui il seguente 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 immagini VM per il deep learning supportate da GPU o Container-Optimized OS, installa i driver GPU. Per ulteriori informazioni, consulta Installazione dei driver GPU.

  4. (Facoltativo) Nella VM, installa Fast Socket.

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

Installa Fast Socket

La NVIDIA Collective Communications Library (NCCL) viene utilizzata dai framework di deep learning come TensorFlow, PyTorch e Horovod per l'addestramento multi-GPU e multi-nodo.

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

La valutazione attuale mostra che la porta Fast Socket migliora il throughput all-reduce del 30-60%, a seconda delle dimensioni del messaggio.

Per configurare un ambiente Fast Socket, puoi utilizzare un'immagine VM di deep learning con Fast Socket preinstallato oppure puoi installare manualmente Fast Socket su una VM Linux. Per verificare se la presa rapida è preinstallata, consulta Verificare che la presa rapida sia attivata.

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, segui questi 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 la presa rapida.

    sudo yum install google-fast-socket
    
  3. Verifica che la funzionalità Fast Socket sia abilitata.

SLES

Per scaricare e installare Fast Socket su una VM SLES, segui questi 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 le 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 la presa Fast Socket.

    sudo zypper install google-fast-socket
    
  4. Verifica che la funzionalità Fast Socket sia abilitata.

Debian/Ubuntu

Per scaricare e installare Fast Socket su una VM Debian o Ubuntu, svolgi i seguenti 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 le chiavi del repository.

    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    
  3. Installa la presa rapida.

    sudo apt update && sudo apt install google-fast-socket
    
  4. Verifica che la porta Fast Socket sia abilitata.

Verificare che la porta Fast Socket sia abilitata

Nella VM, completa i seguenti passaggi:

  1. Individua la home directory di NCCL.

    sudo ldconfig -p | grep nccl

    Ad esempio, in un'immagine DLVM viene visualizzato 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

    Ciò indica che la home directory di 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 il seguente 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 la porta Fast Socket è attivata, 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
    ......
    

Controllare la larghezza di banda della rete

Quando utilizzi GPU ad alta larghezza di banda, puoi utilizzare uno strumento per il traffico di rete, come iperf2, per misurare la larghezza di banda di rete.

Per controllare le 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. Una volta avviate entrambe le VM, 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. Nella 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. Tieni traccia di tutto scrivendolo.

      ip a
      
    3. Avvia il server iPerf.

      iperf -s
      

      Viene avviato un server in ascolto per le connessioni al fine di eseguire il benchmark. Lascia in esecuzione il servizio 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. Nella seconda VM, completa i seguenti passaggi:

    1. Installa iPerf.

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

      iperf -t 30 -c internal_ip_of_instance_1 -P 16
      

      Viene eseguito un test di 30 secondi e viene prodotto un risultato simile al seguente output. 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 degli overhead degli header per protocolli come Ethernet, IP e TCP nello stack di virtualizzazione, il throughput, misurato da netperf, raggiunge la saturazione a circa 90 Gbps o 800 Gbps (A3). Generalmente noto come goodput.

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

  • A causa di fattori come il sovraccarico del protocollo e la congestione della rete, le prestazioni end-to-end degli stream di dati potrebbero essere leggermente inferiori.

  • Devi utilizzare più stream TCP per ottenere la larghezza di banda massima tra le istanze VM. Google consiglia da 4 a 16 stream. Con 16 flussi, spesso massimizzerai la velocità in uscita. A seconda dell'applicazione e dello stack software, potrebbe essere necessario modificare le impostazioni dell'applicazione o del codice per configurare più stream.

Passaggi successivi