
IA dans plusieurs GPU : comment les GPU communiquent
fait partie d’une série sur l’IA distribuée sur plusieurs GPU :
Introduction
Avant de plonger dans les techniques avancées de parallélisme, nous devons comprendre les technologies clés qui permettent aux GPU de communiquer entre eux.
Mais pourquoi les GPU ont-ils besoin de communiquer en premier lieu ? Lors de la formation de modèles d’IA sur plusieurs GPU, chaque GPU traite différents lots de données, mais ils doivent tous rester synchronisés en partageant des dégradés lors de la rétropropagation ou en échangeant des poids de modèle. Les détails de ce qui est communiqué et à quel moment dépendent de votre stratégie de parallélisme, que nous explorerons en profondeur dans les prochains articles de blog. Pour l’instant, sachez simplement que la formation moderne en IA nécessite beaucoup de communication, ce qui rend le transfert efficace de données GPU à GPU essentiel pour les performances.
La pile de communication
PCIe
PCIe (Peripheral Component Interconnect Express) connecte les cartes d’extension telles que les GPU à la carte mère à l’aide de voies série point à point indépendantes. Voici ce que proposent les différentes générations PCIe pour un GPU utilisant 16 voies :
- Génération 4 x16: ~32 Go/s bidirectionnel
- Génération 5 x16: ~64 Go/s bidirectionnel
- Génération 6 x16: ~128 Go/s bidirectionnel (pour information, 16 voies × 8 Go/s/voie = 128 Go/s)
Les processeurs de serveur haut de gamme offrent généralement 128 voies PCIe, et les GPU modernes ont besoin de 16 voies pour une bande passante optimale. C’est pourquoi vous voyez généralement 8 GPU par serveur (128 = 16 x 8). La consommation d’énergie et l’espace physique dans le châssis du serveur rendent également peu pratique l’utilisation de plus de 8 GPU dans un seul nœud.
NVLien
NVLink permet une communication directe GPU à GPU au sein du même serveur (nœud), en contournant entièrement le CPU. Cette interconnexion propriétaire NVIDIA crée un chemin direct de mémoire à mémoire entre les GPU avec une bande passante énorme :
- NVLink 3 (A100): ~600 Go/s par GPU
- NVLink 4 (H100): ~900 Go/s par GPU
- NVLink 5 (Blackwell): Jusqu’à 1,8 To/s par GPU

Remarque : sur NVLink pour la communication CPU-GPU
Certaines architectures de processeur prennent en charge NVLink en remplacement de PCIe, accélérant considérablement la communication CPU-GPU en surmontant le goulot d’étranglement PCIe dans les transferts de données, comme le déplacement des lots d’entraînement du CPU vers le GPU. Cette fonctionnalité NVLink CPU-GPU rend le déchargement du CPU (une technique qui économise la VRAM en stockant les données dans la RAM) pratique pour les applications d’IA du monde réel. Étant donné que la mise à l’échelle de la RAM est généralement plus rentable que la mise à l’échelle de la VRAM, cette approche offre des avantages économiques significatifs.
Les processeurs prenant en charge NVLink incluent IBM POWER8, POWER9 et NVIDIA Grace.
Cependant, il y a un hic. Dans un serveur doté de 8x H100, chaque GPU doit communiquer avec 7 autres, répartissant ces 900 Go/s en sept connexions point à point d’environ 128 Go/s chacune. C’est là qu’intervient NVSwitch.
NVSwitch
NVSwitch agit comme une plaque tournante centrale pour la communication GPU, acheminant dynamiquement (basculant si vous préférez) les données entre les GPU selon les besoins. Avec NVSwitch, chaque GPU Hopper peut communiquer simultanément à 900 Go/s avec tous les autres GPU Hopper, c’est-à-dire que la bande passante maximale ne dépend pas du nombre de GPU communiquant. C’est ce qui rend NVSwitch « non bloquant ». Chaque GPU se connecte à plusieurs puces NVSwitch via plusieurs connexions NVLink, garantissant une bande passante maximale.
Bien que NVSwitch ait commencé comme une solution intra-nœud, il a été étendu pour interconnecter plusieurs nœuds, créant des clusters GPU prenant en charge jusqu’à 256 GPU avec une communication tout-à-tout à des vitesses NVLink quasi locales.
Les générations de NVSwitch sont :
- Première génération: Prend en charge jusqu’à 16 GPU par serveur (compatible avec Tesla V100)
- Deuxième génération: Prend également en charge jusqu’à 16 GPU avec une bande passante améliorée et une latence plus faible
- Troisième génération: Conçu pour les GPU H100, prend en charge jusqu’à 256 GPU
InfiniBande
InfiniBand gère la communication inter-nœuds. Bien que beaucoup plus lent (et moins cher) que NVSwitch, il est couramment utilisé dans les centres de données pour s’adapter à des milliers de GPU. Modern InfiniBand prend en charge NVIDIA GPUDirect® RDMA (Remote Direct Memory Access), permettant aux adaptateurs réseau d’accéder directement à la mémoire GPU sans intervention du processeur (pas de copie coûteuse vers la RAM hôte).
Les vitesses InfiniBand actuelles incluent :
- HDR: ~25 Go/s par port
- rapport de non-remise: ~50 Go/s par port
- NDR200: ~100 Go/s par port
Ces vitesses sont nettement plus lentes que celles du NVLink intra-nœud en raison de la surcharge du protocole réseau et de la nécessité de deux traversées PCIe (une au niveau de l’expéditeur et une au niveau du récepteur).
Principes de conception clés
Comprendre la mise à l’échelle linéaire
La mise à l’échelle linéaire est le Saint Graal de l’informatique distribuée. En termes simples, cela signifie que doubler vos GPU devrait doubler votre débit et réduire de moitié votre temps de formation. Cela se produit lorsque la surcharge de communication est minime par rapport au temps de calcul, permettant à chaque GPU de fonctionner à pleine capacité. Cependant, une mise à l’échelle linéaire parfaite est rare dans les charges de travail d’IA, car les exigences de communication augmentent avec le nombre d’appareils, et il est généralement impossible d’obtenir un chevauchement parfait entre le calcul et la communication (expliqué ci-après).
L’importance du chevauchement calcul-communication
Lorsqu’un GPU reste inactif en attendant que les données soient transférées avant de pouvoir être traitées, vous gaspillez des ressources. Les opérations de communication doivent chevaucher autant que possible les calculs. Lorsque cela n’est pas possible, nous appelons cette communication une « opération exposée ».
Intra-nœud vs inter-nœud : la falaise des performances
Les cartes mères modernes de qualité serveur prennent en charge jusqu’à 8 GPU. Dans cette plage, vous pouvez souvent obtenir une mise à l’échelle quasi linéaire grâce à une communication intra-nœud à large bande passante et à faible latence.
Une fois que vous dépassez 8 GPU et commencez à utiliser plusieurs nœuds connectés via InfiniBand, vous constaterez une dégradation importante des performances. La communication entre nœuds est beaucoup plus lente que le NVLink intra-nœud, ce qui entraîne une surcharge du protocole réseau, une latence plus élevée et des limitations de bande passante. À mesure que vous ajoutez des GPU, chaque GPU doit se coordonner avec davantage de pairs, passant ainsi plus de temps à attendre la fin des transferts de données.
Conclusion
Suivez-moi sur X pour plus de contenu IA gratuit @l_cesconetto
Félicitations, vous êtes arrivé au bout ! Dans cet article, vous avez découvert :
- Les fondamentaux de la communication CPU-GPU et GPU-GPU :
- PCIe, NVLink, NVSwitch et InfiniBand
- Principes clés de conception pour le calcul GPU distribué
- Vous êtes désormais en mesure de prendre des décisions beaucoup plus éclairées lors de la conception de vos charges de travail d’IA.
Dans le prochain article de blog, nous plongerons dans notre première technique de parallélisme, le parallélisme de données distribuées.



