Vai al contenuto

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