Créer une instance A3 Mega, A3 High ou A3 Edge avec GPUDirect activé

Ce document décrit la configuration des instances de machines virtuelles (VM) A3 Mega, A3 High ou A3 Edge auxquelles sont associés huit GPU NVIDIA H100 et qui utilisent l'une des technologies GPUDirect suivantes : GPUDirect-TCPX ou GPUDirect-TCPXO. Pour créer une instance A3 High avec moins de huit GPU, consultez Créer une instance A3 High ou A2.

La technologie GPUDirect que vous utilisez dépend du type de machine A3 que vous sélectionnez.

  • GPUDirect-TCPXO : pile réseau déchargée de type RDMA compatible avec les types de machines A3 Mega (a3-megagpu-8g) équipés de huit GPU H100.
  • GPUDirect-TCPX : version optimisée de TCP invité qui offre une latence plus faible et est compatible avec les types de machines A3 High (a3-highgpu-8g) et A3 Edge (a3-edgegpu-8g) qui disposent de huit GPU H100.

La série de machines optimisée pour les accélérateurs A3 dispose de 208 processeurs virtuels et de 1 872 Go de mémoire. Les types de machines a3-megagpu-8g, a3-highgpu-8g et a3-edgegpu-8g offrent 80 Go de mémoire GPU par GPU. Ces types de machines peuvent atteindre jusqu'à 1 800 Gbit/s de bande passante réseau, ce qui les rend idéaux pour les modèles de langage volumineux basés sur les transformateurs, les bases de données et le calcul hautes performances (HPC).

GPUDirect-TCPX et GPUDirect-TCPXO utilisent la technologie NVIDIA GPUDirect pour améliorer les performances et réduire la latence de vos VM A3. Pour ce faire, elles permettent aux charges utiles des paquets de données d'être transférées directement de la mémoire GPU vers l'interface réseau, en contournant le processeur et la mémoire système. Il s'agit d'une forme d'accès direct à la mémoire à distance (RDMA). Lorsqu'elles sont combinées à gVNIC (Google Virtual NIC), les VM A3 peuvent offrir le débit le plus élevé entre les VM d'un cluster par rapport aux types de machines A2 ou G2 optimisés pour les accélérateurs de la génération précédente.

Ce document explique comment créer une VM A3 Mega, A3 High ou A3 Edge, et comment activer GPUDirect-TCPX ou GPUDirect-TCPXO pour tester les performances réseau améliorées du GPU.

Avant de commencer

  • Pour connaître les limites et les étapes préalables supplémentaires à la création d'instances avec des GPU associés (comme la sélection d'une image de l'OS et la vérification du quota de GPU), consultez Présentation de la création d'une instance avec des GPU associés.
  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification permet de valider votre identité pour accéder aux services et aux API Google Cloud . Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine en sélectionnant l'une des options suivantes :
    1. Installez la Google Cloud CLI. Une fois que la Google Cloud CLI est installée, initialisez-la en exécutant la commande suivante :

      gcloud init

      Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

    2. Set a default region and zone.

Rôles requis

Pour obtenir les autorisations nécessaires à la création de VM, demandez à votre administrateur de vous attribuer le rôle IAM Administrateur d'instances Compute (v1) (roles/compute.instanceAdmin.v1) sur le projet. Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Ce rôle prédéfini contient les autorisations requises pour créer des VM. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour créer des VM :

  • compute.instances.create sur le projet
  • Pour créer la VM à l'aide d'une image personnalisée : compute.images.useReadOnly sur l'image
  • Pour créer la VM à l'aide d'un instantané : compute.snapshots.useReadOnly sur l'instantané
  • Pour créer la VM à l'aide d'un modèle d'instance : compute.instanceTemplates.useReadOnly sur le modèle d'instance
  • Pour spécifier un sous-réseau pour la VM : compute.subnetworks.use sur le projet ou sur le sous-réseau choisi
  • Pour spécifier une adresse IP statique pour la VM : compute.addresses.use sur le projet
  • Pour attribuer une adresse IP externe à la VM en cas d'utilisation d'un réseau VPC : compute.subnetworks.useExternalIp sur le projet ou sur le sous-réseau choisi
  • Pour attribuer un ancien réseau à la VM : compute.networks.use sur le projet
  • Pour attribuer une adresse IP externe à la VM en cas d'utilisation d'un ancien réseau : compute.networks.useExternalIp sur le projet
  • Pour définir les métadonnées d'instance de VM pour la VM : compute.instances.setMetadata sur le projet
  • Pour définir des tags pour la VM : compute.instances.setTags sur la VM
  • Pour définir des étiquettes pour la VM : compute.instances.setLabels sur la VM
  • Pour définir un compte de service que doit utiliser la VM : compute.instances.setServiceAccount sur la VM
  • Pour créer un disque pour la VM : compute.disks.create sur le projet
  • Pour associer un disque existant en mode lecture seule ou en mode lecture-écriture : compute.disks.use sur le disque
  • Pour associer un disque existant en mode lecture seule : compute.disks.useReadOnly sur le disque

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Présentation

Pour tester les performances du réseau avec GPUDirect, procédez comme suit :

  1. Configurez un ou plusieurs réseaux de cloud privé virtuel (VPC) avec une MTU élevée.
  2. Créez votre instance GPU.

Configurer des réseaux VPC

Pour permettre une communication efficace pour vos VM GPU, vous devez créer un réseau de gestion et un ou plusieurs réseaux de données. Le réseau de gestion est utilisé pour l'accès externe (SSH, par exemple) et pour la plupart des communications réseau générales. Les réseaux de données sont utilisés pour la communication hautes performances entre les GPU de différentes VM, par exemple pour le trafic RDMA (Remote Direct Memory Access).

Pour ces réseaux VPC, nous vous recommandons de définir l'unité de transmission maximale (MTU) sur une valeur plus élevée. Des valeurs de MTU plus élevées augmentent la taille des paquets et réduisent la surcharge de l'en-tête du paquet, ce qui augmente le débit des données de charge utile. Pour en savoir plus sur la création de réseaux VPC, consultez Créer et vérifier un réseau avec une MTU de trame géante.

Créer un réseau de gestion, un sous-réseau et une règle de pare-feu

Pour configurer le réseau de gestion, procédez comme suit :

  1. Créez le réseau de gestion à l'aide de la commande networks create :

    gcloud compute networks create NETWORK_NAME_PREFIX-mgmt-net \
        --project=PROJECT_ID \
        --subnet-mode=custom \
        --mtu=8244
    
  2. Créez le sous-réseau de gestion à l'aide de la commande 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. Créez des règles de pare-feu à l'aide de la commande firewall-rules create.

    1. Créez une règle de pare-feu pour le réseau de gestion.

      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. Créez la règle de pare-feu tcp:22 pour limiter les adresses IP sources qui peuvent se connecter à votre VM à l'aide de 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. Créez la règle de pare-feu icmp permettant de vérifier les problèmes de transmission de données sur le réseau.

      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
      

Remplacez les éléments suivants :

  • NETWORK_NAME_PREFIX : préfixe de nom à utiliser pour les réseaux et sous-réseaux VPC.
  • PROJECT_ID : ID de votre projet.
  • REGION : région dans laquelle vous souhaitez créer les réseaux.
  • SSH_SOURCE_IP_RANGE : plage d'adresses IP au format CIDR. Ce paramètre spécifie les adresses IP sources qui peuvent se connecter à votre VM à l'aide de SSH.

Créer des réseaux de données, des sous-réseaux et une règle de pare-feu

Le nombre de réseaux de données varie en fonction du type de machine GPU que vous créez.

A3 Mega

A3 Mega nécessite huit réseaux de données. Exécutez la commande suivante pour créer huit réseaux de données, chacun avec des sous-réseaux et des règles de pare-feu.

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 et A3 Edge

Les VM A3 High et A3 Edge nécessitent quatre réseaux de données. Exécutez la commande suivante pour créer quatre réseaux de données, chacun avec des sous-réseaux et des règles de pare-feu.

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

Créer des instances A3 Mega (GPUDirect-TCPXO)

Créez vos instances A3 Mega à l'aide de l'image Container-Optimized OS cos-121-lts ou version ultérieure.

COS

Pour tester les performances réseau avec GPUDirect-TCPXO, créez au moins deux instances de VM A3 Mega. Créez chaque VM en utilisant l'image Container-Optimized OS cos-121-lts ou version ultérieure et en spécifiant les réseaux VPC que vous avez créés à l'étape précédente.

Les VM A3 Mega nécessitent neuf interfaces réseau Google Virtual NIC (gVNIC), une pour le réseau de gestion et huit pour les réseaux de données.

En fonction du modèle de provisionnement que vous souhaitez utiliser pour créer votre VM, sélectionnez l'une des options suivantes :

Standard

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

Remplacez les éléments suivants :

  • VM_NAME : nom de votre instance de VM.
  • PROJECT_ID : par l'ID du projet.
  • ZONE : zone compatible avec votre type de machine.
  • BOOT_DISK_SIZE : taille du disque de démarrage en Go (par exemple, 50).
  • NETWORK_NAME_PREFIX : préfixe de nom à utiliser pour les réseaux et sous-réseaux 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

Remplacez les éléments suivants :

  • VM_NAME : nom de votre instance de VM.
  • PROJECT_ID : par l'ID du projet.
  • ZONE : zone compatible avec votre type de machine.
  • BOOT_DISK_SIZE : taille du disque de démarrage en Go (par exemple, 50).
  • NETWORK_NAME_PREFIX : préfixe de nom à utiliser pour les réseaux et sous-réseaux VPC.
  • TERMINATION_ACTION : indique s'il faut arrêter ou supprimer la VM en cas de préemption. Spécifiez l'une des valeurs suivantes :
    • Pour arrêter la VM : STOP
    • Pour supprimer la VM : DELETE

Démarrage 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

Remplacez les éléments suivants :

  • VM_NAME : nom de votre instance de VM.
  • PROJECT_ID : par l'ID du projet.
  • ZONE : zone compatible avec votre type de machine.
  • BOOT_DISK_SIZE : taille du disque de démarrage en Go (par exemple, 50).
  • NETWORK_NAME_PREFIX : préfixe de nom à utiliser pour les réseaux et sous-réseaux VPC.
  • TERMINATION_ACTION : indique s'il faut arrêter ou supprimer la VM à la fin de sa durée d'exécution. Spécifiez l'une des valeurs suivantes :
    • Pour arrêter la VM : STOP
    • Pour supprimer la VM : DELETE
  • RUN_DURATION : durée maximale pendant laquelle la VM s'exécute avant que Compute Engine ne l'arrête ou ne la supprime. Vous devez formater la valeur en nombre de jours, d'heures, de minutes ou de secondes, suivis respectivement de d, h, m et s. Par exemple, une valeur de 30m définit une durée de 30 minutes, et une valeur de 1h2m3s définit une durée d'une heure, deux minutes et trois secondes. Vous pouvez spécifier une valeur comprise entre 10 minutes et sept jours.
  • VALID_FOR_DURATION : durée d'attente maximale pour le provisionnement des ressources demandées. Vous devez formater la valeur en nombre de jours, d'heures, de minutes ou de secondes, suivis respectivement de d, h, m et s. En fonction des exigences zonales de votre charge de travail, spécifiez l'une des durées suivantes pour augmenter vos chances de voir aboutir votre demande de création de VM :
    • Si votre charge de travail vous impose de créer la VM dans une zone spécifique, indiquez une durée comprise entre 90 secondes (90s) et deux heures (2h). Plus la durée est longue, plus vous avez de chances d'obtenir des ressources.
    • Si la VM peut s'exécuter dans n'importe quelle zone de la région, spécifiez une durée de zéro seconde (0s). Cette valeur indique que Compute Engine n'alloue des ressources que si elles sont immédiatement disponibles. Si la requête de création de VM échoue parce que les ressources ne sont pas disponibles, réessayez dans une autre zone.

Lié à la réservation

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

Remplacez les éléments suivants :

  • VM_NAME : nom de votre instance de VM.
  • PROJECT_ID : par l'ID du projet.
  • ZONE : zone compatible avec votre type de machine.
  • BOOT_DISK_SIZE : taille du disque de démarrage en Go (par exemple, 50).
  • NETWORK_NAME_PREFIX : préfixe de nom à utiliser pour les réseaux et sous-réseaux VPC.
  • TERMINATION_ACTION : indique s'il faut arrêter ou supprimer la VM à la fin de la période de réservation. Spécifiez l'une des valeurs suivantes :
    • Pour arrêter la VM : STOP
    • Pour supprimer la VM : DELETE
  • RESERVATION_URL : URL de la réservation que vous souhaitez consommer. Spécifiez l'une des valeurs suivantes :
    • Si vous avez créé la réservation dans le même projet : example-reservation
    • Si la réservation se trouve dans un autre projet et que votre projet peut l'utiliser : projects/PROJECT_ID/reservations/example-reservation.

Installer des pilotes de GPU

Sur chaque VM A3 Mega, installez les pilotes de GPU.

  1. Installez les pilotes de GPU NVIDIA.

    sudo cos-extensions install gpu -- --version=latest
    
  2. Remontez le chemin.

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

Accorder aux cartes d'interface réseau l'accès aux GPU

Sur chaque VM A3 Mega, accordez aux cartes d'interface réseau l'accès aux GPU.

  1. Ajustez les paramètres du pare-feu pour accepter toutes les connexions TCP entrantes et activer la communication entre les nœuds de votre cluster :
    sudo /sbin/iptables -I INPUT -p tcp -m tcp -j ACCEPT
  2. Configurez le module dmabuf. Chargez le module import-helper, qui fait partie du framework dmabuf. Ce framework permet le partage de mémoire à haute vitesse et sans copie entre le GPU et la carte d'interface réseau (NIC), un composant essentiel de la technologie GPUDirect :
    sudo modprobe import-helper
  3. Configurez Docker pour authentifier les requêtes envoyées à Artifact Registry.
    docker-credential-gcr configure-docker --registries us-docker.pkg.dev
  4. Lancez RxDM dans le conteneur. RxDM est un service de gestion qui s'exécute avec l'application GPU pour gérer la mémoire GPU. Ce service préalloue et gère la mémoire GPU pour le trafic réseau entrant, ce qui est un élément clé de la technologie GPUDirect et essentiel pour les réseaux hautes performances. Démarrez un conteneur Docker nommé 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

    Pour vérifier que RxDM a bien démarré, exécutez la commande. Attendez que le message "Buffer manager initialization complete" (Initialisation du gestionnaire de mémoire tampon terminée) s'affiche pour confirmer que l'initialisation de RxDM a réussi.

    docker container logs --follow  rxdm

    Vous pouvez également consulter le journal d'achèvement de l'initialisation RxDM.

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

Configurer l'environnement NCCL

Sur chaque VM A3 Mega, procédez comme suit :

  1. Installez la bibliothèque nccl-net, un plug-in pour NCCL qui permet la communication GPUDirect sur le réseau.La commande suivante extrait l'image du programme d'installation et installe les fichiers de bibliothèque nécessaires dans /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. Lancez un conteneur nccl-tests dédié aux tests NCCL. Ce conteneur est préconfiguré avec les outils et scripts utilitaires nécessaires, ce qui garantit un environnement propre et cohérent pour vérifier les performances de la configuration GPUDirect.

    Cette commande réutilise la variable NCCL_NET_IMAGE que vous avez définie à l'étape précédente.

    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

Exécuter le benchmark nccl-tests

Pour exécuter le benchmark nccl-tests sur une seule VM A3 Mega, procédez comme suit :

  1. Ouvrez un shell Bash interactif dans le conteneur nccl-tests.
    docker exec -it nccl bash
  2. Dans le shell Bash du conteneur nccl-tests, procédez comme suit.

    1. Configurez l'environnement pour une exécution multinœud en configurant SSH et en générant des fichiers hôtes. Remplacez VM_NAME_1 et VM_NAME_2 par les noms de chaque VM.
      /scripts/init_ssh.sh VM_NAME_1 VM_NAME_2
      /scripts/gen_hostfiles.sh VM_NAME_1 VM_NAME_2
        

      Cela crée un répertoire nommé /scripts/hostfiles2.

    2. Exécutez le benchmark all_gather_perf pour mesurer les performances de communication collective :
      /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

Créer des instances A3 High et Edge (GPUDirect-TCPX)

Créez vos instances A3 High et Edge à l'aide de l'image Container-Optimized OS cos-121-lts ou version ultérieure.

COS

Pour tester les performances réseau avec GPUDirect-TCPX, vous devez créer au moins deux VM A3 High ou Edge. Créez chaque VM en utilisant l'image Container-Optimized OS cos-121-lts ou version ultérieure et en spécifiant les réseaux VPC que vous avez créés à l'étape précédente.

Les VM doivent utiliser l'interface réseau de la carte d'interface réseau virtuelle Google (gVNIC). Pour les VM A3 High ou Edge, vous devez utiliser le pilote gVNIC version 1.4.0rc3 ou ultérieure. Cette version du pilote est disponible sur Container-Optimized OS. La première carte d'interface réseau virtuelle est utilisée comme carte d'interface réseau principale pour le réseau et le stockage généraux. Les quatre autres cartes d'interface réseau virtuelle sont alignées NUMA avec deux des huit GPU sur le même commutateur PCIe.

En fonction du modèle de provisionnement que vous souhaitez utiliser pour créer votre VM, sélectionnez l'une des options suivantes :

Standard

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

Remplacez les éléments suivants :

  • VM_NAME : nom de votre VM.
  • PROJECT_ID : par l'ID du projet.
  • ZONE : zone compatible avec votre type de machine.
  • MACHINE_TYPE : type de machine pour la VM. Indiquez a3-highgpu-8g ou a3-edgegpu-8g.
  • BOOT_DISK_SIZE : taille du disque de démarrage en Go (par exemple, 50).
  • NETWORK_NAME_PREFIX : préfixe de nom à utiliser pour les réseaux et sous-réseaux 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

Remplacez les éléments suivants :

  • VM_NAME : nom de votre VM.
  • PROJECT_ID : par l'ID du projet.
  • ZONE : zone compatible avec votre type de machine.
  • MACHINE_TYPE : type de machine pour la VM. Indiquez a3-highgpu-8g ou a3-edgegpu-8g.
  • BOOT_DISK_SIZE : taille du disque de démarrage en Go (par exemple, 50).
  • NETWORK_NAME_PREFIX : préfixe de nom à utiliser pour les réseaux et sous-réseaux VPC.
  • TERMINATION_ACTION : indique s'il faut arrêter ou supprimer la VM en cas de préemption. Spécifiez l'une des valeurs suivantes :
    • Pour arrêter la VM : STOP
    • Pour supprimer la VM : DELETE

Démarrage 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

Remplacez les éléments suivants :

  • VM_NAME : nom de votre VM.
  • PROJECT_ID : par l'ID du projet.
  • ZONE : zone compatible avec votre type de machine.
  • MACHINE_TYPE : type de machine pour la VM. Indiquez a3-highgpu-8g ou a3-edgegpu-8g.
  • BOOT_DISK_SIZE : taille du disque de démarrage en Go (par exemple, 50).
  • NETWORK_NAME_PREFIX : préfixe de nom à utiliser pour les réseaux et sous-réseaux VPC.
  • TERMINATION_ACTION : indique s'il faut arrêter ou supprimer la VM à la fin de sa durée d'exécution. Spécifiez l'une des valeurs suivantes :
    • Pour arrêter la VM : STOP
    • Pour supprimer la VM : DELETE
  • RUN_DURATION : durée maximale pendant laquelle la VM s'exécute avant que Compute Engine ne l'arrête ou ne la supprime. Vous devez formater la valeur en nombre de jours, d'heures, de minutes ou de secondes, suivis respectivement de d, h, m et s. Par exemple, une valeur de 30m définit une durée de 30 minutes, et une valeur de 1h2m3s définit une durée d'une heure, deux minutes et trois secondes. Vous pouvez spécifier une valeur comprise entre 10 minutes et sept jours.
  • VALID_FOR_DURATION : durée d'attente maximale pour le provisionnement des ressources demandées. Vous devez formater la valeur en nombre de jours, d'heures, de minutes ou de secondes, suivis respectivement de d, h, m et s. En fonction des exigences zonales de votre charge de travail, spécifiez l'une des durées suivantes pour augmenter vos chances de voir aboutir votre demande de création de VM :
    • Si votre charge de travail vous impose de créer la VM dans une zone spécifique, indiquez une durée comprise entre 90 secondes (90s) et deux heures (2h). Plus la durée est longue, plus vous avez de chances d'obtenir des ressources.
    • Si la VM peut s'exécuter dans n'importe quelle zone de la région, spécifiez une durée de zéro seconde (0s). Cette valeur indique que Compute Engine n'alloue des ressources que si elles sont immédiatement disponibles. Si la requête de création de VM échoue parce que les ressources ne sont pas disponibles, réessayez dans une autre zone.

Lié à la réservation

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

Remplacez les éléments suivants :

  • VM_NAME : nom de votre VM.
  • PROJECT_ID : par l'ID du projet.
  • ZONE : zone compatible avec votre type de machine.
  • MACHINE_TYPE : type de machine pour la VM. Indiquez a3-highgpu-8g ou a3-edgegpu-8g.
  • BOOT_DISK_SIZE : taille du disque de démarrage en Go (par exemple, 50).
  • NETWORK_NAME_PREFIX : préfixe de nom à utiliser pour les réseaux et sous-réseaux VPC.
  • TERMINATION_ACTION : indique s'il faut arrêter ou supprimer la VM à la fin de la période de réservation. Spécifiez l'une des valeurs suivantes :
    • Pour arrêter la VM : STOP
    • Pour supprimer la VM : DELETE
  • RESERVATION_URL : URL de la réservation que vous souhaitez consommer. Spécifiez l'une des valeurs suivantes :
    • Si vous avez créé la réservation dans le même projet : example-reservation
    • Si la réservation se trouve dans un autre projet et que votre projet peut l'utiliser : projects/PROJECT_ID/reservations/example-reservation.

Installer des pilotes de GPU

Sur chaque VM A3 High ou Edge, procédez comme suit.

  1. Installez les pilotes de GPU NVIDIA en exécutant la commande suivante :
    sudo cos-extensions install gpu -- --version=latest
  2. Réinstallez le chemin en exécutant la commande suivante :
    sudo mount --bind /var/lib/nvidia /var/lib/nvidia
    sudo mount -o remount,exec /var/lib/nvidia

Accorder aux cartes d'interface réseau l'accès aux GPU

Sur chaque VM A3 High ou Edge, accordez aux cartes d'interface réseau l'accès aux GPU en procédant comme suit :

  1. Configurez le registre.
    • Si vous utilisez Container Registry, exécutez la commande suivante :
      docker-credential-gcr configure-docker
    • Si vous utilisez Artifact Registry, exécutez la commande suivante :
      docker-credential-gcr configure-docker --registries us-docker.pkg.dev
  2. Configurez le gestionnaire de chemins de données de réception. Un service de gestion, GPUDirect-TCPX Receive Data Path Manager, doit s'exécuter avec les applications qui utilisent GPUDirect-TCPX. Pour démarrer le service sur chaque VM Container-Optimized OS, exécutez la commande suivante :
    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. Vérifiez que le conteneur receive-datapath-manager a démarré.
    docker container logs --follow receive-datapath-manager

    Le résultat doit ressembler à ceci :

    I0000 00:00:1687813309.406064       1 rx_rule_manager.cc:174] Rx Rule Manager server(s) started...
  4. Pour arrêter d'afficher les journaux, appuyez sur ctrl-c.
  5. Installez les règles de la table IP.
    sudo iptables -I INPUT -p tcp -m tcp -j ACCEPT
  6. Configurez la bibliothèque NVIDIA Collective Communications Library (NCCL) et le plug-in GPUDirect-TCPX.

    Une version spécifique de la bibliothèque NCCL et une combinaison binaire du plug-in GPUDirect-TCPX sont nécessaires pour utiliser la bibliothèque NCCL avec la compatibilité GPUDirect-TCPX. Google Cloud a fourni des packages qui répondent à cette exigence.

    Pour installer le package Google Cloud , exécutez la commande suivante :

    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 cette commande aboutit, les fichiers libnccl-net.so et libnccl.so sont placés dans le répertoire /var/lib/tcpx/lib64.

Exécuter des tests

Sur chaque VM A3 High ou Edge, exécutez un test NCCL en procédant comme suit :

  1. Démarrez le conteneur.
    #!/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 \
       "$@"
    }
    

    La commande précédente effectue les opérations suivantes :

    • Installe les appareils NVIDIA à partir de /dev dans le conteneur
    • Définit l'espace de noms réseau du conteneur sur l'hôte
    • Définit l'espace de noms de l'utilisateur du conteneur à héberger
    • Ajoute CAP_IPC_LOCK aux fonctionnalités du conteneur
    • Installe le /tmp de l'hôte sur le /tmp du conteneur
    • Installe le chemin d'installation de la bibliothèque NCCL et le plug-in GPUDirect-TCPX NCCL dans le conteneur, puis ajoute le chemin d'accès installé à LD_LIBRARY_PATH.
  2. Une fois le conteneur démarré, les applications utilisant la bibliothèque NCCL peuvent s'exécuter à partir de l'intérieur du conteneur. Par exemple, pour exécuter le test run-allgather, procédez comme suit :
    1. Sur chaque VM A3 High ou Edge, exécutez la commande suivante :
      $ run_tcpx_container -it --rm us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/nccl-plugin-gpudirecttcpx shell
    2. Sur une VM, exécutez les commandes suivantes :
      1. Configurez la connexion entre les VM. Remplacez VM-0 et VM-1 par les noms de chaque VM.
        /scripts/init_ssh.sh VM-0 VM-1
        pushd /scripts && /scripts/gen_hostfiles.sh VM-0 VM-1; popd

        Un répertoire /scripts/hostfiles2 est alors créé sur chaque VM.

      2. Exécutez le script.
        /scripts/run-allgather.sh 8 eth1,eth2,eth3,eth4 1M 512M 2

    L'exécution du script run-allgather prend environ deux minutes. À la fin des journaux, vous verrez les résultats all-gather.

    Si la ligne suivante s'affiche dans les journaux de la bibliothèque NCCL, cela vérifie que GPUDirect-TCPX a bien été initialisé.

    NCCL INFO NET/GPUDirectTCPX ver. 3.1.1.
    

GPU multi-instance

Un GPU multi-instance partitionne un seul GPU NVIDIA H100 dans la même VM en sept instances GPU indépendantes. Elles s'exécutent simultanément, chacune avec sa propre mémoire, le cache et ses multiprocesseurs de diffusion. Cette configuration permet au GPU NVIDIA H100 de fournir une qualité de service (QoS) cohérente jusqu'à sept fois supérieure à l'utilisation par rapport aux modèles de GPU précédents.

Vous pouvez créer jusqu'à sept GPU multi-instances. Avec les GPU H100 de 80 Go, chaque GPU multi-instance se voit attribuer 10 Go de mémoire.

Pour en savoir plus sur l'utilisation des GPU multi-instances, consultez le guide de l'utilisateur sur les GPU multi-instances NVIDIA.

Pour créer des GPU multi-instances, procédez comme suit :

  1. Créez vos instances A3 Mega, A3 High ou A3 Edge.

  2. Installez les pilotes de GPU.

  3. Activez le mode MIG. Pour obtenir des instructions, consultez Activer MIG.

  4. Configurez vos partitions de GPU. Pour obtenir des instructions, consultez Utiliser des partitions de GPU.