Esta página explica cómo crear instancias A2, G2 y N1 que utilizan anchos de banda de red más altos. Para aprender a utilizar anchos de banda de red más altos para otras series de máquinas optimizadas para aceleradores, consulte Crear máquinas GPU de alto ancho de banda .
Puede utilizar 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 sus máquinas virtuales con GPU. Hay anchos de banda de red más altos disponibles para máquinas virtuales A2, G2 y N1 con GPU conectadas en Compute Engine de la siguiente manera:
- Para las máquinas virtuales N1 de uso general que tienen GPU T4 y V100 conectadas, puede obtener un ancho de banda de red máximo de hasta 100 Gbps, según la combinación de GPU y vCPU.
- Para las máquinas virtuales optimizadas para aceleradores A2 y G2, puede obtener un ancho de banda de red máximo de hasta 100 Gbps, según el tipo de máquina.
Para revisar las configuraciones o tipos de máquinas que admiten estas velocidades de ancho de banda de red más altas, consulte Anchos de banda de red y GPU .
Para obtener información general sobre el ancho de banda de la red en Compute Engine, consulte Ancho de banda de la red .
Descripción general
Para utilizar los anchos de banda de red más altos disponibles para cada máquina virtual con GPU, complete los siguientes pasos recomendados:
- Cree su máquina virtual GPU utilizando una imagen de sistema operativo que admita Google Virtual NIC (gVNIC).
- Opcional: Instalar Fast Socket . Fast Socket mejora el rendimiento de NCCL en redes de 100 Gbps o más al reducir la contención entre múltiples conexiones TCP. Algunas imágenes de VM de aprendizaje profundo (DLVM) tienen Fast Socket preinstalado.
Utilice imágenes de VM de aprendizaje profundo
Puede crear sus máquinas virtuales utilizando cualquier imagen compatible con GPU del proyecto Imágenes de máquinas virtuales de aprendizaje profundo. Todas las imágenes DLVM compatibles con GPU tienen preinstalados el controlador de GPU, el software ML y gVNIC. Para obtener una lista de imágenes DLVM, consulte Elegir una imagen .
Si desea utilizar Fast Socket, puede elegir una imagen DLVM como: tf-latest-gpu-debian-10
o tf-latest-gpu-ubuntu-1804
.
Cree máquinas virtuales que utilicen anchos de banda de red más altos
Para anchos de banda de red más altos, se recomienda habilitar Google Virtual NIC (gVNIC). Para obtener más información, consulte Uso de la NIC virtual de Google .
Para crear una máquina virtual que tenga GPU conectadas y un mayor ancho de banda de red, complete lo siguiente:
- Revise el ancho de banda de red máximo disponible para cada tipo de máquina que tenga GPU conectadas.
Cree su máquina virtual GPU. Los siguientes ejemplos muestran cómo crear A2 y N1 con máquinas virtuales V100 conectadas.
En estos ejemplos, las máquinas virtuales se crean mediante la CLI de Google Cloud. Sin embargo, también puedes usar la consola de Google Cloud o la API de Compute Engine para crear estas máquinas virtuales. Para obtener más información sobre la creación de máquinas virtuales con GPU, consulte Crear una máquina virtual con GPU conectadas .
A2 (A100)
Por ejemplo, para crear una máquina virtual que tenga un ancho de banda máximo de 100 Gbps, tenga ocho GPU A100 conectadas y utilice la imagen DLVM
tf-latest-gpu
, ejecute 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
Reemplace lo siguiente:
-
VM_NAME
: el nombre de tu VM -
PROJECT_ID
: ID de tu proyecto -
ZONE
: la zona para la VM. Esta zona debe admitir el tipo de GPU especificado. Para obtener más información sobre las zonas, consulte Disponibilidad de zonas y regiones de GPU .
N1 (V100)
Por ejemplo, para crear una máquina virtual que tenga un ancho de banda máximo de 100 Gbps, tenga ocho GPU V100 conectadas y utilice la imagen DLVM
tf-latest-gpu
, ejecute 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 está utilizando imágenes de máquinas virtuales de aprendizaje profundo compatibles con GPU o un sistema operativo optimizado para contenedores, instale los controladores de GPU. Para obtener más información, consulte Instalación de controladores de GPU .
Opcional: en la máquina virtual, instale Fast Socket .
Después de configurar la VM, puede verificar el ancho de banda de la red .
Instalar enchufe rápido
La biblioteca de comunicaciones colectivas de NVIDIA (NCCL) es utilizada por marcos de aprendizaje profundo como TensorFlow, PyTorch, Horovod para el entrenamiento de múltiples GPU y múltiples 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 al reducir la contención entre múltiples conexiones TCP. Para obtener más información sobre cómo trabajar con NCCL, consulte la guía del usuario de NCCL .
La evaluación actual muestra que Fast Socket mejora el rendimiento total entre un 30% y un 60%, según el tamaño del mensaje.
Para configurar un entorno Fast Socket, puede utilizar imágenes de VM de aprendizaje profundo que tengan Fast Socket preinstalado o puede instalar Fast Socket manualmente en una VM Linux. Para comprobar si Fast Socket está preinstalado, consulte Verificación de que Fast Socket esté habilitado .
Antes de instalar Fast Socket en una máquina virtual Linux, debe instalar NCCL. Para obtener instrucciones detalladas, consulte la documentación de NVIDIA NCCL .
CentOS/RHEL
Para descargar e instalar Fast Socket en una máquina virtual CentOS o RHEL, complete los siguientes pasos:
Agregue el repositorio de paquetes e importe 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
Instale el enchufe rápido.
sudo yum install google-fast-socket
Verifique que Fast Socket esté habilitado .
LES
Para descargar e instalar Fast Socket en una máquina virtual SLES, complete los siguientes pasos:
Agregue el repositorio de paquetes.
sudo zypper addrepo https://packages.cloud.google.com/yum/repos/google-fast-socket google-fast-socket
Agregue 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
Instale el enchufe rápido.
sudo zypper install google-fast-socket
Verifique que Fast Socket esté habilitado .
Debian/Ubuntu
Para descargar e instalar Fast Socket en una máquina virtual Debian o Ubuntu, complete los siguientes pasos:
Agregue 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
Agregue claves de repositorio.
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Instale el enchufe rápido.
sudo apt update && sudo apt install google-fast-socket
Verifique que Fast Socket esté habilitado .
Verificando que Fast Socket esté habilitado
En su VM, complete los siguientes pasos:
Localice el directorio de inicio de NCCL.
sudo ldconfig -p | grep nccl
Por ejemplo, en una imagen DLVM, obtiene 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 de inicio de NCCL es
/usr/local/nccl2
.Compruebe que NCCL cargue el complemento Fast Socket. Para comprobarlo, debe descargar el paquete de prueba NCCL. Para descargar el paquete de prueba, ejecute el siguiente comando:
git clone https://github.com/NVIDIA/nccl-tests.git && \ cd nccl-tests && make NCCL_HOME=NCCL_HOME_DIRECTORY
Reemplace
NCCL_HOME_DIRECTORY
con el directorio de inicio de NCCL.Desde el directorio
nccl-tests
, ejecute 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
Esta sección explica cómo verificar el ancho de banda de la red para instancias A3 Mega, A3 High, A3 Edge, A2, G2 y N1. Cuando trabaje con GPU de gran ancho de banda, puede utilizar una herramienta de tráfico de red, como iperf2, para medir el ancho de banda de la red.
Para comprobar las velocidades del ancho de banda, necesita al menos dos máquinas virtuales que tengan GPU conectadas y que ambas puedan admitir la velocidad del ancho de banda que está probando.
Utilice iPerf para realizar pruebas comparativas en sistemas basados en Debian.
Cree dos máquinas virtuales que puedan admitir las velocidades de ancho de banda requeridas.
Una vez que ambas máquinas virtuales se estén ejecutando, use SSH para conectarse a una de las máquinas virtuales.
gcloud compute ssh VM_NAME \ --project=PROJECT_ID
Reemplace lo siguiente:
-
VM_NAME
: el nombre de la primera VM -
PROJECT_ID
: ID de tu proyecto
-
En la primera máquina virtual, complete los siguientes pasos:
Instalar
iperf
.sudo apt-get update && sudo apt-get install iperf
Obtenga la dirección IP interna de esta VM. Mantén un seguimiento anótelo.
ip a
Inicie el servidor iPerf.
iperf -s
Esto inicia un servidor que escucha las conexiones para realizar la prueba comparativa. Deje esto funcionando mientras dure la prueba.
Desde una nueva terminal de cliente, conéctese a la segunda VM mediante SSH.
gcloud compute ssh VM_NAME \ --project=PROJECT_ID
Reemplace lo siguiente:
-
VM_NAME
: el nombre de la segunda VM -
PROJECT_ID
: ID de tu proyecto
-
En la segunda máquina virtual, complete los siguientes pasos:
Instale iPerf.
sudo apt-get update && sudo apt-get install iperf
Ejecute la prueba iperf y especifique la dirección IP de la primera máquina virtual como destino.
iperf -t 30 -c internal_ip_of_instance_1 -P 16
Esto ejecuta una prueba de 30 segundos y produce un resultado similar al siguiente. Si iPerf no puede comunicarse con la otra máquina virtual, es posible que deba ajustar la configuración de red o firewall en las máquinas virtuales o quizás en la consola de Google Cloud.
Cuando utilice el ancho de banda máximo disponible de 100 Gbps o 1000 Gbps (A3 Mega, A3 High o A3 Edge), tenga en cuenta las siguientes consideraciones:
Debido a los gastos generales de encabezado de paquetes para protocolos de red como Ethernet, IP y TCP en la pila de virtualización, el rendimiento, medido por
netperf
, se satura en alrededor de 90 Gbps u 800 Gbps (A3 Mega, A3 High o A3 Edge). Generalmente conocido como goodput .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 un extremo a otro de los flujos de datos puede ser ligeramente inferior.
Debe utilizar varios flujos TCP para lograr el máximo ancho de banda entre instancias de VM. Google recomienda de 4 a 16 transmisiones. Con 16 flujos, frecuentemente maximizará el rendimiento. Dependiendo de su aplicación y pila de software, es posible que necesite ajustar la configuración de su aplicación o su código para configurar múltiples transmisiones.
¿Qué sigue?
- Para monitorear el rendimiento de la GPU, consulte Monitoreo del rendimiento de la GPU .
- Para gestionar el mantenimiento del host de GPU, consulte Manejo de eventos de mantenimiento del host de GPU .