Two speeds that matter
Le débit de decode est la vitesse à laquelle le modèle génère des tokens après avoir commencé à répondre, mesuré en tokens par seconde (tok/s). Il détermine la rapidité avec laquelle une réponse de chat ou une complétion de code apparaît à l’écran. La latence de prefill est le temps que le modèle prend pour traiter votre entrée avant de générer le 1er token, mesuré en millisecondes par token (ms/token). Elle détermine la pause entre appuyer sur Entrée et voir la sortie commencer à défiler. Différentes charges de travail privilégient différentes vitesses :Le temps jusqu’au premier token (TTFT) combine la latence de prefill avec tout délai de planification ou de file d’attente. Pour un seul utilisateur sur du matériel local, le TTFT est approximativement égal au temps de prefill. Sous charge concurrente, la mise en file d’attente s’ajoute au TTFT indépendamment.
What precision means for speed
La précision contrôle combien de bits représentent chaque poids dans le modèle. Moins de bits signifie des poids plus petits, ce qui change 2 choses : la quantité de mémoire que le modèle occupe et la quantité de données que le GPU lit par token.How precision affects decode vs prefill differently
C’est l’idée clé : le decode et le prefill touchent différents goulots d’étranglement matériels, donc le même changement de précision les affecte de manière inégale.Decode is memory-bandwidth-bound
Pendant le decode, le modèle génère 1 token à la fois. Pour chaque token, il lit la matrice de poids entière depuis la mémoire et effectue un petit amount de calcul par poids. Le GPU passe la plupart de son temps à attendre que les données arrivent de la mémoire, pas à faire des calculs. Des poids plus petits = moins de données à lire = decode plus rapide. L’accélération est approximativement proportionnelle à la réduction de mémoire :- FP16 → FP8 : ~1.8-2.0x decode speedup
- FP16 → INT4 : ~2.5-3.5x decode speedup
- FP16 → NVFP4 : ~2.5-3.0x decode speedup
Prefill is compute-bound
Pendant le prefill, le modèle traite tous les tokens d’entrée en parallèle. Il lit les poids une fois mais effectue une grande multiplication matricielle sur tous les tokens du prompt. Le GPU passe la plupart de son temps à faire des calculs, pas à attendre la mémoire. La quantification aide moins le prefill car le calcul est le goulot d’étranglement, pas les lectures de poids :- FP16 → FP8 : ~1.3-1.5x prefill speedup
- FP16 → INT4 : ~1.2-1.5x prefill speedup
- FP16 → NVFP4 : ~1.3-1.5x prefill speedup
Practical implication
Quand la précision diminue, le decode s’améliore plus vite que le prefill. À INT4, un modèle qui semblait lent en FP16 génère du texte rapidement mais fait toujours une pause notable sur les prompts longs. Cette asymétrie guide les recommandations ci-dessous par charge de travail.Power draw across precision levels
Une précision plus basse réduit la consommation d’énergie pour 2 raisons : moins de lectures mémoire (l’accès mémoire domine le coût énergétique) et une arithmétique plus simple (une multiplication INT4 coûte moins cher qu’une multiplication FP16).DGX Spark power envelope
La puce GB10 de DGX Spark a un TDP d’environ 40W partagé entre le CPU Grace et le GPU Blackwell. Voici les plages de puissance observées pendant l’inférence :Consumer GPU power expectations
Cost of 24/7 serving
Pour un DGX Spark tournant en continu en charge de decode :
Sur un GPU grand public comme le RTX 4090 à 10 heures/jour :
Benchmark methodology
Lancez ces tests sur votre propre configuration pour voir comment la précision affecte votre modèle et votre matériel spécifiques.Measure decode throughput
Générez un nombre fixe de tokens de sortie depuis un prompt court et mesurez les tokens par seconde.Measure prefill latency
Mesurez le temps que le modèle prend pour produire son 1er token à différentes longueurs de prompt.Measure power draw
What to report
Remplissez ce tableau pour chaque niveau de précision que vous testez :Real-world decision table
Choisissez la ligne qui correspond à votre charge de travail principale :Why not always use INT4?
Why not always use INT4?
La quantification INT4 (GPTQ, AWQ, Q4_K_M) réduit la qualité de manière notable sur les modèles plus petits et les tâches de suivi d’instructions. Sur les modèles de moins de 13B paramètres, l’écart de qualité entre FP16 et INT4 peut dégrader la sortie. Sur les modèles 70B+, l’écart se réduit car le modèle a plus de capacité pour absorber le bruit de quantification. Testez votre modèle spécifique avant de vous engager.
Does KV cache precision affect these numbers?
Does KV cache precision affect these numbers?
Oui. Le cache KV FP8 (défini avec
--kv-cache-dtype fp8 dans vLLM) réduit de moitié la mémoire du cache KV indépendamment de la quantification des poids. Il a un impact minimal sur la vitesse de decode mais vous permet de faire tenir des contextes plus longs ou plus d’utilisateurs simultanés. Voir DGX Spark memory tuning pour les tableaux de dimensionnement.How does context length change decode speed?
How does context length change decode speed?
Le decode lit le cache KV entier à chaque token. Les conversations plus longues construisent des caches plus grands, donc le decode ralentit à mesure que le contexte grandit. Un modèle à 4K de contexte peut générer à 40 tok/s mais chuter à 25 tok/s à 32K de contexte sur le même matériel. Voir KV cache and context pour la mécanique.
Quick benchmark commands
Utilisez-les comme points de départ pour comparer les précisions sur un seul modèle.vLLM benchmark suite
llama.cpp benchmark
Ollama built-in evaluation
Compare across precisions
Lancez le même prompt à chaque précision et notez les résultats dans un tableau :Next steps
DGX Spark memory tuning
Dimensionnement du cache KV, compromis de lots et paramètres d’ajustement pour 128GB de mémoire unifiée.
vLLM on DGX Spark
Installation, configuration NVFP4 et commandes de lancement optimales.
Test your deployment
Tests de bout en bout via Tokios — latence, streaming et comparaison de clients.
Quantization concepts
Explication approfondie de GPTQ, AWQ, GGUF et des compromis de quantification.