GPU Notebook
Guide de dimensionnement : ce qui tient vraiment sur 16 Go

- mesures relues dans 7 projets
- 18
- gain de la distillation vidéo (4 pas contre 16)
- ×7,8
- ralentissement quand le swap sature
- ×8,9
- pic du LoRA 9B : le seuil du GPU dédié, mesuré
- 12,3 Go
- Le problème
- Le choix d’un environnement de génération locale se fait souvent à l’impression ; il faut des valeurs mesurées, conditions comprises.
- Pour qui
- Les projets locaux du portfolio, et toute équipe qui doit dimensionner une machine de génération.
- Le résultat
- Un verdict par tâche tiré de 18 mesures réelles : image 7B en 141 s, vidéo distillée en 40 s, LLM 3B à 28–53 tok/s ; LoRA 1,2B en 18,6 min, LoRA 9B sur GPU dédié (pic 12,3 Go).
Contexte
La question d’un client qui veut « de l’IA en local » : qu’est-ce qui tient sur une machine de 16 Go, en combien de temps, et où faut-il louer un GPU ? Les projets du portfolio ont produit des mesures réelles ; ce projet les relit, les compare et en tire un verdict par tâche.
Ce que j’ai construit
- Bancs ComfyUI et LLM en bibliothèque standard : durée murale, mémoire, hachage des images, froid et chaud séparés.
- Synthèse automatique : un script relit 16 fichiers de mesure (CSV, JSON, journaux) et écrit le tableau, les graphiques en français et en anglais, avec la source de chaque chiffre.
- Guide de dimensionnement : verdict par tâche, réglage qui marche, seuil de passage sur GPU dédié, cinq règles tirées des mesures.
- Détection des pièges de banc : cache d’exécution ComfyUI (1 s, image bit-identique), débit GPU qui chute au 3e appel.
Architecture 6 briques
- 01 · EntréeConditionsMachine, versions, graphe et réglages enregistrés
- 02 · OutilBanc ComfyUItxt2img, durée murale, mémoire, hachage des images
- 03 · OutilBanc LLMllama-server, Metal contre CPU, cache de prompt coupé
- 04 · DonnéesMesuresCSV et JSON, une valeur par run, froid et chaud
- 05 · OutilSynthèse16 fichiers relus dans 7 projets, source de chaque chiffre gardée
- 06 · SortieGuide de dimensionnementVerdict par tâche, graphiques FR/EN, seuils GPU dédié
Fabrication 4 étapes
- MesurerChaque projet écrit ses durées et pics mémoire.
- RelireLe script retrouve les 18 mesures dans leurs fichiers.
- ComparerGraphiques durée et mémoire, FR et EN.
- ConseillerVerdict par tâche et seuils de passage.
Décisions le choix, la raison, l’alternative écartée
- D1Publier chaque run séparément, sans percentile sur quatre valeurs.
Une médiane cacherait l’écroulement du débit GPU dès le 3e appel chaud (52,9 → 30,0 → 28,2 tok/s).
ÉcartéDes moyennes ou des percentiles.
- D2Détecter le cache d’exécution de ComfyUI et l’exclure des moyennes.
Un graphe déjà calculé revient en 1 s avec une image bit-identique : un piège classique de banc.
ÉcartéTout moyenner sans contrôle.
- D3llama.cpp (llama-server) avec Qwen2.5-3B Q4_K_M, température 0, cache de prompt désactivé.
Le même serveur bascule entre GPU et CPU : les deux séries se comparent à conditions identiques.
ÉcartéOllama, écarté.
- D4Relire les chiffres dans les fichiers de mesure au lieu de les recopier.
Un guide de dimensionnement n’a de valeur que si chaque chiffre se retrouve dans sa source ; la synthèse se régénère après chaque nouvelle série.
ÉcartéUn tableau saisi à la main.
- D5Distinguer mémoire du processus et tampons Metal.
Chaque chiffre mémoire est étiqueté pour ce qu’il mesure : aucune valeur n’est présentée comme mémoire GPU sans mesure dédiée.
Résultats
Verdict par tâche — MacBook Pro M1 Pro 16 Go
| Tâche | En local ? | Réglage mesuré |
|---|---|---|
| Image 768², modèle 7B | oui, en lot | GGUF Q4 + 4 pas : 141 s (n = 55) |
| Retouche photo → master 3600×2400 | oui | workflow ComfyUI complet : 171 s |
| Clip vidéo 16 images | oui, distillé | 4 pas : 40 s (n = 8), pic 9,0 Go |
| Génération LLM 3B | oui | llama.cpp GPU : 28–53 tok/s |
| LoRA d’un LLM 1,2B | oui | 18,6 min, pic 2,2 Go |
| LoRA d’un LLM 9B | non | pic Metal 12,3 Go → GPU ≥ 24 Go |
Chaque valeur est relue dans le fichier qui l’a produite (colonne source du tableau de synthèse).
Qwen2.5-3B Q4_K_M, 128 jetons générés
| Run | Phase | Metal (tok/s) | CPU (tok/s) |
|---|---|---|---|
| 1 | froid | 52,5 | 10,0 |
| 2 | chaud | 52,9 | 12,0 |
| 3 | chaud | 30,0 | 12,8 |
| 4 | chaud | 28,2 | 21,1 |
Le débit GPU chute dès le 3e appel chaud : une moyenne l’aurait caché.
Livrables 4
- Banc ComfyUI et banc LLM en Python, bibliothèque standard.
- Quatre séries mesurées : SD 1.5 validation et à chaud, LLM sur Metal et sur CPU.
- Conditions complètes de chaque série : versions, graphe, réglages.
- Guide de dimensionnement, tableau de synthèse sourcé et deux graphiques en français et en anglais, régénérés en une commande.
Environnement
Matériel et conditions de mesure
- Toutes les mesures sur un MacBook Pro M1 Pro 16 Go, ComfyUI 0.41.0 et PyTorch sur MPS, en conditions de poste de travail réel : les écarts min–max sont affichés.
Reproduire commandes du README
Code privé : accès en lecture sous accord de confidentialité, ou démo en direct de 30 minutes. Demander l’accès →
cd portfolio/projets/p06-gpu-notebook
python3 guide/synthese.py # tableau + graphiques FR/EN, < 1 s
# nouvelle série image (ComfyUI lancé sur le port 8188) :
cd banc
python3 banc-comfyui.py --seeds 404,505,606 --steps 20 \
--prompt "wet dark basalt rock close-up, hard raking light, fine mist, mineral texture, photorealistic" \
--out ../mesures/AAAA-MM-JJ_nom-de-serie- MacBook Pro M1 Pro 16 Go, ComfyUI 0.41.0, PyTorch sur MPS.
- Durées mesurées sur un poste de travail réel : les écarts min–max sont affichés.
Galerie 2
Ce que ce projet change pour vous
Le même savoir-faire, sur votre sujet.
Dimensionner votre machine
Avant d’acheter ou de louer, je mesure vos tâches réelles sur le matériel envisagé, chaque run affiché avec ses conditions.
Choisir entre local et cloud
Des débits et des temps mesurés dans vos conditions, pour décider ce qui tourne chez vous et ce qui part ailleurs.
Des bancs reproductibles
Des scripts qui enregistrent versions et réglages : la mesure se refait à l’identique après chaque mise à jour.