Usar un ancho de banda de red mayor


En esta página se explica cómo crear instancias A2, G2 y N1 que usen anchos de banda de red más altos. Para saber cómo usar anchos de banda de red más altos en otras series de máquinas optimizadas para aceleradores, consulta Crear máquinas con GPU de alto ancho de banda.

Puedes usar anchos de banda de red más altos, de 100 Gbps o más, para mejorar el rendimiento de las cargas de trabajo distribuidas que se ejecutan en tus VMs con GPU. En Compute Engine, las máquinas virtuales A2, G2 y N1 con GPUs conectadas tienen un mayor ancho de banda de red, tal como se indica a continuación:

  • En el caso de las máquinas virtuales de uso general N1 que tengan GPUs T4 y V100 conectadas, puedes obtener un ancho de banda de red máximo de hasta 100 Gbps, en función de la combinación de GPU y del número de vCPUs.
  • En las máquinas virtuales A2 y G2 optimizadas para aceleradores, puedes obtener un ancho de banda de red máximo de hasta 100 Gbps, en función del tipo de máquina.

Para consultar las configuraciones o los tipos de máquina que admiten estas tasas de ancho de banda de red más altas, consulta Ancho de banda de red y GPUs.

Para obtener información general sobre el ancho de banda de red en Compute Engine, consulta Ancho de banda de red.

Información general

Para usar los anchos de banda de red más altos disponibles para cada VM con GPU, sigue estos pasos recomendados:

  1. Crea tu VM con GPU con una imagen de SO que admita la NIC virtual de Google (gVNIC).
  2. Opcional: instala Fast Socket. Fast Socket mejora el rendimiento de NCCL en redes de 100 Gbps o más al reducir la contención entre varias conexiones TCP. Algunas imágenes de máquina virtual de aprendizaje profundo (DLVM) tienen Fast Socket preinstalado.

Usar imágenes de máquinas virtuales de aprendizaje profundo

Puedes crear tus máquinas virtuales con cualquier imagen compatible con GPUs del proyecto Imágenes de máquina virtual de aprendizaje profundo. Todas las imágenes de DLVM compatibles con GPUs tienen preinstalados el controlador de GPU, el software de aprendizaje automático y gVNIC. Para ver una lista de imágenes de DLVM, consulta Elegir una imagen.

Si quiere usar Fast Socket, puede elegir una imagen de DLVM, como: tf-latest-gpu-debian-10 o tf-latest-gpu-ubuntu-1804.

Crear VMs que usen anchos de banda de red más altos

Para obtener un mayor ancho de banda de red, te recomendamos que habilites la NIC virtual de Google (gVNIC). Para obtener más información, consulta Usar NIC virtual de Google.

Para crear una VM que tenga GPUs conectadas y un ancho de banda de red mayor, haz lo siguiente:

  1. Consulta el ancho de banda de red máximo disponible de cada tipo de máquina que tenga GPUs conectadas.
  2. Crea tu VM con GPU. En los siguientes ejemplos se muestra cómo crear A2 y N1 con VMs V100 conectadas.

    En estos ejemplos, las máquinas virtuales se crean mediante la CLI de Google Cloud. Sin embargo, también puedes usar la Google Cloud console o la API de Compute Engine para crear estas VMs. Para obtener más información sobre cómo crear VMs con GPU, consulta Crear una VM con GPU vinculadas.

    A2 (A100)

    Por ejemplo, para crear una VM que tenga un ancho de banda máximo de 100 Gbps, tenga ocho GPUs A100 conectadas y use la imagen de DLVM tf-latest-gpu, ejecuta el siguiente 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
    

    Haz los cambios siguientes:

    • VM_NAME: el nombre de tu VM
    • PROJECT_ID : tu ID de proyecto
    • ZONE: la zona de la VM. Esta zona debe admitir el tipo de GPU especificado. Para obtener más información sobre las zonas, consulta el artículo sobre la disponibilidad de regiones y zonas de GPUs.

    N1 (V100)

    Por ejemplo, para crear una VM que tenga un ancho de banda máximo de 100 Gbps, tenga ocho GPUs V100 conectadas y use la imagen de DLVM tf-latest-gpu, ejecuta el siguiente 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. Si no usas imágenes de máquina virtual de aprendizaje profundo compatibles con GPU ni el SO optimizado para contenedores, instala los controladores de GPU. Para obtener más información, consulta Instalar controladores de GPU.

  4. Opcional: En la VM, instala Fast Socket.

  5. Una vez que hayas configurado la VM, puedes verificar el ancho de banda de la red.

Instalar Fast Socket

La biblioteca de comunicaciones colectivas de NVIDIA (NCCL) se usa en frameworks de aprendizaje profundo, como TensorFlow, PyTorch y Horovod, para el entrenamiento con varias GPUs y varios nodos.

Fast Socket es un transporte de red propietario de Google para NCCL. En Compute Engine, Fast Socket mejora el rendimiento de NCCL en redes de 100 Gbps al reducir la contención entre varias conexiones TCP. Para obtener más información sobre cómo trabajar con NCCL, consulta la guía de usuario de NCCL.

La evaluación actual muestra que Fast Socket mejora el rendimiento de la reducción total entre un 30 % y un 60%, en función del tamaño del mensaje.

Para configurar un entorno de Fast Socket, puedes usar una imagen de máquina virtual de aprendizaje profundo que tenga Fast Socket preinstalado o puedes instalar Fast Socket manualmente en una máquina virtual Linux. Para comprobar si Fast Socket está preinstalado, consulta Verificar que Fast Socket esté habilitado.

Antes de instalar Fast Socket en una máquina virtual Linux, debes instalar NCCL. Para obtener instrucciones detalladas, consulta la documentación de NVIDIA NCCL.

CentOS o RHEL

Para descargar e instalar Fast Socket en una VM de CentOS o RHEL, sigue estos pasos:

  1. Añade el repositorio de paquetes e importa las claves públicas.

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

    sudo yum install google-fast-socket
    
  3. Comprueba que Fast Socket esté habilitado.

SLES

Para descargar e instalar Fast Socket en una VM de SLES, sigue estos pasos:

  1. Añade el repositorio de paquetes.

    sudo zypper addrepo https://packages.cloud.google.com/yum/repos/google-fast-socket google-fast-socket
    
  2. Añade claves de repositorio.

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

    sudo zypper install google-fast-socket
    
  4. Comprueba que Fast Socket esté habilitado.

Debian o Ubuntu

Para descargar e instalar Fast Socket en una VM de Debian o Ubuntu, sigue estos pasos:

  1. Añade el repositorio de paquetes.

    echo "deb https://packages.cloud.google.com/apt google-fast-socket main" | sudo tee /etc/apt/sources.list.d/google-fast-socket.list
    
  2. Añade claves de repositorio.

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

    sudo apt update && sudo apt install google-fast-socket
    
  4. Comprueba que Fast Socket esté habilitado.

Verificar que Fast Socket esté habilitado

En tu VM, sigue estos pasos:

  1. Busca el directorio principal de NCCL.

    sudo ldconfig -p | grep nccl

    Por ejemplo, en una imagen de DLVM, obtendrás el siguiente resultado:

    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

    Esto muestra que el directorio principal de NCCL es /usr/local/nccl2.

  2. Comprueba que NCCL cargue el complemento Fast Socket. Para comprobarlo, debes descargar el paquete de prueba de NCCL. Para descargar el paquete de prueba, ejecuta el siguiente comando:

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

    Sustituye NCCL_HOME_DIRECTORY por el directorio principal de NCCL.

  3. En el directorio nccl-tests, ejecuta el proceso all_reduce_perf:

    NCCL_DEBUG=INFO build/all_reduce_perf

    Si Fast Socket está habilitado, el mensaje FastSocket plugin initialized se muestra en el registro de salida.

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

Comprobar el ancho de banda de la red

En esta sección se explica cómo comprobar el ancho de banda de la red de las instancias A3 Mega, A3 High, A3 Edge, A2, G2 y N1. Cuando trabajes con GPUs de gran ancho de banda, puedes usar una herramienta de tráfico de red, como iperf2, para medir el ancho de banda de la red.

Para comprobar las velocidades de ancho de banda, necesitas al menos dos máquinas virtuales que tengan GPUs conectadas y que admitan la velocidad de ancho de banda que estés probando.

Usa iPerf para realizar la prueba de rendimiento en sistemas basados en Debian.

  1. Crea dos VMs que puedan admitir las velocidades de ancho de banda necesarias.

  2. Una vez que ambas máquinas virtuales estén en funcionamiento, usa SSH para conectarte a una de ellas.

    gcloud compute ssh VM_NAME \
        --project=PROJECT_ID
    

    Haz los cambios siguientes:

    • VM_NAME: el nombre de la primera VM
    • PROJECT_ID: tu ID de proyecto
  3. En la primera máquina virtual, sigue estos pasos:

    1. Instala iperf.

      sudo apt-get update && sudo apt-get install iperf
      
    2. Obtén la dirección IP interna de esta VM. Para no olvidarte, anótalo.

      ip a
      
    3. Inicia el servidor iPerf.

      iperf -s
      

      De esta forma, se inicia un servidor que está a la escucha de conexiones para realizar la prueba de rendimiento. Déjalo en funcionamiento durante la prueba.

  4. Desde un nuevo terminal de cliente, conéctate a la segunda VM mediante SSH.

    gcloud compute ssh VM_NAME \
       --project=PROJECT_ID
    

    Haz los cambios siguientes:

    • VM_NAME: el nombre de la segunda VM
    • PROJECT_ID: tu ID de proyecto
  5. En la segunda VM, sigue estos pasos:

    1. Instala iPerf.

      sudo apt-get update && sudo apt-get install iperf
      
    2. Ejecuta la prueba iperf y especifica la dirección IP de la primera VM como destino.

      iperf -t 30 -c internal_ip_of_instance_1 -P 16
      

      Se ejecuta una prueba de 30 segundos y se genera un resultado similar al siguiente. Si iPerf no puede acceder a la otra VM, es posible que tengas que ajustar la red o la configuración del cortafuegos en las VMs o en la Google Cloud consola.

Si utilizas el ancho de banda máximo disponible de 100 Gbps o 1000 Gbps (A3 Mega, A3 High o A3 Edge), ten en cuenta lo siguiente:

  • Debido a las sobrecargas de encabezado de paquetes de protocolos de red como Ethernet, IP y TCP en la pila de virtualización, el rendimiento, medido por netperf, se satura en torno a 90 Gbps u 800 Gbps (A3 Mega, A3 High o A3 Edge). Se conoce como rendimiento útil.

    TCP puede alcanzar una velocidad de red de 100 o 1000 Gbps. Otros protocolos, como UDP, son más lentos.

  • Debido a factores como la sobrecarga del protocolo y la congestión de la red, el rendimiento de extremo a extremo de los flujos de datos puede ser ligeramente inferior.

  • Debes usar varios flujos TCP para alcanzar el máximo ancho de banda entre las instancias de VM. Google recomienda entre 4 y 16. Con 16 flujos, maximizarás el rendimiento con frecuencia. En función de tu aplicación y de tu pila de software, es posible que tengas que ajustar la configuración de tu aplicación o de tu código para configurar varias emisiones.

Siguientes pasos