Pourquoi l’IA a dévoré le marché des GPU : l’explication la plus simple

Cet article vous a aidé ?

Vous n’avez pas perdu la réunion sur le budget GPU. La physique l’a fait. Et les chaînes d’approvisionnement. Et un écosystème logiciel qui a transformé les puces d’un fournisseur en le CPU par défaut de l’apprentissage automatique moderne.

Si vous avez essayé de vous procurer des GPU récemment, vous connaissez déjà les symptômes : des délais d’obtention qui semblent une plaisanterie, des alternatives « équivalentes » qui ne le sont pas, et un problème de file d’attente qui s’étend de l’approvisionnement à l’ordonnancement, à l’alimentation et au stockage. Vous ne pouvez pas réparer le marché. Mais vous pouvez le comprendre assez vite pour prendre des décisions sensées et empêcher la production de fondre.

L’explication la plus simple (et la vérité un peu ennuyeuse)

L’IA a « dévoré » le marché des GPU parce que le deep learning est une manière brutalement efficace de transformer du calcul en valeur produit, et les GPU sont le matériel le plus rentable que nous ayons pour cette conversion à grande échelle. Lorsqu’une seule catégorie de charge de travail peut consommer de manière rentable presque n’importe quelle quantité de calcul parallèle, cela n’augmente pas seulement la demande. Cela réécrit la définition de « suffisant ».

Trois forces agissent ensemble, et il vous faut les trois pour comprendre pourquoi le marché a craqué :

  1. Forme mathématique : l’entraînement et le service des réseaux neuronaux modernes sont surtout des multiplications de matrices géantes et des opérations vectorielles — un travail que les GPU réalisent de façon extraordinairement efficace.
  2. Bande passante mémoire : l’IA n’est pas que du calcul ; c’est déplacer des tenseurs. La High-Bandwidth Memory (HBM) et des bus larges sur le package sont le code de triche, et les GPU les possèdent.
  3. Logiciel + effets de réseau : CUDA, cuDNN, NCCL et une décennie d’outils faisaient qu’il était plus rapide de transformer le capex en modèles sur GPU que n’importe où ailleurs. Le marché a suivi le chemin de la moindre friction.

Une fois que quelques gros acteurs ont démontré que mettre à l’échelle des GPU faisait monter les revenus, tout le monde a suivi. Ce n’est pas du battage. Ce sont des incitations.

Une vérité opérationnelle sèche : autrefois nous achetions des accélérateurs pour accélérer des programmes. Maintenant nous achetons des accélérateurs pour accélérer des organisations. Le cluster GPU est une chaîne de production, et le produit est la vitesse d’itération.

Ce pour quoi les GPU sont réellement bons

Les GPU ne sont pas magiques. Ils représentent un échange très spécifique : un débit massif pour une classe étroite de travail parallèle, et une volonté de vous faire composer avec des contraintes (taille mémoire, bande passante mémoire, interconnexion, overhead de lancement de kernel, et une pile logicielle qui peut mordre).

Débit : le modèle des « nombreux petits travailleurs »

Un CPU, ce sont quelques travailleurs très capables avec de grosses boîtes à outils. Un GPU, ce sont des milliers de travailleurs plus restreints avec la même clé, qui tournent sur le même type de boulon. L’IA a la particularité d’être « beaucoup du même boulon », surtout pendant l’entraînement : multiplier des matrices, accumuler des gradients, répéter.

HBM : la star cachée du spectacle

Si vous ne regardez que les FLOPS, vous prendrez de mauvaises décisions. Beaucoup de vraies sessions d’entraînement sont limitées par la vitesse à laquelle vous pouvez déplacer poids et activations en mémoire. Les GPU couplent le calcul avec une très haute bande passante mémoire — particulièrement quand ils sont équipés de HBM. Ce n’est pas un détail marketing ; c’est souvent la différence entre 30 % d’utilisation et 90 % d’utilisation.

Interconnexion : la mise à l’échelle, c’est surtout du réseau

Dès que vous entraînez sur plusieurs GPU, vous arrêtez de « faire des maths » et vous commencez à « faire des systèmes distribués ». Synchroniser les gradients est un problème d’all-reduce. La différence entre PCIe seulement et NVLink/NVSwitch peut être la différence entre une mise à l’échelle réussie et un chaos total.

Voici le point opérationnel : acheter plus de GPU est parfois le moyen le plus rapide de découvrir que votre topologie réseau est mauvaise.

Pourquoi les charges de travail IA dominent tout

Historiquement, les GPU étaient un marché hétérogène : jeu vidéo, visualisation, un peu de HPC, quelques fermes de rendu. Ce marché était large mais fragmenté. L’IA en a fait un acheteur unique et vorace aux besoins standardisés : math dense, énorme bande passante mémoire, interconnexion rapide, pilotes stables et modèle de programmation prévisible.

L’entraînement est une marchandise en volume, l’inférence est une affaire de latence

L’IA a deux modes de production principaux :

  • Entraînement : maximiser le débit et l’efficacité de mise à l’échelle. Vous acceptez la batchabilité. Vous vous souciez de l’utilisation et du coût par token/échantillon.
  • Inférence : minimiser la latence et le coût par requête, sans violer le SLA. Vous vous souciez de la latence en queue (tail latency), de la stratégie de batching et de l’empreinte mémoire.

Les deux modes veulent des GPU, mais pour des raisons différentes :

  • L’entraînement veut la densité de calcul, la bande passante mémoire et l’interconnexion.
  • L’inférence veut souvent la capacité mémoire et une performance prévisible, car le modèle doit tenir et répondre rapidement.

Pourquoi les CPU n’ont pas suivi (pour la plupart de ces usages)

Les CPU se sont améliorés, les unités vectorielles ont progressé, et il existe des déploiements d’inférence sérieux sur CPU. Mais pour les grands modèles et l’entraînement à grande échelle, l’économie favorise les GPU : le « coût pour effectuer une unité d’algèbre linéaire dense » est meilleur sur GPU depuis longtemps, et les piles logicielles ont encore amplifié cet avantage.

Aussi : les pipelines IA modernes sont maintenant un problème de pile. Ce n’est pas « mon code tourne sur le silicium ». Ce sont des kernels CUDA, des opérations fusionnées, la précision mixte, des bibliothèques de communication, des compilateurs et des ordonnanciers d’exécution. La plateforme qui rend cela le moins pénible gagne la demande.

Petite boutade #1 : Acheter des GPU pour l’IA, c’est comme adopter un husky — vous ne le « possédez » pas, vous devenez responsable de son besoin quotidien de courir.

L’économie : un graphique simple à garder en tête

Imaginez un ratio simple :

Valeur produite par unité de temps ÷ coût par unité de temps.

L’IA a fait exploser ce ratio pour les entreprises qui pouvaient livrer une meilleure recherche, de meilleures recommandations, de meilleurs outils de code, un meilleur ciblage publicitaire, un meilleur support client, ou des produits entièrement nouveaux. Une fois que ce ratio devient suffisamment élevé, vous ne demandez plus « Avons-nous besoin de GPU ? » et commencez à demander « Combien en obtenir sans faire s’effondrer le datacenter ? »

La demande ne croît pas linéairement ; l’ambition augmente

Quand les GPU servaient au graphisme, on pouvait prévoir la demande avec les tendances consommateurs. Quand les GPU servent d’avantage concurrentiel, la demande devient stratégique. Si la prochaine itération de modèle peut améliorer vos métriques produit, vous allouez volontiers plus de budget d’entraînement. Votre concurrent fait de même. C’est ainsi que les marchés se font dévorer : pas par une seule percée, mais par une boucle de rétroaction.

L’offre est lente, et le packaging est le goulot

Même si la capacité silicium existe, les GPU haut de gamme dépendent d’un packaging avancé, de l’approvisionnement en HBM, de substrats et de capacités de test. Ce ne sont pas des ressources infinies, et vous ne pouvez pas simplement « en lancer » davantage du jour au lendemain. Les délais d’approvisionnement sont la manière dont le marché dit : le monde physique commande toujours.

La taxe opérationnelle : alimentation et refroidissement

Une armoire riche en GPU est une armoire à haute densité énergétique. Cela signifie que vos contraintes passent du « budget » aux « watts et BTU ». Beaucoup d’équipes découvrent — trop tard — que leur contrat de datacenter supposait un monde où des racks à 10–15 kW étaient normaux. Maintenant arrivent des racks à 30–60 kW, et soudainement votre déploiement est bloqué par des travaux d’installation, pas par l’approvisionnement matériel.

La pile logicielle qui a verrouillé la demande

On sous-estime combien le marché GPU est une histoire logicielle. Le matériel compte, mais le temps développeur compte davantage. La plateforme gagnante est celle qui vous offre le chemin le plus court de « j’ai une idée » à « ça s’entraîne la nuit et les métriques se sont améliorées ».

CUDA est un fossé fait d’outils et d’habitudes

L’écosystème CUDA a eu des années pour se renforcer : kernels, bibliothèques, profileurs, débogueurs, communication collective (NCCL), primitives de précision mixte et support fournisseur. La plupart des frameworks ML le supposent. Beaucoup d’optimisations de pointe y atterrissent en premier. Cela crée un gradient d’adoption : la solution la plus facile devient la solution par défaut, et l’approvisionnement suit.

La précision mixte a transformé « trop grand » en « possible »

Les tensor cores et l’entraînement en précision mixte ne sont pas que des ajustements de performance. Ils ont modifié l’échelle de modèles réalisables et rendu l’entraînement moins cher par unité de progrès. Quand les bonnes astuces numériques deviennent disponibles dans la pile grand public, la taille des modèles augmente. L’augmentation de la taille des modèles engendre plus de demande GPU. La demande entraîne plus d’investissement. La boucle se répète.

Entraînement distribué : un choix de bibliothèque peut changer votre burn rate

Les équipes traitent souvent la mise à l’échelle multi-GPU comme une case à cocher. Ce n’en est pas une. Votre choix entre data parallelism, tensor parallelism, pipeline parallelism et stratégie de communication peut multiplier le coût d’entraînement.

Et si votre all-reduce se bat contre votre topologie, aucun « plus de GPU » ne vous sauvera. Vous paierez juste pour une déception plus rapide.

Idée paraphrasée (attribuée) : Werner Vogels a plaidé pour construire des systèmes en supposant que des composants échoueront, afin que votre service continue de fonctionner quoi qu’il arrive.

Où se trouvent vraiment les goulets d’étranglement (indice : pas toujours le GPU)

En production, la « pénurie de GPU » est parfois juste une « sous-utilisation des GPU ». Avant de dépenser un million de plus, apprenez où passe votre temps. Il y a cinq points de congestion courants :

1) Pipeline d’entrée et stockage

Votre tâche d’entraînement ne peut pas s’entraîner si elle ne peut pas lire les données. Chargeurs de données, tempêtes de petits fichiers, systèmes de fichiers réseau, throttling d’object store et décompression peuvent affamer les GPU. Un cluster avec 80 % de temps GPU inactif est généralement une histoire de stockage et de CPU déguisée en GPU.

2) Prétraitement côté CPU

Tokenisation, augmentation, décodage, ingénierie des features, parsing JSON — tout cela peut devenir le facteur limitant. Si un thread CPU prépare des batches pour huit GPU, félicitations : vous avez construit un radiateur très coûteux.

3) Capacité mémoire GPU et fragmentation

Un OOM n’est pas toujours « modèle trop grand ». Parfois c’est la fragmentation de l’allocateur, plusieurs processus sur un GPU, ou un cache incontrôlé. Parfois c’est votre taille de batch. Parfois c’est une fuite mémoire dans une extension personnalisée. Diagnostiquez, ne devinez pas.

4) Saturation de l’interconnexion

L’entraînement multi-nœud est gourmand en communication. Si le fabric est sursouscrit ou mal configuré, l’efficacité de mise à l’échelle s’effondre. Surveillez les retries NCCL, les all-reduce lents et les temps de pas GPU déséquilibrés entre les ranks.

5) Throttling d’alimentation et thermique

Les GPU sont conçus pour atteindre des limites de puissance et thermique. Si votre datacenter est chaud, l’aération est mauvaise ou les plafonds de puissance sont mal réglés, le GPU diminuera sa fréquence. Il ne vous enverra pas de page. Il fera simplement moins de travail pendant que votre job dure plus longtemps.

Faits et contexte historique importants

  • Les GPU sont devenus du calcul général au milieu des années 2000 lorsque des développeurs ont commencé à réutiliser les pipelines graphiques pour des calculs non graphiques (la première ère GPGPU).
  • CUDA a été lancé en 2007, rendant la programmation GPU bien moins pénible que les hacks shader, et donnant une cible stable pour outils et bibliothèques.
  • AlexNet (2012) est largement crédité d’avoir rendu l’apprentissage profond accéléré par GPU « manifestement rentable » pour la vision par ordinateur, car il s’entraînait efficacement sur GPU.
  • La HBM est apparue au milieu des années 2010 et a changé le profil de performance des accélérateurs haut de gamme en augmentant fortement la bande passante mémoire.
  • Les tensor cores (fin des années 2010) ont poussé l’algèbre matricielle en précision mixte dans le mainstream, multipliant le débit effectif pour les charges d’entraînement.
  • NCCL a mûri pour devenir le standard des collectives GPU, rendant l’entraînement multi-GPU et multi-nœud viable pour plus d’équipes sans tuning MPI personnalisé.
  • Les modèles Transformer (2017 et après) ont orienté l’IA vers des charges qui montent agressivement avec le calcul et les données, accélérant la demande de gros clusters.
  • En 2020–2022, les perturbations de la chaîne d’approvisionnement mondiale plus la montée de la demande ont aggravé les délais, mais la vague IA n’a pas attendu patiemment les usines.
  • La densité énergétique des datacenters est devenue une limite primaire à mesure que les racks d’accélérateurs sont passés de « élevé » à « redesign d’installation ».

Trois mini-récits d’entreprise venus du terrain

Mini-récit n°1 : L’incident causé par une mauvaise hypothèse

Une entreprise SaaS de taille moyenne est passée d’un service d’inférence mono-GPU à un nœud multi-GPU pour réduire la latence tail. L’équipe a supposé que « plus de GPU » signifiait « plus de marge », et a planifié plusieurs réplicas de modèle par hôte. Ils ont aussi supposé que la topologie PCIe était uniformément performante.

Ce n’était pas le cas. La moitié des GPU partageaient un switch PCIe avec la NIC, et sous charge le modèle de trafic est devenu problématique. La latence P99 a commencé à dériver puis à faire des pics. Le service ne tombait pas en panne ; il est juste devenu peu fiable d’une façon perceptible par les clients. La personne on-call a constaté que l’utilisation GPU semblait « correcte », ce qui a retardé le bon diagnostic.

Finalement quelqu’un a lancé un contrôle de topologie et a réalisé que les réplicas les plus sollicités étaient épinglés sur des GPU ayant le pire chemin hôte→périphérique et périphérique→réseau. La correction n’a pas été héroïque : définir l’affinité GPU explicite, déplacer les réplicas réseau-intensifs vers les GPU avec meilleure localité PCIe, et arrêter la sur-souscription de l’E/S du nœud.

La leçon retenue : ne jamais supposer que le bus est « assez rapide ». Le bus est souvent le produit.

Mini-récit n°2 : L’optimisation qui a mal tourné

Un groupe de recherche était désespéré d’améliorer le débit d’entraînement ; ils ont donc augmenté les workers du dataloader, activé un caching agressif et passé à un taux de compression supérieur pour réduire les lectures de stockage. Les graphes GPU ont eu l’air meilleurs pendant une heure. Tout le monde a célébré.

Puis le nœud a commencé à swapper. Pas un peu. Beaucoup. Le cache compressé a gonflé en mémoire, le page cache s’est battu avec les buffers GPU pinnés, et le noyau a commencé à réclamer. L’utilisation CPU a grimpé en flèche tandis que le travail utile chutait. Le temps par step est devenu bruyant puis progressivement pire. Les jobs ont commencé à timeouter, et le scheduler du cluster a empilé des retries, donnant l’impression d’une « instabilité aléatoire ».

La correction a été ennuyeuse : plafonner la taille du cache, épingler moins de batches, réduire le nombre de workers et mesurer le temps de step de bout en bout plutôt que le « pourcentage GPU occupé ». Le pipeline optimisé avait optimisé le mauvais indicateur.

Ce mode d’échec est courant dans les systèmes IA : vous pouvez améliorer une étape au point d’amplifier le pire comportement de l’étape suivante. Félicitations, vous avez trouvé le vrai goulet en l’énervant.

Mini-récit n°3 : La pratique ennuyeuse mais correcte qui a sauvé la mise

Une entreprise fintech exécutait de l’inférence GPU pour le scoring antifraude. Rien de glamour : SLA strict, trafic régulier et une équipe sécurité qui lit les changelogs des pilotes comme des histoires du soir. Ils maintenaient des images golden par modèle de GPU, épinglaient les versions de pilote et validaient les combos CUDA/cuDNN dans un staging qui reproduisait le hardware de production.

Un week-end, un fournisseur a publié une mise à jour de sécurité urgente incluant un bump de pilote. Une autre équipe a essayé de la déployer massivement. L’équipe plateforme a résisté, parce qu’elle avait une règle : aucun changement de pilote GPU sans canari qui exécute une charge d’inférence réelle et vérifie à la fois la correction et la distribution de latence.

Le canari a échoué. Pas catastrophiquement — pire. Le nouveau pilote a introduit une régression de performance subtile sur leur mix de kernels exact. Sous charge, la latence P99 s’est dégradée suffisamment pour violer leur SLA. Parce qu’ils avaient des histogrammes de référence et du trafic de replay, ils l’ont détecté avant le déploiement global.

La correction a été d’appliquer la mise à jour de sécurité uniquement sur les nœuds CPU immédiatement, puis de planifier un déploiement GPU contrôlé avec atténuation (buffer de capacité, réglage des batches) et une version de pilote ultérieure. La pratique n’était pas excitante. C’était la différence entre un « week-end tranquille » et un « post-mortem avec les dirigeants ».

Mode d’emploi pour un diagnostic rapide

Si un job d’entraînement est lent ou si la latence d’inférence augmente, ne commencez pas par blâmer le modèle de GPU. Commencez par prouver où le temps est perdu. C’est l’ordre qui vous fait gagner des heures.

Premier point : les GPU sont-ils réellement occupés ?

  • Vérifiez l’utilisation et la consommation électrique.
  • Vérifiez si le job est lié au calcul ou à la mémoire.
  • Vérifiez si vous êtes en throttling (puissance/thermie).

Deuxième point : le pipeline de données nourrit-il correctement la bête ?

  • Mesurez le débit de lecture et les IOPS depuis le chemin des données.
  • Vérifiez la saturation CPU (en particulier un cœur chaud).
  • Recherchez les tempêtes de petits fichiers, le coût de décompression et la gigue du stockage réseau.

Troisième point : la mise à l’échelle multi-GPU fonctionne-t-elle, ou payez-vous la synchronisation ?

  • Contrôlez la topologie d’interconnexion et la largeur/vitesse des liens.
  • Surveillez les erreurs NCCL, les retries ou les collectives lentes.
  • Comparez le temps par rank ; le déséquilibre pointe souvent vers des problèmes de fabric ou des stragglers.

Quatrième point : l’ordonnanceur vous ment-il ?

  • Confirmez l’affectation GPU, les réglages MIG et les limites cgroup.
  • Vérifiez qu’il n’y a pas de « voisins invisibles » sur le même GPU ou la même NIC.
  • Vérifiez la locality NUMA si le prétraitement CPU est important.

Petite boutade #2 : Le GPU n’est jamais « inactif » ; il attend juste que le reste de votre architecture rattrape son retard.

Tâches pratiques : commandes, sorties, décisions

Voici les vérifications que je lance réellement (ou que je demande à quelqu’un de lancer) quand la performance, la capacité ou la stabilité sont en jeu. Chacune inclut la commande, ce que la sortie typique vous dit, et la décision suivante.

Task 1: Confirm the GPUs are visible and the driver is sane

cr0x@server:~$ nvidia-smi
Tue Jan 13 12:10:11 2026
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.14    Driver Version: 550.54.14    CUDA Version: 12.4               |
|-----------------------------------------+----------------------+----------------------|
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA A100-SXM4-80GB          On  | 00000000:41:00.0 Off |                    0 |
|  34%   56C    P0             265W / 400W|  61234MiB / 81920MiB |     92%      Default |
+-----------------------------------------+----------------------+----------------------+

Ce que cela signifie : versions driver/CUDA, modèle GPU, utilisation mémoire, utilisation et consommation. Si GPU-Util est bas mais la mémoire élevée, vous êtes peut-être lié à l’entrée ou à la synchronisation.

Décision : Si les GPU ne sont pas listés ou affichent des erreurs, arrêtez et corrigez les drivers/firmware/intégration du runtime container avant d’optimiser autre chose.

Task 2: Catch thermal or power throttling

cr0x@server:~$ nvidia-smi -q -d PERFORMANCE,POWER,TEMPERATURE | sed -n '1,120p'
Performance State                          : P0
Clocks Throttle Reasons
    Idle                                   : Not Active
    Applications Clocks Setting             : Not Active
    SW Power Cap                            : Not Active
    HW Slowdown                             : Active
    HW Thermal Slowdown                     : Active
Power Readings
    Power Draw                              : 395.12 W
    Power Limit                             : 400.00 W
Temperature
    GPU Current Temp                        : 86 C

Ce que cela signifie : « HW Thermal Slowdown: Active » vous indique que le GPU réduit ses fréquences. C’est une perte de performance réelle.

Décision : Corrigez le flux d’air, les courbes de ventilateurs, la température d’entrée ou la densité du rack avant d’acheter plus de GPU. Le throttling, c’est payer du matériel inutilisable.

Task 3: Validate NVLink connectivity (when applicable)

cr0x@server:~$ nvidia-smi nvlink -s
GPU 0: NVLink Status
    Link 0: 25 GB/s
    Link 1: 25 GB/s
GPU 1: NVLink Status
    Link 0: 25 GB/s
    Link 1: 25 GB/s

Ce que cela signifie : Les liens NVLink sont up et rapportent la bande passante attendue.

Décision : Si les liens sont down, n’envisagez pas des hypothèses de mise à l’échelle multi-GPU ; investiguez le seating matériel, le firmware ou le support plateforme.

Task 4: Check PCIe link width and speed

cr0x@server:~$ sudo lspci -s 41:00.0 -vv | egrep -i 'LnkCap|LnkSta'
LnkCap: Port #0, Speed 16GT/s, Width x16
LnkSta: Speed 16GT/s (ok), Width x16 (ok)

Ce que cela signifie : Si vous voyez x8 au lieu de x16, ou un GT/s plus faible, vous perdez de la bande passante.

Décision : Corrigez les réglages BIOS, les risers/câbles ou le placement dans les slots. Une négociation PCIe sous-optimale est un tueur silencieux de performance.

Task 5: Inspect GPU-to-CPU NUMA locality

cr0x@server:~$ nvidia-smi topo -m
        GPU0    GPU1    CPU Affinity    NUMA Affinity
GPU0     X      NV2     0-31            0
GPU1    NV2      X      0-31            0

Ce que cela signifie : Affinité CPU et mappage NUMA. Si le prétraitement est lourd, un mauvais placement NUMA augmente la latence et réduit le débit.

Décision : Épinglez les threads CPU et les dataloaders au nœud NUMA local aux GPU qu’ils alimentent.

Task 6: Look for GPU memory fragmentation pressure

cr0x@server:~$ nvidia-smi --query-compute-apps=pid,process_name,used_gpu_memory --format=csv
pid, process_name, used_gpu_memory [MiB]
23144, python, 61234 MiB

Ce que cela signifie : Confirme quel processus consomme la mémoire. Plusieurs processus peuvent fragmenter la mémoire et provoquer des OOM imprévisibles.

Décision : Si plusieurs PIDs partagent un GPU de manière inattendue, corrigez l’ordonnancement/isolation (paramètres device plugin Kubernetes, Slurm GRES ou placement systemd).

Task 7: Check CPU saturation and steal time (VMs or noisy neighbors)

cr0x@server:~$ mpstat -P ALL 1 3
Linux 6.5.0 (server)  01/13/2026  _x86_64_  (64 CPU)

12:11:02 PM  CPU   %usr %nice %sys %iowait %irq %soft %steal %idle
12:11:03 PM  all   780.0 0.0 90.0 15.0    0.0  5.0    0.0  10.0
12:11:03 PM   7    99.0 0.0  1.0  0.0    0.0  0.0    0.0   0.0

Ce que cela signifie : Un cœur à 99 % peut créer un goulot (tokenisation, décompression). Un %steal élevé suggère une contention de virtualisation.

Décision : Parallelisez le prétraitement, augmentez prudemment le nombre de workers, ou externalisez le prétraitement. Si %steal est élevé, déplacez vers des hôtes dédiés.

Task 8: Verify storage read throughput (local NVMe example)

cr0x@server:~$ sudo fio --name=readtest --filename=/mnt/datasets/.fio_test --rw=read --bs=1M --ioengine=libaio --direct=1 --numjobs=1 --iodepth=32 --size=4G --runtime=30 --time_based
read: IOPS=2850, BW=2850MiB/s (2988MB/s)(83.5GiB/30001msec)

Ce que cela signifie : Si vous vous entraînez depuis un NVMe local et que vous n’obtenez que quelques centaines de MiB/s, quelque chose ne va pas (options de montage, santé du device, système de fichiers).

Décision : Si la bande passante est en dessous des besoins du pipeline, corrigez le stockage ou mettez en cache les datasets localement avant d’optimiser les kernels GPU.

Task 9: Check network throughput to a data source (basic sanity)

cr0x@server:~$ iperf3 -c datahost -P 4 -t 10
[SUM]   0.00-10.00  sec  37.5 GBytes  32.2 Gbits/sec  sender
[SUM]   0.00-10.00  sec  37.4 GBytes  32.1 Gbits/sec  receiver

Ce que cela signifie : Confirme le débit atteignable. Si vous attendez 100 Gbit/sec et voyez 20–30, vous êtes bottleneck sur la config NIC, le switch ou l’hôte.

Décision : Corrigez MTU, bonding, config de port switch ou routage. L’entraînement distribué ne pardonne pas les liens faibles.

Task 10: Spot I/O wait as the silent GPU-starver

cr0x@server:~$ iostat -xz 1 3
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          18.40    0.00    6.10   32.50    0.00   42.90

Device            r/s     rkB/s   await  %util
nvme0n1        220.0  2800000.0   14.2   96.0

Ce que cela signifie : Un %iowait élevé et une utilisation device proche de 100 % indiquent une saturation du stockage. Le temps GPU inactif corrèle souvent.

Décision : Ajoutez du stockage plus rapide, shartez les datasets, augmentez la parallélisation de lecture prudemment, ou pré-stagez les données sur disques locaux.

Task 11: Check Kubernetes GPU allocation (if you run K8s)

cr0x@server:~$ kubectl describe pod infer-6c9c8d7f6f-kp2xw | sed -n '1,160p'
Limits:
  nvidia.com/gpu:  1
Requests:
  nvidia.com/gpu:  1
Node-Selectors:  gpu=true
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  2m    default-scheduler  Successfully assigned prod/infer-... to gpu-node-12

Ce que cela signifie : Confirme que le pod a demandé et obtenu un GPU, et où il a été placé.

Décision : Si les pods atterrissent sur des types de nœuds incorrects ou se disputent les GPU, corrigez les labels de nœud, taints/tolerations et la configuration du device plugin.

Task 12: Check for GPU resets or Xid errors in logs

cr0x@server:~$ sudo journalctl -k -S -2h | egrep -i 'NVRM|Xid|pcie|nvlink' | tail -n 20
Jan 13 10:44:02 server kernel: NVRM: Xid (PCI:0000:41:00): 79, GPU has fallen off the bus.
Jan 13 10:44:05 server kernel: pcieport 0000:00:03.1: AER: Corrected error received: id=00e1

Ce que cela signifie : « fallen off the bus » pointe souvent vers des problèmes de signal PCIe, firmware, événements d’alimentation ou défauts graves de driver.

Décision : Cessez de le traiter comme un bug applicatif. Impliquez le vendor/matériel, vérifiez BIOS/firmware, reseatez les cartes, validez l’alimentation et lancez des tests de burn-in.

Task 13: Validate GPU persistence mode and application clocks (when you mean to)

cr0x@server:~$ sudo nvidia-smi -pm 1
Enabled persistence mode for GPU 00000000:41:00.0.

Ce que cela signifie : Le mode persistence réduit l’overhead d’initialisation et peut stabiliser la latence pour certains workloads d’inférence.

Décision : Activez pour les services de longue durée ; pour des machines partagées interactives, évaluez l’impact et la politique.

Task 14: Verify hugepages / memory pressure that can hurt RDMA and performance

cr0x@server:~$ grep -E 'HugePages|MemAvailable' /proc/meminfo
MemAvailable:   18234564 kB
HugePages_Total:       0
HugePages_Free:        0

Ce que cela signifie : Un MemAvailable faible signifie que l’OS est sous pression ; les hugepages peuvent être requises pour certains setups RDMA/NIC ou tuning de performance.

Décision : Si la pression mémoire est élevée, réduisez le caching, corrigez les limites des containers ou augmentez la RAM. Si le RDMA requiert des hugepages, configurez-les explicitement.

Task 15: Confirm container runtime can see the GPU

cr0x@server:~$ docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.14    Driver Version: 550.54.14    CUDA Version: 12.4     |
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
|  0   NVIDIA A100 On         | 00000000:41:00.0 Off |                    0 |
+-----------------------------------------------------------------------------+

Ce que cela signifie : Si ceci échoue, les échecs de votre appli peuvent être de la plomberie et non du ML.

Décision : Corrigez NVIDIA Container Toolkit, la compatibilité driver/runtime et les permissions cgroup/device avant d’accuser le framework.

Erreurs courantes : symptôme → cause racine → correctif

1) « L’utilisation GPU est faible, mais le job est lent »

Symptôme : GPU-Util 10–40 %, temps de step élevé, CPU occupé ou iowait élevé.

Cause racine : Goulet du pipeline d’entrée : débit stockage, décompression, tokenisation ou contention du dataloader.

Correctif : Profilez le temps du dataloader ; pré-stagez les datasets sur NVMe local ; augmentez la parallélisation du prétraitement ; passez à des formats sharded/packed ; réduisez les lectures de petits fichiers.

2) « La mise à l’échelle multi-GPU se dégrade après ajout de nœuds »

Symptôme : 2 GPU plus rapides que 8 GPU ; ajouter des nœuds augmente le temps d’époque.

Cause racine : L’interconnexion ou le coût des collectives domine : all-reduce NCCL saturant le fabric, switches sursouscrits, mauvaise awareness de topologie.

Correctif : Validez la bande passante du fabric ; assurez les réglages NCCL corrects pour votre topologie ; évitez la sursouscription ; envisagez l’accumulation de gradients ou un changement de stratégie de parallélisme.

3) « OOM se produit aléatoirement même si la taille de batch est stable »

Symptôme : Même config parfois passe, parfois OOM après des heures.

Cause racine : Fragmentation mémoire, tenseurs fuitants, plusieurs processus par GPU ou croissance du cache.

Correctif : Assurez un processus par GPU sauf partition intentionnelle ; surveillez la mémoire par processus ; redémarrez les workers fuyants ; utilisez les réglages d’allocateur et le checkpointing.

4) « Les pics de latence d’inférence toutes les quelques minutes »

Symptôme : P50 stable, P99 fait des pics périodiques.

Cause racine : Jobs de fond provoquant contention PCIe/NVMe, pauses GC CPU, page reclaim du noyau ou changements d’horloge GPU.

Correctif : Isolez les hôtes d’inférence ; définissez un pinning CPU ; contrôlez le batcher ; activez le mode persistence ; supprimez les cron jobs bruyants ; ajustez les limites mémoire.

5) « Le nœud GPU plante ou se réinitialise sous charge »

Symptôme : Erreurs Xid, GPU tombe du bus, reboot du nœud, job d’entraînement meurt.

Cause racine : Problèmes d’alimentation, mauvais riser/câble, emballement thermique, firmware instable ou matériel marginal.

Correctif : Cherchez les logs Xid ; validez la stabilité des liens PCIe ; test de burn-in ; mettez à jour BIOS/firmware ; impliquez le vendor ; réduisez temporairement le power cap pour confirmer le soupçon.

6) « Nous avons acheté des GPU mais ne pouvons pas les déployer »

Symptôme : Le matériel arrive ; le déploiement est bloqué par les installations ou la conception du rack.

Cause racine : Les hypothèses sur la puissance/refroidissement étaient basées sur des racks de l’ère CPU.

Correctif : Planifiez les budgets de puissance au niveau rack tôt ; vérifiez les PDUs, le refroidissement, la contention et les limites des disjoncteurs ; modélisez les cas de panne (un CRAC en moins).

7) « Les GPUs alternatifs sont ‘équivalents’ mais la performance est pire »

Symptôme : Même code modèle, entraînement/inférence plus lent sur un autre fournisseur.

Cause racine : Différences de maturité des kernels/bibliothèques, opérations fusionnées manquantes, pile de communication moins optimisée ou bande passante mémoire effective moindre pour votre workload.

Correctif : Benchmarquez votre workload exact, pas des FLOPS synthétiques. Prévoir du temps d’ingénierie pour le portage et le tuning, ou n’espérez pas un plug-and-play.

Listes de contrôle / plan pas à pas

Checklist A : Avant d’acheter plus de GPU

  1. Mesurez le duty cycle GPU : si l’utilisation est faible, résolvez l’alimentation/IO avant de faire croître l’offre.
  2. Quantifiez le breakdown du temps de step : dataloader vs forward/backward vs all-reduce.
  3. Validez l’interconnexion : largeur/vitesse PCIe ; état NVLink ; bande passante du fabric pour multi-nœud.
  4. Vérifiez la marge thermique : assurez-vous qu’il n’y a pas de throttling aux températures ambiantes prévues.
  5. Vérifiez l’alimentation : budget rack, capacité PDU, alimentations redondantes et power caps.
  6. Confirmez l’alignement de la pile logicielle : versions driver/CUDA/framework reproductibles.

Checklist B : Première semaine d’un nouveau cluster GPU (faites-le même si c’est « temporaire »)

  1. Installez une image golden par modèle GPU ; conservez des builds immuables.
  2. Exécutez des tests de burn-in et surveillez les erreurs Xid et les alertes PCIe AER.
  3. Enregistrez une performance de référence : temps de step, tokens/sec, latence P99, consommation et thermiques.
  4. Validez la topologie : mapping NUMA, placement GPU, localité NIC et liens NVLink.
  5. Mettez en place l’observabilité : node exporter + DCGM metrics + timing au niveau job.
  6. Rédigez un runbook : que faire quand un GPU tombe du bus, tempêtes OOM ou hangs NCCL.

Checklist C : Durcissement des services d’inférence (préserver le SLA)

  1. Définissez le SLO en utilisant le P99 et le taux d’erreur, pas des moyennes.
  2. Implémentez le load shedding et le backpressure ; évitez les files d’attente infinies.
  3. Utilisez le batching explicite avec des caps ; mesurez l’impact sur la latence tail.
  4. Isolez les voisins bruyants : nœuds dédiés ou cgroups/quotas stricts.
  5. Canarisez les mises à jour pilotes/runtime avec du trafic de replay et des vérifications de correction.
  6. Gardez une réserve de capacité pour les déploiements et la réalité « un GPU est mort ».

Checklist D : Plan de stockage pour l’entraînement (parce que les GPU détestent attendre)

  1. Privilégiez les datasets sharded pour réduire l’overhead métadonnées et les lectures de petits fichiers.
  2. Pré-stagez sur NVMe local pour les époques répétées quand c’est possible.
  3. Mesurez les IOPS et le débit sous concurrence ; les benchmarks monocliens mentent.
  4. Surveillez le comportement du cache ; fixez des limites explicites pour éviter le chaos du page-reclaim.
  5. Alignez le format sur le pattern d’accès : les lectures séquentielles gagnent ; les lectures aléatoires perdent.

FAQ

1) Pourquoi ne peut-on pas juste utiliser des CPU pour tout ?

On peut pour de l’inférence légère et des modèles plus petits. Mais pour l’entraînement à grande échelle et l’inférence à haut débit, les GPU offrent un meilleur débit par watt et par dollar pour l’algèbre linéaire dense, en plus de kernels et bibliothèques matures.

2) La pénurie de GPU n’est-elle qu’une question de battage autour de l’IA ?

Non. Le battage peut gonfler des plans, mais le moteur sous-jacent est que les charges IA convertissent du calcul en valeur business mesurable. Quand cela arrive, la demande devient stratégique et persistante.

3) Quelle est la raison technique unique pour laquelle les GPU gagnent pour l’IA ?

La bande passante mémoire associée à un calcul massivement parallèle. Beaucoup de kernels IA sont sensibles à la bande passante ; la HBM et des chemins internes larges gardent les unités mathématiques alimentées.

4) Pourquoi NVLink/NVSwitch compte-t-il autant ?

Parce que l’entraînement distribué passe beaucoup de temps à synchroniser paramètres et gradients. Des liens GPU→GPU plus rapides réduisent l’overhead de communication et améliorent l’efficacité de la mise à l’échelle.

5) Pourquoi des accélérateurs « équivalents » sous-performent-ils souvent ?

Maturité logicielle. Fusion de kernels, bibliothèques, compilateurs et piles de communication demandent des années pour se solidifier. Si le fast path de votre framework suppose un écosystème, les alternatives peuvent emprunter un slow path.

6) Que dois-je surveiller sur les nœuds GPU en production ?

Au minimum : utilisation GPU, usage mémoire, consommation électrique, température, raisons de throttling, erreurs ECC/Xid, état des liens PCIe et histogrammes de temps de step ou de latence au niveau job.

7) Comment savoir si je suis lié au calcul ou à l’entrée ?

Si l’utilisation GPU et la consommation sont faibles tandis que CPU/iowait est élevé, vous êtes probablement lié à l’entrée. Si les GPU sont saturés et le temps par step stable, vous êtes plutôt lié au calcul. Confirmez avec le timing du pipeline à l’intérieur du job.

8) Pourquoi des pics de latence d’inférence surviennent-ils même lorsque l’utilisation moyenne GPU est faible ?

La latence tail est sensible à la mise en file, au comportement du batcher, aux pauses CPU, au page reclaim et à la contention PCIe/NVMe. Un GPU majoritairement inactif ne garantit pas des temps de réponse consistants.

9) Quelle est la façon la plus sûre de déployer des mises à jour de pilotes GPU ?

Canary sur du hardware identique avec trafic de replay. Validez la correction et la distribution de latence. Puis déployez progressivement avec buffer de capacité. Traitez les pilotes comme des mises à jour de noyau : puissants, risqués, et pas une activité du vendredi après-midi.

10) Quelle est la façon la plus rapide de gaspiller de l’argent sur des GPU ?

Les acheter avant d’avoir validé l’alimentation, le refroidissement, le débit de stockage, le fabric réseau et votre capacité à maintenir la pile logicielle stable. Le matériel arrivera à l’heure ; votre préparation, non.

Prochaines étapes à réaliser cette semaine

Si vous êtes responsable de la fiabilité des systèmes supportés par GPU — ou de faire un plan d’approvisionnement qui ne va pas imploser — faites ces actions. Elles sont pratiques et efficaces.

  1. Mesurez un workload réel sur votre hardware actuel : temps de step, tokens/sec, latences P95/P99, consommation et thermiques.
  2. Exécutez le playbook de diagnostic rapide sur un job lent et un job « sain ». Notez les différences.
  3. Prouvez que votre chemin de données peut nourrir les GPU : débit stockage et capacité de prétraitement CPU sous concurrence.
  4. Cartographiez la topologie (PCIe, NUMA, NVLink) et documentez-la. Puis épinglez volontairement les workloads.
  5. Implémentez un runbook GPU minimal : procédures pour erreurs Xid, tempêtes OOM, hangs NCCL et throttling thermique.
  6. Arrêtez d’acheter sur la base des FLOPS. Achetez sur le débit de bout en bout pour votre workload exact, plus le coût opérationnel de le garder stable.

Le marché des GPU n’a pas craqué parce que tout le monde est devenu irrationnel. Il a craqué parce que les charges IA sont rationnellement affamées, et que le chemin le plus rapide pour les livrer a été en forme de GPU depuis des années. Traitez les GPU comme une dépendance de production, pas comme un luxe. Construisez les systèmes ennuyeux autour d’eux : alimentation, refroidissement, stockage, ordonnancement et contrôle du changement. C’est ainsi que vous transformez une rareté en production prévisible.

← Précédent
La surveillance des fichiers Docker est cassée dans les conteneurs : réparer le rechargement à chaud de dev de façon fiable
Suivant →
Rebonds d’e-mails : lire les codes de rebond comme un pro (et corriger la cause racine)

Laisser un commentaire