GPU Notebook

Guide de dimensionnement : ce qui tient vraiment sur 16 Go

Rôle
Instrumentation, mesure et conseil
Outils
  • Python
  • ComfyUI
  • llama.cpp
  • mlx-lm
  • PyTorch MPS
  • SVG
Statut
Fonctionnel
Durée par livrable, tout en local : médiane et min–max sur les exécutions réelles, échelle logarithmique.
Durée par livrable, tout en local : médiane et min–max sur les exécutions réelles, échelle logarithmique.
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

  1. 01 · EntréeConditionsMachine, versions, graphe et réglages enregistrés
  2. 02 · OutilBanc ComfyUItxt2img, durée murale, mémoire, hachage des images
  3. 03 · OutilBanc LLMllama-server, Metal contre CPU, cache de prompt coupé
  4. 04 · DonnéesMesuresCSV et JSON, une valeur par run, froid et chaud
  5. 05 · OutilSynthèse16 fichiers relus dans 7 projets, source de chaque chiffre gardée
  6. 06 · SortieGuide de dimensionnementVerdict par tâche, graphiques FR/EN, seuils GPU dédié

Fabrication 4 étapes

  1. MesurerChaque projet écrit ses durées et pics mémoire.
  2. RelireLe script retrouve les 18 mesures dans leurs fichiers.
  3. ComparerGraphiques durée et mémoire, FR et EN.
  4. ConseillerVerdict par tâche et seuils de passage.

Décisions le choix, la raison, l’alternative écartée

  1. D1
    Publier 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.

  2. D2
    Dé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.

  3. D3
    llama.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é.

  4. D4
    Relire 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.

  5. D5
    Distinguer 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âcheEn local ?Réglage mesuré
Image 768², modèle 7Boui, en lotGGUF Q4 + 4 pas : 141 s (n = 55)
Retouche photo → master 3600×2400ouiworkflow ComfyUI complet : 171 s
Clip vidéo 16 imagesoui, distillé4 pas : 40 s (n = 8), pic 9,0 Go
Génération LLM 3Bouillama.cpp GPU : 28–53 tok/s
LoRA d’un LLM 1,2Boui18,6 min, pic 2,2 Go
LoRA d’un LLM 9Bnonpic 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

RunPhaseMetal (tok/s)CPU (tok/s)
1froid52,510,0
2chaud52,912,0
3chaud30,012,8
4chaud28,221,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

Pic mémoire par charge face aux 16 Go : au-delà de ~10 Go, la machine passe en swap, seuil du GPU dédié.
Durée par livrable, de 10 s (restauration ×4) à 5 min (vidéo non distillée).

Ce que ce projet change pour vous

Le même savoir-faire, sur votre sujet.

01

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.

02

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.

03

Des bancs reproductibles

Des scripts qui enregistrent versions et réglages : la mesure se refait à l’identique après chaque mise à jour.