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 :
-
Installez la Google Cloud CLI. Une fois que la Google Cloud CLI est installée, initialisez-la en exécutant la commande suivante :
gcloud initSi vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
- 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.createsur le projet-
Pour créer la VM à l'aide d'une image personnalisée :
compute.images.useReadOnlysur l'image -
Pour créer la VM à l'aide d'un instantané :
compute.snapshots.useReadOnlysur l'instantané -
Pour créer la VM à l'aide d'un modèle d'instance :
compute.instanceTemplates.useReadOnlysur le modèle d'instance -
Pour spécifier un sous-réseau pour la VM :
compute.subnetworks.usesur le projet ou sur le sous-réseau choisi -
Pour spécifier une adresse IP statique pour la VM :
compute.addresses.usesur le projet -
Pour attribuer une adresse IP externe à la VM en cas d'utilisation d'un réseau VPC :
compute.subnetworks.useExternalIpsur le projet ou sur le sous-réseau choisi -
Pour attribuer un ancien réseau à la VM :
compute.networks.usesur le projet -
Pour attribuer une adresse IP externe à la VM en cas d'utilisation d'un ancien réseau :
compute.networks.useExternalIpsur le projet -
Pour définir les métadonnées d'instance de VM pour la VM :
compute.instances.setMetadatasur le projet -
Pour définir des tags pour la VM :
compute.instances.setTagssur la VM -
Pour définir des étiquettes pour la VM :
compute.instances.setLabelssur la VM -
Pour définir un compte de service que doit utiliser la VM :
compute.instances.setServiceAccountsur la VM -
Pour créer un disque pour la VM :
compute.disks.createsur le projet -
Pour associer un disque existant en mode lecture seule ou en mode lecture-écriture :
compute.disks.usesur le disque -
Pour associer un disque existant en mode lecture seule :
compute.disks.useReadOnlysur 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 :
- Configurez un ou plusieurs réseaux de cloud privé virtuel (VPC) avec une MTU élevée.
- 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 :
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=8244Cré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/24Créez des règles de pare-feu à l'aide de la commande
firewall-rules create.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/16Créez la règle de pare-feu
tcp:22pour 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_RANGECréez la règle de pare-feu
icmppermettant 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
- Pour arrêter la VM :
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
- Pour arrêter la VM :
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 ded,h,mets. Par exemple, une valeur de30mdéfinit une durée de 30 minutes, et une valeur de1h2m3sdé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 ded,h,mets. 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.
- 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 (
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
- Pour arrêter la VM :
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.
- Si vous avez créé la réservation dans le même projet :
Installer des pilotes de GPU
Sur chaque VM A3 Mega, installez les pilotes de GPU.
Installez les pilotes de GPU NVIDIA.
sudo cos-extensions install gpu -- --version=latest
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.
- 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
- Configurez le module
dmabuf. Chargez le moduleimport-helper, qui fait partie du frameworkdmabuf. 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
- Configurez Docker pour authentifier les requêtes envoyées à Artifact Registry.
docker-credential-gcr configure-docker --registries us-docker.pkg.dev
- Lancez
RxDMdans le conteneur.RxDMest 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=8Pour vérifier que
RxDMa 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 deRxDMa 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 :
- 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 - Lancez un conteneur
nccl-testsdé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_IMAGEque 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 :
- Ouvrez un shell Bash interactif dans le conteneur
nccl-tests.docker exec -it nccl bash
- Configurez l'environnement pour une exécution multinœud en configurant SSH et en générant des fichiers hôtes. Remplacez
VM_NAME_1etVM_NAME_2par 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. - Exécutez le benchmark
all_gather_perfpour 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
Dans le shell Bash du conteneur nccl-tests, procédez comme suit.
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. Indiqueza3-highgpu-8goua3-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. Indiqueza3-highgpu-8goua3-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
- Pour arrêter la VM :
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. Indiqueza3-highgpu-8goua3-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
- Pour arrêter la VM :
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 ded,h,mets. Par exemple, une valeur de30mdéfinit une durée de 30 minutes, et une valeur de1h2m3sdé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 ded,h,mets. 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.
- 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 (
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. Indiqueza3-highgpu-8goua3-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
- Pour arrêter la VM :
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.
- Si vous avez créé la réservation dans le même projet :
Installer des pilotes de GPU
Sur chaque VM A3 High ou Edge, procédez comme suit.
- Installez les pilotes de GPU NVIDIA en exécutant la commande suivante :
sudo cos-extensions install gpu -- --version=latest
- 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 :
- 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
- Si vous utilisez Container Registry, exécutez la commande suivante :
- 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" - Vérifiez que le conteneur
receive-datapath-managera 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...
- Pour arrêter d'afficher les journaux, appuyez sur
ctrl-c. - Installez les règles de la table IP.
sudo iptables -I INPUT -p tcp -m tcp -j ACCEPT
- 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.soetlibnccl.sosont 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 :
- 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
/devdans 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_LOCKaux fonctionnalités du conteneur - Installe le
/tmpde l'hôte sur le/tmpdu 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.
- Installe les appareils NVIDIA à partir de
- 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 :- 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
- Sur une VM, exécutez les commandes suivantes :
- Configurez la connexion entre les VM. Remplacez
VM-0etVM-1par 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/hostfiles2est alors créé sur chaque VM. - Exécutez le script.
/scripts/run-allgather.sh 8 eth1,eth2,eth3,eth4 1M 512M 2
- Configurez la connexion entre les VM. Remplacez
L'exécution du script
run-allgatherprend environ deux minutes. À la fin des journaux, vous verrez les résultatsall-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.
- Sur chaque VM A3 High ou Edge, exécutez la commande suivante :
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 :
Créez vos instances A3 Mega, A3 High ou A3 Edge.
Installez les pilotes de GPU.
Activez le mode MIG. Pour obtenir des instructions, consultez Activer MIG.
Configurez vos partitions de GPU. Pour obtenir des instructions, consultez Utiliser des partitions de GPU.