Linux, processus et GPU
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â leOOMKilleddu 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.
Pourquoi une boucle for Python n'exploite-t-elle pas le GPU ?