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 las VMs de GPU.
Los anchos de banda de red más altos son compatibles con ciertas configuraciones de VMs N1 de uso general que tienen conectadas GPU NVIDIA T4 o V100, y con tipos específicos de máquinas optimizadas para aceleradores.
Para revisar las opciones de configuración o los tipos de máquina que admiten estas tasas de ancho de banda de red más altas, consulta Anchos de banda de red y GPU.
Para obtener información general sobre el ancho de banda de red en Compute Engine, consulta Ancho de banda de red.
Descripción general
Para usar los anchos de banda de red más altos disponibles en cada VM de GPU, completa los siguientes pasos recomendados:
- Crea tu VM de GPU con una imagen de SO que sea compatible con la NIC virtual de Google (gVNIC). Para las VMs A3, se recomienda usar una imagen de Container-Optimized OS.
- Opcional: Instala Fast Socket. Fast Socket mejora el rendimiento de NCCL en redes de 100 Gbps o más reduciendo la contención entre varias conexiones de TCP. Algunas Deep Learning VM Images (DLVM) tienen Fast Socket preinstalado.
Usa Deep Learning VM Images
Puedes crear tus VMs con cualquier imagen compatible con GPU del proyecto Deep Learning VM Images. Todas las imágenes de DLVM compatibles con GPU tienen el controlador de GPU, el software de AA y gVNIC preinstalados. Para obtener una lista de imágenes de DLVM, consulta Elige una imagen.
Si quieres usar Fast Socket, puedes elegir una imagen de DLVM, como
tf-latest-gpu-debian-10
o tf-latest-gpu-ubuntu-1804
.
Crea VMs que usen anchos de banda de red mayores
Para obtener un ancho de banda de red más alto, se recomienda habilitar la NIC virtual de Google (gVNIC). Para obtener más información, consulta Usa la NIC virtual de Google.
Para las VMs A3, se requiere la versión 1.4.0rc3 o posterior de gVNIC. Esta versión del controlador está disponible en Container-Optimized OS. Para todos los demás sistemas operativos, debes instalar la versión 1.4.0rc3 de gVNIC o posterior.
Para crear una VM que tenga GPU conectadas y un ancho de banda de red más alto, completa los siguientes pasos:
Consulta lo siguiente:
- Para las VMs GPU N1 con las GPU T4 o V100 conectadas:, revisa el ancho de banda máximo de tu configuración de CPU, GPU y memoria.
- Para las VMs optimizadas para aceleradores A3, A2 y G2, revisa el ancho de banda máximo de tu tipo de máquina.
Si deseas obtener más información, consulta Ancho de banda máximo disponible.
Crea la VM de GPU. En los siguientes ejemplos, se muestra cómo crear A3, A2 y N1 con VMs V100 conectadas.
En estos ejemplos, las VMs se crean con Google Cloud CLI. Sin embargo, también puedes usar la consola de Google Cloud o la API de Compute Engine para crear estas VMs. Si quieres más información para crear VMs de GPU, consulta Crea una VM con GPU conectadas.
A2 (A100)
Por ejemplo, para crear una VM que tenga un ancho de banda máximo de 100 Gbps, utiliza ocho GPU A100 adjuntas y usa la imagen 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
Reemplaza lo siguiente:
VM_NAME
: El nombre de tu VM.PROJECT_ID
: El ID de tu proyectoZONE
: La zona para la VM. Esta zona debe ser compatible con el tipo de GPU especificado. Para obtener más información sobre las zonas, consulta Disponibilidad de zonas y regiones de GPU.
A3 (H100)
Para obtener instrucciones detalladas sobre cómo configurar las VMs A3 que aumentaron el rendimiento de la red, consulta Mejora el rendimiento de la red con GPUDirect-TCPX.
N1 (V100)
Por ejemplo, para crear una VM que tenga un ancho de banda máximo de 100 Gbps, ocho GPU V100 adjuntas y use la imagen 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
Si no usas Deep Learning VM Images compatibles con GPU o Container-Optimized OS, instala los controladores de GPU. Para obtener más información, consulta Instala controladores de GPU.
Opcional. En la VM, instala Fast Socket.
Después de crear la instancia de VM, puedes verificar el ancho de banda de la red.
Instala Fast Socket
La biblioteca de comunicación colectiva de NVIDIA (NCCL) se usa en frameworks de aprendizaje profundo, como TensorFlow, PyTorch, Horovod para el entrenamiento de varias GPU y varios nodos.
Fast Socket es un transporte de red propiedad de Google para NCCL. En Compute Engine, Fast Socket mejora el rendimiento de NCCL en redes de 100 Gbps reduciendo la contención entre varias conexiones de TCP. Para obtener más información sobre cómo trabajar con NCCL, consulta la guía del usuario de NCCL.
La evaluación actual demuestra que Fast Socket mejora la capacidad de procesamiento de reducción del 30% al 60%, según el tamaño del mensaje.
Para configurar un entorno de Fast Socket, puedes usar Deep Learning VM Images que tiene Fast Socket preinstalado o puedes instalar Fast Socket de forma manual en una VM de Linux. Para verificar si Fast Socket está preinstalado, consulta Verifica que Fast Socket esté habilitado.
Antes de instalar Fast Socket en una VM de Linux, debes instalar NCCL. Para obtener instrucciones detalladas, consulta la documentación de NVIDIA NCCL.
CentOS/RHEL
Para descargar e instalar Fast Socket en una VM de CentOS o RHEL, completa los siguientes pasos:
Agrega el repositorio de paquetes y, luego, importa 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
Instala Fast Socket.
sudo yum install google-fast-socket
Verifica que Fast Socket esté habilitado.
SLES
Para descargar e instalar Fast Socket en una VM de SLES, completa los siguientes pasos:
Agrega el repositorio de paquetes.
sudo zypper addrepo https://packages.cloud.google.com/yum/repos/google-fast-socket google-fast-socket
Agrega 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
Instala Fast Socket.
sudo zypper install google-fast-socket
Verifica que Fast Socket esté habilitado.
Debian/Ubuntu
Para descargar e instalar Fast Socket en una VM de Debian o Ubuntu, completa los siguientes pasos:
Agrega 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
Agrega claves de repositorio.
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Instala Fast Socket.
sudo apt update && sudo apt install google-fast-socket
Verifica que Fast Socket esté habilitado.
Verifica que Fast Socket esté habilitado
En tu VM, completa los siguientes pasos:
Ubica el directorio principal de NCCL.
sudo ldconfig -p | grep nccl
Por ejemplo, en una imagen de DLVM, obtienes 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
.Comprueba que NCCL cargue el complemento de Fast Socket. Para verificarlo, 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
Reemplaza
NCCL_HOME_DIRECTORY
por el directorio principal de NCCL.Desde el directorio
nccl-tests
, ejecuta el procesoall_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 ......
Comprueba el ancho de banda de la red
Cuando trabajas con GPU con ancho de banda alto, puedes usar una herramienta de tráfico de red, como iperf2, para medir el ancho de banda de la red.
Para comprobar la velocidad del ancho de banda, necesitas al menos dos VM que tengan GPU conectadas y puedan admitir la velocidad de ancho de banda que estás probando.
Usa iPerf para realizar comparativas en sistemas basados en Debian.
Crea dos VM que puedan admitir las velocidades de ancho de banda requeridas.
Una vez que ambas VM estén en ejecución, usa SSH para conectarte a una de las VM.
gcloud compute ssh VM_NAME \ --project=PROJECT_ID
Reemplaza lo siguiente:
VM_NAME
: Es el nombre de la primera VM.PROJECT_ID
: el ID de tu proyecto
En la primera VM, completa los siguientes pasos:
Instala
iperf
.sudo apt-get update && sudo apt-get install iperf
Obtén la dirección IP interna de esta VM. Anótalo para realizar un seguimiento.
ip a
Inicia el servidor de iPerf.
iperf -s
Esto inicia un servidor que escucha las conexiones para realizar la comparativa. Deja esto en ejecución durante el tiempo que finalice la prueba.
Desde una terminal de cliente nueva, conéctate a la segunda VM con SSH.
gcloud compute ssh VM_NAME \ --project=PROJECT_ID
Reemplaza lo siguiente:
VM_NAME
: Es el nombre de la segunda VMPROJECT_ID
: el ID de tu proyecto
En la segunda VM, completa los siguientes pasos:
Instala iPerf.
sudo apt-get update && sudo apt-get install iperf
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
Ejecuta una prueba de 30 segundos y produce un resultado similar al siguiente. Si iPerf no puede acceder a la otra VM, es posible que debas ajustar la red o la configuración de firewall en las VM o tal vez en la consola de Google Cloud.
Cuando uses el ancho de banda máximo disponible de 100 Gbps o 1,000 Gbps (A3), ten en cuenta las siguientes consideraciones:
Debido a la sobrecarga de encabezado para protocolos como Ethernet, IP y TCP en la pila de virtualización, la capacidad de procesamiento (medida por
netperf
) se satura aproximadamente en 90 Gbps u 800 Gbps (A3). Por lo general, se conoce como goodput.El protocolo TCP puede alcanzar una velocidad de red de 100 o 1,000 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 las transmisiones de datos puede ser un poco menor.
Debes usar varias transmisiones de TCP para alcanzar el ancho de banda máximo entre instancias de VM. Google recomienda entre 4 y 16 transmisiones. En 16 flujos, maximizarás con frecuencia la capacidad de procesamiento. Según la aplicación y la pila de software, es posible que debas ajustar la configuración de la aplicación o el código para configurar varias transmisiones.
Próximos pasos
- Para supervisar el rendimiento de la GPU, consulta la página sobre cómo supervisar el rendimiento de las GPU.
- Para controlar el mantenimiento del host de la GPU, consulta la página sobre cómo controlar eventos de mantenimiento del host de la GPU.