learn.chetana.fr

Linux, processus et GPU

13 min readCore

Le GPU n'est pas un CPU plus rapide

Un CPU moderne : ~16 cƓurs complexes, excellents pour du code branchu et sĂ©quentiel. Un GPU : des milliers de cƓurs simples, excellents pour appliquer la mĂȘme opĂ©ration Ă  des millions de nombres en parallĂšle. Or le ML, c'est prĂ©cisĂ©ment ça : des multiplications de matrices gĂ©antes.

CPU : 16 chefs Ă©toilĂ©s    → parfaits pour 16 plats compliquĂ©s diffĂ©rents
GPU : 10 000 commis       → imbattables pour Ă©plucher 10 000 pommes de terre identiques

ConsĂ©quence directe : un code ML est rapide s'il formule le problĂšme en opĂ©rations matricielles (on dit « vectorisĂ© »). Une boucle for Python qui traite les Ă©lĂ©ments un Ă  un n'utilise ni le GPU, ni mĂȘme les instructions SIMD du CPU.

La VRAM : ta nouvelle métrique de prod

Sur ton backend, tu surveilles RAM et CPU. En ML, la ressource critique est la VRAM (mémoire du GPU) :

  • les poids du modĂšle doivent y tenir (un modĂšle 7B en float16 ≈ 14 Go) ;
  • l'activation de chaque requĂȘte en cours s'y ajoute (le KV-cache d'un LLM grossit avec la longueur du contexte) ;
  • dĂ©passement = CUDA out of memory — le OOMKilled du ML, sauf qu'il arrive en pleine requĂȘte.

Ton htop ne montre rien de tout ça : l'outil est nvidia-smi (utilisation GPU %, VRAM occupée, processus).

Processus, conteneurs et le GPU

Les mĂ©caniques Linux que tu connais s'appliquent, avec une subtilitĂ© : le GPU est un pĂ©riphĂ©rique (/dev/nvidia*). Un conteneur Docker n'y accĂšde que si on le lui passe explicitement (--gpus all, via le NVIDIA Container Toolkit). En Kubernetes, le GPU est une ressource dĂ©clarĂ©e (nvidia.com/gpu: 1) — non partageable par dĂ©faut : un pod = un GPU entier, d'oĂč l'importance de bien le saturer (retour au batching !).

Quantization : faire tenir l'éléphant

RĂ©duire la prĂ©cision des poids (float32 → float16 → int8 → int4) divise la VRAM nĂ©cessaire, avec une perte de qualitĂ© souvent nĂ©gligeable. C'est LA technique qui permet de servir un gros modĂšle sur un GPU modeste — l'Ă©quivalent ML de la compression gzip : un compromis taille/fidĂ©litĂ© que tu choisis.

đŸ§© Quiz1/4

Pourquoi une boucle for Python n'exploite-t-elle pas le GPU ?

🃏 Flashcards1/5