Utiliser une bande passante réseau plus élevée


Vous pouvez utiliser des bandes passantes réseau plus élevées, de 100 Gbit/s ou plus, pour améliorer les performances des charges de travail distribuées qui sont exécutées sur vos VM avec GPU.

Des bandes passantes réseau plus élevées sont disponibles pour les VM auxquelles sont associés des GPU sur Compute Engine, comme suit :

  • Pour les VM à usage général N1 auxquelles sont associés des GPU T4 et V100, vous pouvez obtenir une bande passante réseau maximale de 100 Gbit/s, en fonction de la combinaison du nombre de GPU et de processeurs virtuels.
  • Pour les VM optimisées pour les accélérateurs A2 et G2, vous pouvez obtenir une bande passante réseau maximale de 100 Gbit/s, en fonction du type de machine.
  • Pour les VM optimisées pour les accélérateurs A3, vous pouvez obtenir une bande passante réseau maximale de 1 800 Gbit/s.

Pour consulter les configurations ou les types de machines compatibles avec ces vitesses de bande passante réseau plus élevées, consultez la section Bandes passantes réseau et GPU.

Pour obtenir des informations générales sur la bande passante réseau sur Compute Engine, consultez la section Bande passante réseau.

Présentation

Pour utiliser les bandes passantes réseau plus élevées disponibles pour chaque VM GPU, procédez comme suit :

  1. Créez votre VM avec GPU à l'aide d'une image d'OS compatible avec la carte d'interface réseau virtuelle Google (gVNIC). Pour les VM A3, nous vous recommandons d'utiliser une image Container-Optimized OS.
  2. Facultatif : Installer Fast Socket. Fast Socket améliore les performances de la bibliothèque NCCL sur les réseaux à 100 Gbit/s ou plus en limitant les conflits entre plusieurs connexions TCP. Fast Socket est préinstallé sur certaines instances Deep Learning VM Image (DLVM).

Utiliser des instances Deep Learning VM Image

Vous pouvez créer vos VM à l'aide de n'importe quelle image compatible avec les GPU provenant du projet Deep Learning VM Image. Le pilote de GPU, le logiciel ML et gVNIC sont préinstallés sur toutes les images DLVM compatibles avec les GPU. Pour obtenir la liste des images DLVM, consultez la page Choisir une image.

Si vous souhaitez utiliser Fast Socket, vous pouvez choisir une image DLVM telle que tf-latest-gpu-debian-10 ou tf-latest-gpu-ubuntu-1804.

Créer des VM qui utilisent des bandes passantes réseau plus élevées

Pour des bandes passantes réseau plus élevées, nous vous recommandons d'activer la carte d'interface réseau virtuelle Google (gVNIC). Pour plus d'informations, consultez la section Utiliser la carte d'interface réseau virtuelle Google.

Pour les VM A3, gVNIC version 1.4.0rc3 ou ultérieure est requis. Cette version du pilote est disponible sur Container-Optimized OS. Pour tous les autres systèmes d'exploitation, vous devez installer gVNIC version 1.4.0rc3 ou ultérieure.

Pour créer une VM à laquelle sont associés des GPU et dont la bande passante réseau est plus élevée, procédez comme suit :

  1. Vérifiez la bande passante réseau maximale disponible pour chaque type de machine auquel des GPU sont associés.
  2. Créez votre VM avec GPU. Les exemples suivants montrent comment créer des VM A3, A2 et N1 associées à des GPU V100.

    Dans ces exemples, les VM sont créées à l'aide de Google Cloud CLI. Toutefois, vous pouvez également utiliser la console Google Cloud ou l'API Compute Engine pour créer ces VM. Pour en savoir plus sur la création de VM avec GPU, consultez la section Créer une VM avec des GPU associés.

    A3 (H100)

    Pour obtenir des instructions détaillées sur la configuration des VM A3 afin de maximiser les performances réseau, consultez les ressources suivantes :

    A2 (A100)

    Par exemple, pour créer une VM dotée d'une bande passante maximale de 100 Gbit/s, disposant de huit GPU A100 et utilisant l'image DLVM tf-latest-gpu, exécutez la commande suivante :

    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
    

    Remplacez l'élément suivant :

    • VM_NAME : nom de votre VM.
    • PROJECT_ID : ID de votre projet.
    • ZONE : zone de la VM. Cette zone doit être compatible avec le type de GPU spécifié. Pour en savoir plus sur les zones, consultez la page Disponibilité des GPU dans les régions et zones.

    N1 (V100)

    Par exemple, pour créer une VM avec une bande passante maximale de 100 Gbit/s, associée à huit GPU V100 et utilisant l'image DLVM tf-latest-gpu, exécutez la commande suivante :

    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. Si vous n'utilisez pas d'instances Deep Learning VM Image ou Container-Optimized OS compatibles avec les GPU, installez les pilotes de GPU. Pour en savoir plus, consultez la page Installer des pilotes de GPU.

  4. Facultatif : Sur la VM, installez Fast Socket.

  5. Après avoir créé la VM, vous pouvez vérifier la bande passante réseau.

Installez Fast Socket.

La bibliothèque NVIDIA Collective Communications Library (NCCL) est utilisée par des frameworks de deep learning, tels que TensorFlow, PyTorch et Horovod, pour entraîner plusieurs GPU et nœuds.

Fast Socket est un service de transport réseau propriétaire de Google pour la bibliothèque NCCL. Sur Compute Engine, Fast Socket améliore les performances de la bibliothèque NCCL sur les réseaux à 100 Gbit/s en limitant les conflits entre plusieurs connexions TCP. Pour en savoir plus sur l'utilisation de la bibliothèque NCCL, consultez le guide de l'utilisateur de la bibliothèque NCCL.

L'évaluation en cours montre que Fast Socket améliore le débit global de 30 à 60 % en fonction de la taille du message.

Pour configurer un environnement Fast Socket, vous pouvez utiliser une instance Deep Learning VM Image sur laquelle Fast Socket est préinstallé, ou bien installer manuellement Fast Socket sur une VM Linux. Pour vérifier si Fast Socket est préinstallé, consultez la section Vérifier que Fast Socket est activé.

Avant d'installer Fast Socket sur une VM Linux, vous devez installer la bibliothèque NCCL. Pour obtenir des instructions détaillées, consultez la documentation de la bibliothèque NVIDIA NCCL.

CentOS/RHEL

Pour télécharger et installer Fast Socket sur une VM CentOS ou RHEL, procédez comme suit :

  1. Ajoutez le dépôt de packages et importez des clés publiques.

    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. Installez Fast Socket.

    sudo yum install google-fast-socket
    
  3. Vérifiez que Fast Socket est activé.

SLES

Pour télécharger et installer Fast Socket sur une VM SLES, procédez comme suit :

  1. Ajoutez le dépôt de packages.

    sudo zypper addrepo https://packages.cloud.google.com/yum/repos/google-fast-socket google-fast-socket
    
  2. Ajoutez des clés de dépôt.

    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. Installez Fast Socket.

    sudo zypper install google-fast-socket
    
  4. Vérifiez que Fast Socket est activé.

Debian/Ubuntu

Pour télécharger et installer Fast Socket sur une VM Debian ou Ubuntu, procédez comme suit :

  1. Ajoutez le dépôt de packages.

    echo "deb https://packages.cloud.google.com/apt google-fast-socket main" | sudo tee /etc/apt/sources.list.d/google-fast-socket.list
    
  2. Ajoutez des clés de dépôt.

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

    sudo apt update && sudo apt install google-fast-socket
    
  4. Vérifiez que Fast Socket est activé.

Vérifier que Fast Socket est activé

Sur votre VM, procédez comme suit :

  1. Recherchez le répertoire d'accueil de la bibliothèque NCCL.

    sudo ldconfig -p | grep nccl

    Par exemple, sur une image DLVM, vous obtenez la sortie suivante :

    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

    Le répertoire d'accueil de la bibliothèque NCCL est /usr/local/nccl2.

  2. Vérifiez que la bibliothèque NCCL charge le plug-in Fast Socket. Pour vous en assurer, vous devez télécharger le package de test de la bibliothèque NCCL. Pour télécharger le package de test, exécutez la commande suivante :

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

    Remplacez NCCL_HOME_DIRECTORY par le répertoire d'accueil de la bibliothèque NCCL.

  3. Dans le répertoire nccl-tests, exécutez le processus all_reduce_perf :

    NCCL_DEBUG=INFO build/all_reduce_perf

    Si Fast Socket est activé, le message FastSocket plugin initialized s'affiche dans le journal de sortie.

    # 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
    ......
    

Vérifier la bande passante réseau

Lorsque vous utilisez des GPU à bande passante élevée, vous pouvez utiliser un outil de trafic réseau, tel que iperf2, pour mesurer la bande passante réseau.

Pour vérifier la vitesse de la bande passante, vous devez disposer d'au moins deux VM auxquelles sont associés des GPU et qui sont compatibles avec la vitesse de bande passante que vous testez.

Utilisez iPerf pour effectuer l'analyse comparative des systèmes basés sur Debian.

  1. Créez deux VM compatibles avec les vitesses de bande passante requises.

  2. Une fois que les deux VM sont en cours d'exécution, utilisez SSH pour vous connecter à l'une des VM.

    gcloud compute ssh VM_NAME \
        --project=PROJECT_ID
    

    Remplacez l'élément suivant :

    • VM_NAME : nom de la première VM
    • PROJECT_ID : ID de votre projet
  3. Sur la première VM, procédez comme suit :

    1. Installez iperf.

      sudo apt-get update && sudo apt-get install iperf
      
    2. Obtenez l'adresse IP interne de cette VM. Gardez-en une trace en l'écrivant.

      ip a
      
    3. Démarrez le serveur iPerf.

      iperf -s
      

      Cette opération démarre un serveur qui écoute les connexions afin d'effectuer l'analyse comparative. Laissez-la s'exécuter pendant toute la durée du test.

  4. Depuis un nouveau terminal client, connectez-vous à la deuxième VM à l'aide de SSH.

    gcloud compute ssh VM_NAME \
       --project=PROJECT_ID
    

    Remplacez l'élément suivant :

    • VM_NAME : nom de la deuxième VM
    • PROJECT_ID : ID de votre projet
  5. Sur la deuxième VM, procédez comme suit :

    1. Installez iPerf.

      sudo apt-get update && sudo apt-get install iperf
      
    2. Exécutez le test iperf et définissez l'adresse IP de la première VM comme cible.

      iperf -t 30 -c internal_ip_of_instance_1 -P 16
      

      Cette opération exécute un test de 30 secondes et génère un résultat qui ressemble à ce qui suit. Si iPerf n'est pas en mesure d'accéder à l'autre VM, vous devrez peut-être ajuster le réseau ou les paramètres de pare-feu sur les VM ou dans la console Google Cloud.

Lorsque vous utilisez la bande passante maximale disponible de 100 Gbit/s ou 1 000 Gbit/s (A3), tenez compte des points suivants :

  • En raison de la surcharge des en-têtes pour les protocoles Ethernet, IP et TCP sur la pile de virtualisation, le débit (mesuré par netperf) sature à environ 90 Gbit/s ou 800 Gbit/s (A3). Il est généralement désigné par l'appellation goodput, qui correspond aux données utiles transmises.

    Le protocole TCP peut atteindre la vitesse réseau de 100 ou 1 000 Gbit/s. Les autres protocoles, tels que le protocole UDP, sont plus lents.

  • En raison de facteurs tels que la surcharge du protocole et la congestion du réseau, les performances de bout en bout des flux de données peuvent être légèrement inférieures.

  • Vous devez utiliser plusieurs flux TCP pour atteindre la bande passante maximale entre les instances de VM. Google recommande d'avoir recours à 4 à 16 flux. Avec 16 flux, vous atteindrez fréquemment le débit maximal. En fonction de votre application et de la pile logicielle, vous devrez peut-être ajuster les paramètres de votre application ou de votre code pour configurer plusieurs flux.

Étape suivante