Crea una instancia A3 Mega, A3 High o A3 Edge con GPUDirect habilitado

En este documento, se describe la configuración de instancias de máquinas virtuales (VM) A3 Mega, A3 High o A3 Edge que tienen ocho GPUs NVIDIA H100 conectadas y usan cualquiera de las siguientes tecnologías de GPUDirect: GPUDirect-TCPX o GPUDirect-TCPXO. Para crear una instancia de A3 High con menos de 8 GPUs, consulta Crea una instancia de A3 High o A2.

La tecnología GPUDirect que usas depende del tipo de máquina A3 que selecciones.

  • GPUDirect-TCPXO: Es una pila de redes descargada similar a RDMA que se admite en los tipos de máquinas A3 Mega (a3-megagpu-8g) que tienen ocho GPUs H100.
  • GPUDirect-TCPX: Es una versión optimizada de TCP invitado que proporciona una latencia más baja y es compatible con los tipos de máquinas A3 High (a3-highgpu-8g) y A3 Edge (a3-edgegpu-8g) que tienen ocho GPUs H100.

La serie de máquinas con optimización de acelerador A3 tiene 208 CPU virtuales y hasta 1, 872 GB de memoria. Los tipos de máquinas a3-megagpu-8g, a3-highgpu-8g y a3-edgegpu-8g ofrecen 80 GB de memoria de GPU por GPU. Estos tipos de máquinas pueden obtener hasta 1,800 Gbps de ancho de banda de red, lo que los hace ideales para modelos de lenguaje grandes basados en transformadores, bases de datos y computación de alto rendimiento (HPC).

Tanto GPUDirect-TCPX como GPUDirect-TCPXO usan la tecnología NVIDIA GPUDirect para aumentar el rendimiento y reducir la latencia de tus VMs A3. Esto se logra permitiendo que las cargas útiles de los paquetes de datos se transfieran directamente de la memoria de GPU a la interfaz de red, lo que omite la CPU y la memoria del sistema. Esta es una forma de acceso directo a la memoria remota (RDMA). Cuando se combinan con la NIC virtual de Google (gVNIC), las VMs A3 pueden ofrecer la mayor capacidad de procesamiento entre las VMs en un clúster en comparación con los tipos de máquinas optimizados para aceleradores A2 o G2 de la generación anterior.

En este documento, se describe cómo crear una VM A3 Mega, A3 High o A3 Edge y habilitar GPUDirect-TCPX o GPUDirect-TCPXO para probar el rendimiento mejorado de la red de GPU.

Antes de comenzar

  • Para revisar las limitaciones y los pasos de requisitos previos adicionales para crear instancias con GPU conectadas, como seleccionar una imagen de SO y verificar la cuota de GPU, consulta la Descripción general de la creación de una instancia con GPU conectadas.
  • Si aún no lo hiciste, configura la autenticación. La autenticación verifica tu identidad para acceder a los servicios y las APIs de Google Cloud . Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:
    1. Instala Google Cloud CLI. Después de instalarla, inicializa Google Cloud CLI ejecutando el siguiente comando:

      gcloud init

      Si usas un proveedor de identidad (IdP) externo, primero debes Acceder a gcloud CLI con tu identidad federada.

    2. Set a default region and zone.

Roles obligatorios

Para obtener los permisos que necesitas para crear VMs, pídele a tu administrador que te otorgue el rol de IAM Administrador de instancias de Compute (v1) (roles/compute.instanceAdmin.v1) en el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para crear VM. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para crear VM:

  • compute.instances.create en el proyecto
  • Si deseas usar una imagen personalizada para crear la VM, sigue estos pasos: compute.images.useReadOnly en la imagen
  • Para usar una instantánea a fin de crear la VM, haz lo siguiente: compute.snapshots.useReadOnly en la instantánea
  • Si quieres usar una plantilla de instancias para crear la VM, sigue estos pasos: compute.instanceTemplates.useReadOnly en la plantilla de instancias
  • A fin de especificar una subred para tu VM: compute.subnetworks.use en el proyecto o en la subred elegida
  • Si deseas especificar una dirección IP estática para la VM: compute.addresses.use en el proyecto
  • Para asignar una dirección IP externa a la VM cuando se usa una red de VPC, compute.subnetworks.useExternalIp en el proyecto o en la subred elegida.
  • Para asignar una red heredada a la VM, ejecuta compute.networks.use en el proyecto.
  • Para asignar una dirección IP externa a la VM cuando se usa una red heredada, ejecuta compute.networks.useExternalIp en el proyecto
  • Para configurar los metadatos de la instancia de VM para la VM, compute.instances.setMetadata en el proyecto.
  • Para configurar etiquetas en la VM, haz lo siguiente: compute.instances.setTags en la VM
  • Para configurar etiquetas en la VM, haz lo siguiente: compute.instances.setLabels en la VM
  • A fin de configurar una cuenta de servicio para que la VM use: compute.instances.setServiceAccount en la VM
  • Crear un disco nuevo para la VM: compute.disks.create en el proyecto
  • Para conectar un disco existente en modo de solo lectura o de lectura y escritura, usa compute.disks.use en el disco.
  • Para conectar un disco existente en modo de solo lectura, haz lo siguiente: compute.disks.useReadOnly en el disco

También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.

Descripción general

Para probar el rendimiento de la red con GPUDirect, completa los siguientes pasos:

  1. Configura una o más redes de nube privada virtual (VPC) que tengan una MTU grande configurada.
  2. Crea tu instancia de GPU.

Configura redes de VPC

Para habilitar la comunicación eficiente de tus VMs con GPU, debes crear una red de administración y una o más redes de datos. La red de administración se usa para el acceso externo, por ejemplo, SSH, y para la mayoría de las comunicaciones de red generales. Las redes de datos se usan para la comunicación de alto rendimiento entre las GPUs de diferentes VMs, por ejemplo, para el tráfico de acceso directo a la memoria remoto (RDMA).

Para estas redes de VPC, te recomendamos que establezcas la unidad de transmisión máxima (MTU) en un valor mayor. Los valores de MTU más altos aumentan el tamaño del paquete y reducen la sobrecarga del encabezado del paquete, lo que aumenta la capacidad de procesamiento de los datos de carga útil. Para obtener más información sobre cómo crear redes de VPC, consulta Crea y verifica una red MTU de marcos jumbo.

Crea una red de administración, subred y regla de firewall

Completa los siguientes pasos para configurar la red de administración:

  1. Crea la red de administración con el comando networks create:

    gcloud compute networks create NETWORK_NAME_PREFIX-mgmt-net \
        --project=PROJECT_ID \
        --subnet-mode=custom \
        --mtu=8244
    
  2. Crea la subred de administración con el comando networks subnets create:

    gcloud compute networks subnets create NETWORK_NAME_PREFIX-mgmt-sub \
        --project=PROJECT_ID \
        --network=NETWORK_NAME_PREFIX-mgmt-net \
        --region=REGION \
        --range=192.168.0.0/24
    
  3. Crea reglas de firewall con el comando firewall-rules create.

    1. Crea una regla de firewall para la red de administración.

      gcloud compute firewall-rules create NETWORK_NAME_PREFIX-mgmt-internal \
          --project=PROJECT_ID \
          --network=NETWORK_NAME_PREFIX-mgmt-net \
          --action=ALLOW \
          --rules=tcp:0-65535,udp:0-65535,icmp \
          --source-ranges=192.168.0.0/16
      
    2. Crea la regla de firewall tcp:22 para limitar las direcciones IP de origen que pueden conectarse a la VM mediante SSH.

      gcloud compute firewall-rules create NETWORK_NAME_PREFIX-mgmt-external-ssh \
          --project=PROJECT_ID \
          --network=NETWORK_NAME_PREFIX-mgmt-net \
          --action=ALLOW \
          --rules=tcp:22 \
          --source-ranges=SSH_SOURCE_IP_RANGE
      
    3. Crea la regla de firewall icmp que se puede usar para verificar si hay problemas de transmisión de datos en la red.

      gcloud compute firewall-rules create NETWORK_NAME_PREFIX-mgmt-external-ping \
          --project=PROJECT_ID \
          --network=NETWORK_NAME_PREFIX-mgmt-net \
          --action=ALLOW \
          --rules=icmp \
          --source-ranges=0.0.0.0/0
      

Reemplaza lo siguiente:

  • NETWORK_NAME_PREFIX: Es el prefijo del nombre que se usará para las subredes y las redes de VPC.
  • PROJECT_ID: El ID de tu proyecto
  • REGION: Es la región en la que deseas crear las redes.
  • SSH_SOURCE_IP_RANGE: el rango de IP en formato CIDR. Esto especifica qué direcciones IP de origen pueden conectarse a tu VM mediante SSH.

Crea redes de datos, subredes y reglas de firewall

La cantidad de redes de datos varía según el tipo de máquina con GPU que crees.

A3 Mega

A3 Mega requiere ocho redes de datos. Usa el siguiente comando para crear ocho redes de datos, cada una con subredes y reglas de firewall.

for N in $(seq 1 8); do
gcloud compute networks create NETWORK_NAME_PREFIX-data-net-$N \
    --project=PROJECT_ID \
    --subnet-mode=custom \
    --mtu=8244

gcloud compute networks subnets create NETWORK_NAME_PREFIX-data-sub-$N \
    --project=PROJECT_ID \
    --network=NETWORK_NAME_PREFIX-data-net-$N \
    --region=REGION \
    --range=192.168.$N.0/24

gcloud compute firewall-rules create NETWORK_NAME_PREFIX-data-internal-$N \
    --project=PROJECT_ID \
    --network=NETWORK_NAME_PREFIX-data-net-$N \
    --action=ALLOW \
    --rules=tcp:0-65535,udp:0-65535,icmp \
    --source-ranges=192.168.0.0/16
done

A3 High y A3 Edge

Las versiones A3 High y A3 Edge requieren cuatro redes de datos. Usa el siguiente comando para crear cuatro redes de datos, cada una con subredes y reglas de firewall.

for N in $(seq 1 4); do
gcloud compute networks create NETWORK_NAME_PREFIX-data-net-$N \
    --project=PROJECT_ID \
    --subnet-mode=custom \
    --mtu=8244

gcloud compute networks subnets create NETWORK_NAME_PREFIX-data-sub-$N \
    --project=PROJECT_ID \
    --network=NETWORK_NAME_PREFIX-data-net-$N \
    --region=REGION \
    --range=192.168.$N.0/24

gcloud compute firewall-rules create NETWORK_NAME_PREFIX-data-internal-$N \
    --project=PROJECT_ID \
    --network=NETWORK_NAME_PREFIX-data-net-$N \
    --action=ALLOW \
    --rules=tcp:0-65535,udp:0-65535,icmp \
    --source-ranges=192.168.0.0/16
done

Crea instancias de A3 Mega (GPUDirect-TCPXO)

Crea tus instancias A3 Mega con la imagen de Container-Optimized OS cos-121-lts o posterior.

COS

Para probar el rendimiento de la red con GPUDirect-TCPXO, crea al menos dos instancias de VM A3 Mega. Crea cada VM con la imagen de Container-Optimized OS cos-121-lts o posterior y especifica las redes de VPC que creaste en el paso anterior.

Las VMs A3 Mega requieren nueve interfaces de red de NIC virtual de Google (gVNIC), una para la red de administración y ocho para las redes de datos.

Según el modelo de aprovisionamiento que deseas usar para crear tu VM, selecciona una de las siguientes opciones:

Estándar

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=a3-megagpu-8g \
    --maintenance-policy=TERMINATE \
    --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address

Reemplaza lo siguiente:

  • VM_NAME por el nombre de tu instancia de VM.
  • PROJECT_ID: el ID de tu proyecto.
  • ZONE: Una zona que admite tu tipo de máquina.
  • BOOT_DISK_SIZE: Es el tamaño del disco de arranque en GB (por ejemplo, 50).
  • NETWORK_NAME_PREFIX: Es el prefijo del nombre que se usará para las subredes y las redes de VPC.

Spot

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=a3-megagpu-8g \
    --maintenance-policy=TERMINATE \
    --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address \
    --provisioning-model=SPOT \
    --instance-termination-action=TERMINATION_ACTION

Reemplaza lo siguiente:

  • VM_NAME por el nombre de tu instancia de VM.
  • PROJECT_ID: el ID de tu proyecto.
  • ZONE: Una zona que admite tu tipo de máquina.
  • BOOT_DISK_SIZE: Es el tamaño del disco de arranque en GB (por ejemplo, 50).
  • NETWORK_NAME_PREFIX: Es el prefijo del nombre que se usará para las subredes y las redes de VPC.
  • TERMINATION_ACTION: Indica si se debe detener o borrar la VM cuando se interrumpa. Especifica uno de los siguientes valores:
    • Para detener la VM, haz lo siguiente: STOP
    • Para borrar la VM, haz lo siguiente: DELETE

Inicio flexible

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=a3-megagpu-8g \
    --maintenance-policy=TERMINATE \
    --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address \
    --provisioning-model=FLEX_START \
    --instance-termination-action=TERMINATION_ACTION \
    --max-run-duration=RUN_DURATION \
    --request-valid-for-duration=VALID_FOR_DURATION \
    --reservation-affinity=none

Reemplaza lo siguiente:

  • VM_NAME por el nombre de tu instancia de VM.
  • PROJECT_ID: el ID de tu proyecto.
  • ZONE: Una zona que admite tu tipo de máquina.
  • BOOT_DISK_SIZE: Es el tamaño del disco de arranque en GB (por ejemplo, 50).
  • NETWORK_NAME_PREFIX: Es el prefijo del nombre que se usará para las subredes y las redes de VPC.
  • TERMINATION_ACTION: Indica si se debe detener o borrar la VM al final de su duración de ejecución. Especifica uno de los siguientes valores:
    • Para detener la VM, haz lo siguiente: STOP
    • Para borrar la VM, haz lo siguiente: DELETE
  • RUN_DURATION: Es el tiempo máximo que se ejecuta la VM antes de que Compute Engine la detenga o la borre. Debes darle formato al valor como la cantidad de días, horas, minutos o segundos, seguidos de d, h, m y s, respectivamente. Por ejemplo, un valor de 30m define un tiempo de 30 minutos, y un valor de 1h2m3s define un tiempo de una hora, dos minutos y tres segundos. Puedes especificar un valor entre 10 minutos y siete días.
  • VALID_FOR_DURATION: Es el tiempo máximo que se debe esperar para aprovisionar los recursos solicitados. Debes darle formato al valor como la cantidad de días, horas, minutos o segundos, seguidos de d, h, m y s, respectivamente. Según los requisitos zonales de tu carga de trabajo, especifica una de las siguientes duraciones para aumentar las probabilidades de que se complete tu solicitud de creación de VM:
    • Si tu carga de trabajo requiere que crees la VM en una zona específica, especifica una duración entre 90 segundos (90s) y dos horas (2h). Las duraciones más largas te brindan más posibilidades de obtener recursos.
    • Si la VM puede ejecutarse en cualquier zona de la región, especifica una duración de cero segundos (0s). Este valor especifica que Compute Engine solo asigna recursos si están disponibles de inmediato. Si la solicitud de creación falla porque los recursos no están disponibles, vuelve a intentarlo en otra zona.

Con reserva

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=a3-megagpu-8g \
    --maintenance-policy=TERMINATE \
    --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address \
    --provisioning-model=RESERVATION_BOUND \
    --instance-termination-action=TERMINATION_ACTION \
    --reservation-affinity=specific \
    --reservation=RESERVATION_URL

Reemplaza lo siguiente:

  • VM_NAME por el nombre de tu instancia de VM.
  • PROJECT_ID: el ID de tu proyecto.
  • ZONE: Una zona que admite tu tipo de máquina.
  • BOOT_DISK_SIZE: Es el tamaño del disco de arranque en GB (por ejemplo, 50).
  • NETWORK_NAME_PREFIX: Es el prefijo del nombre que se usará para las subredes y las redes de VPC.
  • TERMINATION_ACTION: Indica si se debe detener o borrar la VM al final del período de reserva. Especifica uno de los siguientes valores:
    • Para detener la VM, haz lo siguiente: STOP
    • Para borrar la VM, haz lo siguiente: DELETE
  • RESERVATION_URL: Es la URL de la reserva que deseas consumir. Especifica uno de los siguientes valores:
    • Si creaste la reserva en el mismo proyecto, haz lo siguiente: example-reservation
    • Si la reserva está en otro proyecto y tu proyecto puede usarla, ingresa projects/PROJECT_ID/reservations/example-reservation.

Instalar los controladores de GPU.

En cada VM de A3 Mega, instala los controladores de GPU.

  1. Instala los controladores de GPU de NVIDIA.

    sudo cos-extensions install gpu -- --version=latest
    
  2. Vuelve a montar la ruta.

    sudo mount --bind /var/lib/nvidia /var/lib/nvidia
    sudo mount -o remount,exec /var/lib/nvidia
    

Otorga a las NIC acceso a las GPU

En cada VM de A3 Mega, otorga a las NIC acceso a las GPU.

  1. Ajusta la configuración del firewall para aceptar todas las conexiones TCP entrantes y habilitar la comunicación entre los nodos de tu clúster:
    sudo /sbin/iptables -I INPUT -p tcp -m tcp -j ACCEPT
  2. Configura el módulo dmabuf. Carga el módulo import-helper, que forma parte del framework dmabuf. Este framework permite el uso compartido de memoria de alta velocidad y sin copias entre la GPU y la tarjeta de interfaz de red (NIC), un componente fundamental para la tecnología GPUDirect:
    sudo modprobe import-helper
  3. Configura Docker para autenticar solicitudes en Artifact Registry.
    docker-credential-gcr configure-docker --registries us-docker.pkg.dev
  4. Inicia RxDM en el contenedor. RxDM es un servicio de administración que se ejecuta junto con la aplicación de GPU para administrar la memoria de GPU. Este servicio preasigna y administra la memoria de la GPU para el tráfico de red entrante, lo que es un elemento clave de la tecnología GPUDirect y esencial para las redes de alto rendimiento. Inicia un contenedor de Docker llamado rxdm:
    docker run --pull=always --rm --detach --name rxdm \
        --network=host  --cap-add=NET_ADMIN  \
        --privileged \
        --volume /var/lib/nvidia:/usr/local/nvidia \
        --device /dev/nvidia0:/dev/nvidia0 \
        --device /dev/nvidia1:/dev/nvidia1 \
        --device /dev/nvidia2:/dev/nvidia2 \
        --device /dev/nvidia3:/dev/nvidia3 \
        --device /dev/nvidia4:/dev/nvidia4 \
        --device /dev/nvidia5:/dev/nvidia5 \
        --device /dev/nvidia6:/dev/nvidia6 \
        --device /dev/nvidia7:/dev/nvidia7 \
        --device /dev/nvidia-uvm:/dev/nvidia-uvm \
        --device /dev/nvidiactl:/dev/nvidiactl \
        --device /dev/dmabuf_import_helper:/dev/dmabuf_import_helper \
        --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64 \
        us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/tcpgpudmarxd-dev:v1.0.19 \
        --num_hops=2 --num_nics=8

    Para verificar que RxDM se haya iniciado correctamente, ejecuta el comando. Espera a que aparezca el mensaje "Buffer manager initialization complete" para confirmar que la inicialización de RxDM se realizó correctamente.

    docker container logs --follow  rxdm

    Como alternativa, consulta el registro de finalización de la inicialización de RxDM.

    docker container logs rxdm 2>&1 | grep "Buffer manager initialization complete"

Configura el entorno de NCCL

En cada VM A3 Mega, completa los siguientes pasos:

  1. Instala la biblioteca nccl-net, un complemento para NCCL que habilita la comunicación de GPUDirect a través de la red.El siguiente comando extrae la imagen del instalador y, luego, instala los archivos de biblioteca necesarios en /var/lib/tcpxo/lib64/.
    NCCL_NET_IMAGE="us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/nccl-plugin-gpudirecttcpx-dev:v1.0.13-1"
    
    docker run --pull=always --rm --privileged \
        --network=host --cap-add=NET_ADMIN \
        --volume /var/lib/nvidia:/usr/local/nvidia  \
        --volume /var/lib:/var/lib \
        --device /dev/nvidia0:/dev/nvidia0   \
        --device /dev/nvidia1:/dev/nvidia1  \
        --device /dev/nvidia2:/dev/nvidia2  \
        --device /dev/nvidia3:/dev/nvidia3  \
        --device /dev/nvidia4:/dev/nvidia4  \
        --device /dev/nvidia5:/dev/nvidia5  \
        --device /dev/nvidia6:/dev/nvidia6  \
        --device /dev/nvidia7:/dev/nvidia7  \
        --device /dev/nvidia-uvm:/dev/nvidia-uvm  \
        --device /dev/nvidiactl:/dev/nvidiactl  \
        --device /dev/dmabuf_import_helper:/dev/dmabuf_import_helper  \
        --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/var/lib/tcpxo/lib64 \
        ${NCCL_NET_IMAGE} install  --install-nccl
    
    sudo mount --bind /var/lib/tcpxo /var/lib/tcpxo && sudo mount -o remount,exec /var/lib/tcpxo
    
  2. Inicia un contenedor dedicado nccl-tests para las pruebas de NCCL. Este contenedor viene preconfigurado con las herramientas y los lenguajes de utilidad necesarios, lo que garantiza un entorno limpio y coherente para verificar el rendimiento de la configuración de GPUDirect.

    Este comando reutiliza la variable NCCL_NET_IMAGE que estableciste en el paso anterior.

    docker run --pull=always --rm --detach --name nccl \
        --network=host --cap-add=NET_ADMIN \
        --privileged \
        --volume /var/lib/nvidia:/usr/local/nvidia  \
        --volume /var/lib/tcpxo:/var/lib/tcpxo \
        --shm-size=8g \
        --device /dev/nvidia0:/dev/nvidia0 \
        --device /dev/nvidia1:/dev/nvidia1 \
        --device /dev/nvidia2:/dev/nvidia2 \
        --device /dev/nvidia3:/dev/nvidia3 \
        --device /dev/nvidia4:/dev/nvidia4 \
        --device /dev/nvidia5:/dev/nvidia5 \
        --device /dev/nvidia6:/dev/nvidia6 \
        --device /dev/nvidia7:/dev/nvidia7 \
        --device /dev/nvidia-uvm:/dev/nvidia-uvm \
        --device /dev/nvidiactl:/dev/nvidiactl \
        --device /dev/dmabuf_import_helper:/dev/dmabuf_import_helper \
        --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/var/lib/tcpxo/lib64 \
        ${NCCL_NET_IMAGE} daemon

Ejecuta la comparativa de nccl-tests

Para ejecutar la comparativa de nccl-tests en una sola VM A3 Mega, completa los siguientes pasos:

  1. Abre una shell de Bash interactiva dentro del contenedor nccl-tests.
    docker exec -it nccl bash
  2. Desde el shell de bash del contenedor nccl-tests, completa los siguientes pasos.

    1. Configura el entorno para una ejecución de varios nodos configurando SSH y generando archivos de host. Reemplaza VM_NAME_1 y VM_NAME_2 por los nombres de cada VM.
      /scripts/init_ssh.sh VM_NAME_1 VM_NAME_2
      /scripts/gen_hostfiles.sh VM_NAME_1 VM_NAME_2
        

      Esto crea un directorio llamado /scripts/hostfiles2.

    2. Ejecuta la comparativa all_gather_perf para medir el rendimiento colectivo de la comunicación:
      /scripts/run-nccl-tcpxo.sh all_gather_perf "${LD_LIBRARY_PATH}" 8 eth1,eth2,eth3,eth4,eth5,eth6,eth7,eth8 1M 512M 3 2 10 8 2 10

Crea instancias de A3 High y Edge (GPUDirect-TCPX)

Crea tus instancias de A3 High y Edge con la imagen de Container-Optimized OS cos-121-lts o posterior.

COS

Para probar el rendimiento de la red con GPUDirect-TCPX, debes crear al menos dos VMs A3 High o Edge. Crea cada VM con la imagen de Container-Optimized OS cos-121-lts o posterior y especifica las redes de VPC que creaste en el paso anterior.

Las VMs deben usar la interfaz de red de NIC virtual de Google (gVNIC). Para las VMs de A3 High o Edge, debes usar la versión 1.4.0rc3 o una posterior del controlador gVNIC. Esta versión del controlador está disponible en Container-Optimized OS. La primera NIC virtual se usa como la principal para las redes y el almacenamiento generales, las otras cuatro NIC virtuales están alineadas con NUMA y dos de las ocho GPU usan el mismo interruptor de PCIe.

Según el modelo de aprovisionamiento que deseas usar para crear tu VM, selecciona una de las siguientes opciones:

Estándar

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address

Reemplaza lo siguiente:

  • VM_NAME: El nombre de tu VM.
  • PROJECT_ID: el ID de tu proyecto.
  • ZONE: Una zona que admite tu tipo de máquina.
  • MACHINE_TYPE: Es el tipo de máquina de la VM. Especifica a3-highgpu-8g o a3-edgegpu-8g.
  • BOOT_DISK_SIZE: Es el tamaño del disco de arranque en GB (por ejemplo, 50).
  • NETWORK_NAME_PREFIX: Es el prefijo del nombre que se usará para las subredes y las redes de VPC.

Spot

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --provisioning-model=SPOT \
    --instance-termination-action=TERMINATION_ACTION

Reemplaza lo siguiente:

  • VM_NAME: El nombre de tu VM.
  • PROJECT_ID: el ID de tu proyecto.
  • ZONE: Una zona que admite tu tipo de máquina.
  • MACHINE_TYPE: Es el tipo de máquina de la VM. Especifica a3-highgpu-8g o a3-edgegpu-8g.
  • BOOT_DISK_SIZE: Es el tamaño del disco de arranque en GB (por ejemplo, 50).
  • NETWORK_NAME_PREFIX: Es el prefijo del nombre que se usará para las subredes y las redes de VPC.
  • TERMINATION_ACTION: Indica si se debe detener o borrar la VM cuando se interrumpa. Especifica uno de los siguientes valores:
    • Para detener la VM, haz lo siguiente: STOP
    • Para borrar la VM, haz lo siguiente: DELETE

Inicio flexible

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --provisioning-model=FLEX_START \
    --instance-termination-action=TERMINATION_ACTION \
    --max-run-duration=RUN_DURATION \
    --request-valid-for-duration=VALID_FOR_DURATION \
    --reservation-affinity=none

Reemplaza lo siguiente:

  • VM_NAME: El nombre de tu VM.
  • PROJECT_ID: el ID de tu proyecto.
  • ZONE: Una zona que admite tu tipo de máquina.
  • MACHINE_TYPE: Es el tipo de máquina de la VM. Especifica a3-highgpu-8g o a3-edgegpu-8g.
  • BOOT_DISK_SIZE: Es el tamaño del disco de arranque en GB (por ejemplo, 50).
  • NETWORK_NAME_PREFIX: Es el prefijo del nombre que se usará para las subredes y las redes de VPC.
  • TERMINATION_ACTION: Indica si se debe detener o borrar la VM al final de su duración de ejecución. Especifica uno de los siguientes valores:
    • Para detener la VM, haz lo siguiente: STOP
    • Para borrar la VM, haz lo siguiente: DELETE
  • RUN_DURATION: Es el tiempo máximo que se ejecuta la VM antes de que Compute Engine la detenga o la borre. Debes darle formato al valor como la cantidad de días, horas, minutos o segundos, seguidos de d, h, m y s, respectivamente. Por ejemplo, un valor de 30m define un tiempo de 30 minutos, y un valor de 1h2m3s define un tiempo de una hora, dos minutos y tres segundos. Puedes especificar un valor entre 10 minutos y siete días.
  • VALID_FOR_DURATION: Es el tiempo máximo que se debe esperar para aprovisionar los recursos solicitados. Debes darle formato al valor como la cantidad de días, horas, minutos o segundos, seguidos de d, h, m y s, respectivamente. Según los requisitos zonales de tu carga de trabajo, especifica una de las siguientes duraciones para aumentar las probabilidades de que se complete tu solicitud de creación de VM:
    • Si tu carga de trabajo requiere que crees la VM en una zona específica, especifica una duración entre 90 segundos (90s) y dos horas (2h). Las duraciones más largas te brindan más posibilidades de obtener recursos.
    • Si la VM puede ejecutarse en cualquier zona de la región, especifica una duración de cero segundos (0s). Este valor especifica que Compute Engine solo asigna recursos si están disponibles de inmediato. Si la solicitud de creación falla porque los recursos no están disponibles, vuelve a intentarlo en otra zona.

Con reserva

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --provisioning-model=RESERVATION_BOUND \
    --instance-termination-action=TERMINATION_ACTION \
    --reservation-affinity=specific \
    --reservation=RESERVATION_URL

Reemplaza lo siguiente:

  • VM_NAME: El nombre de tu VM.
  • PROJECT_ID: el ID de tu proyecto.
  • ZONE: Una zona que admite tu tipo de máquina.
  • MACHINE_TYPE: Es el tipo de máquina de la VM. Especifica a3-highgpu-8g o a3-edgegpu-8g.
  • BOOT_DISK_SIZE: Es el tamaño del disco de arranque en GB (por ejemplo, 50).
  • NETWORK_NAME_PREFIX: Es el prefijo del nombre que se usará para las subredes y las redes de VPC.
  • TERMINATION_ACTION: Indica si se debe detener o borrar la VM al final del período de reserva. Especifica uno de los siguientes valores:
    • Para detener la VM, haz lo siguiente: STOP
    • Para borrar la VM, haz lo siguiente: DELETE
  • RESERVATION_URL: Es la URL de la reserva que deseas consumir. Especifica uno de los siguientes valores:
    • Si creaste la reserva en el mismo proyecto, haz lo siguiente: example-reservation
    • Si la reserva está en otro proyecto y tu proyecto puede usarla, ingresa projects/PROJECT_ID/reservations/example-reservation.

Instalar los controladores de GPU.

En cada VM de A3 High o Edge, completa los siguientes pasos.

  1. Instala los controladores de GPU de NVIDIA ejecutando el siguiente comando:
    sudo cos-extensions install gpu -- --version=latest
  2. Vuelve a activar la ruta ejecutando el siguiente comando:
    sudo mount --bind /var/lib/nvidia /var/lib/nvidia
    sudo mount -o remount,exec /var/lib/nvidia

Otorga a las NIC acceso a las GPU

En cada VM de A3 High o Edge, otorga a las NIC acceso a las GPU completando los siguientes pasos:

  1. Configura el registro.
    • Si usas Container Registry, ejecuta el siguiente comando:
      docker-credential-gcr configure-docker
    • Si usas Artifact Registry, ejecuta el siguiente comando:
      docker-credential-gcr configure-docker --registries us-docker.pkg.dev
  2. Configura el administrador de ruta de recepción de datos. Un servicio de administración, GPUDirect-TCPX Receive Data Path Manager, debe ejecutarse junto con las aplicaciones que usan GPUDirect-TCPX. Para iniciar el servicio en cada VM de Container-Optimized OS, ejecuta el siguiente comando:
    docker run --pull=always --rm \
        --name receive-datapath-manager \
        --detach \
        --privileged \
        --cap-add=NET_ADMIN --network=host \
        --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \
        --device /dev/nvidia0:/dev/nvidia0 \
        --device /dev/nvidia1:/dev/nvidia1 \
        --device /dev/nvidia2:/dev/nvidia2 \
        --device /dev/nvidia3:/dev/nvidia3 \
        --device /dev/nvidia4:/dev/nvidia4 \
        --device /dev/nvidia5:/dev/nvidia5 \
        --device /dev/nvidia6:/dev/nvidia6 \
        --device /dev/nvidia7:/dev/nvidia7 \
        --device /dev/nvidia-uvm:/dev/nvidia-uvm \
        --device /dev/nvidiactl:/dev/nvidiactl \
        --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64 \
        --volume /run/tcpx:/run/tcpx \
        --entrypoint /tcpgpudmarxd/build/app/tcpgpudmarxd \
        us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/tcpgpudmarxd \
        --gpu_nic_preset a3vm --gpu_shmem_type fd --uds_path "/run/tcpx" --setup_param "--verbose 128 2 0"
       
  3. Verifica que se haya iniciado el contenedor receive-datapath-manager.
    docker container logs --follow receive-datapath-manager

    El resultado debe parecerse al siguiente:

    I0000 00:00:1687813309.406064       1 rx_rule_manager.cc:174] Rx Rule Manager server(s) started...
  4. Para dejar de ver los registros, presiona ctrl-c.
  5. Instala las reglas de las tablas de IP.
    sudo iptables -I INPUT -p tcp -m tcp -j ACCEPT
  6. Configura la biblioteca de comunicación colectiva de NVIDIA (NCCL) y el complemento GPUDirect-TCPX.

    Se requiere una versión específica de la biblioteca NCCL y la combinación de objeto binario del complemento GPUDirect-TCPX para usar NCCL con la compatibilidad con GPUDirect-TCPX. Google Cloud proporcionó paquetes que cumplen con este requisito.

    Para instalar el paquete Google Cloud , ejecuta el siguiente comando:

    docker run --rm -v /var/lib:/var/lib us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/nccl-plugin-gpudirecttcpx install --install-nccl
    sudo mount --bind /var/lib/tcpx /var/lib/tcpx
    sudo mount -o remount,exec /var/lib/tcpx

    Si este comando se ejecuta de forma correcta, los archivos libnccl-net.so y libnccl.so se colocan en el directorio /var/lib/tcpx/lib64.

Ejecuta pruebas

En cada VM de A3 High o Edge, ejecuta una prueba de NCCL completando los siguientes pasos:

  1. Inicia el contenedor.
    #!/bin/bash
    
    function run_tcpx_container() {
    docker run \
       -u 0 --network=host \
       --cap-add=IPC_LOCK \
       --userns=host \
       --volume /run/tcpx:/tmp \
       --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \
       --volume /var/lib/tcpx/lib64:/usr/local/tcpx/lib64 \
       --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 \
       --device /dev/nvidia0:/dev/nvidia0 \
       --device /dev/nvidia1:/dev/nvidia1 \
       --device /dev/nvidia2:/dev/nvidia2 \
       --device /dev/nvidia3:/dev/nvidia3 \
       --device /dev/nvidia4:/dev/nvidia4 \
       --device /dev/nvidia5:/dev/nvidia5 \
       --device /dev/nvidia6:/dev/nvidia6 \
       --device /dev/nvidia7:/dev/nvidia7 \
       --device /dev/nvidia-uvm:/dev/nvidia-uvm \
       --device /dev/nvidiactl:/dev/nvidiactl \
       --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/usr/local/tcpx/lib64 \
       "$@"
    }
    

    El comando anterior completa lo siguiente:

    • Activa los dispositivos NVIDIA de /dev en el contenedor.
    • Configura el espacio de nombres de red del contenedor en el host.
    • Configura el espacio de nombres del usuario del contenedor que alojarás.
    • Agrega CAP_IPC_LOCK a las capacidades del contenedor.
    • Activa /tmp del host en /tmp del contenedor.
    • Activa la ruta de instalación del complemento NCCL y GPUDirect-TCPX NCCL en el contenedor y agrega la ruta de acceso activada a LD_LIBRARY_PATH.
  2. Después de iniciar el contenedor, las aplicaciones que usan NCCL pueden ejecutarse desde el contenedor. Por ejemplo, para ejecutar la prueba run-allgather, completa los siguientes pasos:
    1. En cada VM A3 High o Edge, ejecuta lo siguiente:
      $ run_tcpx_container -it --rm us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/nccl-plugin-gpudirecttcpx shell
    2. En una VM, ejecuta los siguientes comandos:
      1. Configura la conexión entre las VMs. Reemplaza VM-0 y VM-1 por los nombres de cada VM.
        /scripts/init_ssh.sh VM-0 VM-1
        pushd /scripts && /scripts/gen_hostfiles.sh VM-0 VM-1; popd

        Esto crea un directorio /scripts/hostfiles2 en cada VM.

      2. Ejecuta la secuencia de comandos.
        /scripts/run-allgather.sh 8 eth1,eth2,eth3,eth4 1M 512M 2

    La secuencia de comandos run-allgather tarda unos dos minutos en ejecutarse. Al final de los registros, verás los resultados all-gather.

    Si ves la siguiente línea en tus registros NCCL, esto verifica que GPUGPU-TCPX se inicializó de forma correcta.

    NCCL INFO NET/GPUDirectTCPX ver. 3.1.1.
    

GPU de varias instancias

Una GPU de instancias múltiples particiona una sola GPU de NVIDIA H100 dentro de la misma VM en hasta siete instancias de GPU independientes. Se ejecutan de manera simultánea, cada uno con su propio procesador de memoria, caché y transmisión. Esta configuración permite que la GPU NVIDIA H100 entregue una calidad de servicio (QoS) coherente hasta 7 veces mayor en comparación con los modelos de GPU anteriores.

Puedes crear hasta siete GPU de varias instancias. Con las GPU H100 de 80 GB, cada GPU de instancias múltiples tiene asignados 10 GB de memoria.

Para obtener más información sobre el uso de GPU de varias instancias, consulta Guía del usuario de GPU de varias instancias de NVIDIA.

Para crear GPU de varias instancias, completa los siguientes pasos:

  1. Crea tus instancias A3 Mega, A3 High o A3 Edge.

  2. Instala los controladores de GPU.

  3. Habilita el modo MIG. Para obtener instrucciones, consulta Habilita el MIG.

  4. Configura tus particiones de GPU. Para obtener instrucciones, consulta Cómo trabajar con particiones de GPU.