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:
- Crea tu VM con GPU con una imagen de SO que admita la NIC virtual de Google (gVNIC).
- 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:
- Consulta el ancho de banda de red máximo disponible de cada tipo de máquina que tenga GPUs conectadas.
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 VMPROJECT_ID
: tu ID de proyectoZONE
: 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
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.
Opcional: En la VM, instala Fast Socket.
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:
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
Instala Fast Socket.
sudo yum install google-fast-socket
Comprueba que Fast Socket esté habilitado.
SLES
Para descargar e instalar Fast Socket en una VM de SLES, sigue estos pasos:
Añade el repositorio de paquetes.
sudo zypper addrepo https://packages.cloud.google.com/yum/repos/google-fast-socket google-fast-socket
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
Instala Fast Socket.
sudo zypper install google-fast-socket
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:
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
Añade 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
Comprueba que Fast Socket esté habilitado.
Verificar que Fast Socket esté habilitado
En tu VM, sigue estos pasos:
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
.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.En 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 ......
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.
Crea dos VMs que puedan admitir las velocidades de ancho de banda necesarias.
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 VMPROJECT_ID
: tu ID de proyecto
En la primera máquina virtual, sigue estos pasos:
Instala
iperf
.sudo apt-get update && sudo apt-get install iperf
Obtén la dirección IP interna de esta VM. Para no olvidarte, anótalo.
ip a
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.
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 VMPROJECT_ID
: tu ID de proyecto
En la segunda VM, sigue estos 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
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
- Para monitorizar el rendimiento de la GPU, consulta Monitorizar el rendimiento de la GPU.
- Para gestionar el mantenimiento del host de GPU, consulta Gestionar eventos de mantenimiento de host de GPU.