Prefill e Decode
Le due fasi dell'inferenza di un LLM. Il prefill elabora il prompt in ingresso ed è un lavoro di calcolo; il decode genera i token uno alla volta ed è limitato dalla banda di memoria. Per questo le due fasi rispondono a colli di bottiglia diversi e vanno misurate separatamente nell'Inferenza Locale. 1
Prefill: conta il calcolo (e il driver)
- Il prefill di prompt lunghi è il carico tipico di RAG, agenti e assistenti di coding: è come incollare un intero repository e chiedere al modello di valutarlo. 1
- Sul GEEKOM A9 Max (AMD Ryzen AI 9 HX 470, iGPU Radeon 890M, NPU da 50 TOPS) Alex Ziskind ha misurato con un modello da 14B un prefill di prompt lunghi circa 3 volte più veloce su Linux bare metal con il driver open source RADV che su Windows: un driver open source che batte quello proprietario di AMD sul suo stesso hardware. 1
- Su Windows il Lemonade Server di AMD ha ricette ibride che usano la NPU per il prefill e la GPU per il decode; nel decode è alla pari con llama.cpp Vulkan. 1
Decode: conta la banda di memoria
- Sul GEEKOM ogni backend su ogni sistema operativo si fermava allo stesso muro: la macchina aveva un solo banco di RAM, quindi lavorava in single channel con circa metà della banda prevista. Con due banchi (dual channel) ogni carico di decode è circa raddoppiato (Vulkan su Windows 2,13×, RADV su Linux oltre 2×, Ollama con ROCm 1,86×), arrivando a circa 9 tok/s su 14B, 17 su 7B e 37 su 3B. "Non puoi aggirare con il calcolo un collo di bottiglia di banda di memoria." 1
- Consiglio pratico di Ziskind: se un mini PC AMD è venduto in single channel (1× SODIMM), mettere in conto l'acquisto di una coppia di banchi uguali. 1
- Manolo Remiddi indica lo stesso limite sulla sua macchina con l'hardware del DGX Spark: molto stabile, ma la RAM non è abbastanza veloce e i token al secondo possono scendere a livelli frustranti. 2
- Le GPU NVIDIA hanno memoria GDDR7 e una banda molto superiore a quella delle Intel B60, quindi sono più veloci nella generazione dei token; vedi Intel B60. 3
Carichi compute-bound
La generazione video è compute-bound, non memory-bound: con LTX2 in ComfyUI una B70 (più potenza di calcolo) genera in 167 secondi contro circa 225 di una B60, e la VRAM in più non aiuta. 3 Vedi anche Generazione Video AI.
Sistema operativo e backend
- Su Windows Ollama ignora l'iGPU AMD e gira su CPU anche con Vulkan attivo; llama.cpp con Vulkan usa la GPU, con un guadagno dal 14% (1,5B) al 10% (14B). 1
- In WSL l'iGPU è invisibile finché non si installa il driver Mesa Dozen (repository kisak-mesa); dopo, llama.cpp Vulkan funziona ma cede circa un sesto del throughput rispetto a Windows nativo. 1
- Su Linux bare metal Ollama, llama.cpp Vulkan (RADV) e llama.cpp ROCm usano tutti la GPU e nel decode stanno entro pochi punti percentuali. 1
Vedi anche: Inferenza Locale, Speculative Decoding, DGX Spark
Fonti e Riferimenti
-
Fonte: Your OS Changes Everything for Local AI (Alex Ziskind) ↗ ↩↩↩↩↩↩↩↩↩
-
Fonte: The Local AI Hardware Mistake Everyone Makes (Manolo Remiddi) ↗ ↩
-
Fonte: 192GB of VRAM in One PC… The Cheap Way (Alex Ziskind) ↗ ↩↩