La diffusione delle intelligenze artificiali di tipo generativo ha portato alla grande disponibilità di servizi del tipo prompt in, result out. Il numero di risultati disponibili si sta ampliando a dismisura, e oltre a testi in varie lingue (compresi linguaggi di programmazione) troviamo immagini, video, audio, modelli 3D e molti altri.
L’accesso a modelli AI preinstallati viene oggi chiamato model serving.
Questi servizi sono al momento basati su LLM (Large Language Models) proprietari, come GPT, Claude, Gemini, Groq, Perplexity, Midjourney, Stable Diffusion e molti altri, e modelli open source come quelli della famiglia Llama.
La fruizione di questi modelli comporta alcune scelte che influenzano prestazioni, risultati e la stessa eseguibilità. Per descriverli in maniera estremamente semplificata, per “comprendere” e poi “generare” testi in linguaggio naturale (e altri tipi di dato) questi sistemi hanno un modello che si basa su un elevato numero di parametri (svariati miliardi, billions in inglese) sui quali eseguono una gran quantità di calcoli. Questi calcoli possono essere eseguiti con diverse precisioni, espresse in bit, che definiscono quanto accurata è la rappresentazione numerica di ogni operazione.
Cos’è la precisione in bit?
In questo caso, quindi, la precisione è il numero di bit che rappresentano i numeri e per eseguire operazioni aritmetiche. Le precisioni più usate sono:
- FP32 (precisione a 32 bit). La rappresentazione classica dei numeri a virgola mobile su 32 bit, ossia 4 byte per numero. Questa è la precisione standard per molti calcoli in deep learning.
- FP16 (precisione a 16 bit). I numeri sono rappresentati con 16 bit, cioè la metà della precisione rispetto a FP32. FP16 è diventata sempre più popolare grazie alla sua capacità di ridurre il consumo di memoria e migliorare le prestazioni senza una perdita significativa di accuratezza nei modelli ben ottimizzati.
- INT8 (precisione con interi a 8 bit). I numeri sono rappresentati con 8 bit interi, anziché a virgola mobile. È utilizzata principalmente per modelli post-addestramento, quando si cerca di comprimere i modelli per esecuzioni più efficienti, riducendo significativamente la memoria e i costi computazionali.
- INT4 (precisione con interi a 8 bit). E’ questa una delle tecniche di quantizzazione più avanzate nel campo del deep learning. Al momento è molto usata in dispositivi di ridotte prestazioni hardware, come il mobile o l’edge
Come influisce la precisione sulle prestazioni degli LLM?
1. Uso della memoria
La precisione influisce direttamente sulla quantità di memoria necessaria per immagazzinare e processare i dati. Un modello con rappresentazione FP32 richiede il doppio della memoria rispetto a uno che usa FP16 e quattro volte quella di un modello che utilizza INT8. Di conseguenza, abbassare la precisione consente di gestire modelli più grandi o più batch di dati in memoria contemporaneamente.
2. Velocità di calcolo
La riduzione della precisione può velocizzare i calcoli. Le GPU e TPU attuali sono ottimizzate per eseguire operazioni a 16 bit o 8 bit molto più velocemente rispetto a quelle a 32 bit. Ciò porta a miglioramenti significativi nelle prestazioni durante l’inferenza e l’addestramento. FP16, ad esempio, è particolarmente popolare perché offre un buon equilibrio tra velocità e accuratezza.
3. Accuratezza e stabilità
La riduzione della precisione, però, può comportare una perdita di accuratezza. In FP16, ad esempio, la gamma di numeri rappresentabili è più limitata rispetto a FP32, e questo può introdurre errori di arrotondamento e instabilità numerica in alcuni calcoli, specialmente durante l’addestramento di modelli complessi come gli LLM. Per ovviare a questo c’è l’approccio misto, in cui alcune parti critiche del modello usano FP32, mentre altre usano FP16.
Con INT8, le perdite di precisione sono ancora più marcate. Tuttavia, grazie alle tecniche di quantizzazione e alla ricerca di ottimizzazioni specifiche, è possibile utilizzare INT8 durante la fase di inferenza senza compromettere troppo le prestazioni del modello.
Su dispositivi a basse prestazioni, con particolari attenzioni si può lavorare anche in INT4.
4. Efficienza energetica
Le precisioni più basse riducono il consumo energetico delle GPU e TPU, rendendo l’esecuzione dei modelli più sostenibile dal punto di vista energetico. Questo aspetto è cruciale quando si considerano grandi modelli come GPT-4, che possono richiedere enormi risorse computazionali.
Come calcolo la memoria richiesta?
L’hardware di esecuzione degli LLM, quindi GPU o TPU, comprende principalmente un chip di esecuzione e una certa quantità di memoria veloce. Poiché gli LLM occupano molta memoria, per poter fare inferenza è necessario avere a disposizione la quantità necessaria. È quindi indispensabile poter calcolare la quantità di memoria da allocare per non rischiare il blocco dell’esecuzione.
Come si calcola la memoria GPU necessaria per eseguire un LLM?
Sam Stoelinga su Substratus fornisce una semplice formula per calcolare la quantità di memoria usata:

M = 1.2*(P∗4B)/(32/Q)
- P (parametri): Il numero di parametri nel modello. Ad esempio, GPT-3 ha 175 miliardi di parametri, mentre Llama-70B ne ha 70 miliardi. Mettendo il valore dei parametri in miliardi, il risultato in memoria sarà in miliardi di byte, quindi in GB.
- Q (Precisione o Dimensione per parametro): Il tipo di dato usato per memorizzare i parametri del modello. I tipi di dati comuni già visti sono FP32 (4 byte per parametro), FP16 (2 byte), INT8 (1 byte) ed INT4 (mezzo byte).
- Fattore di overhead: Tiene conto della memoria aggiuntiva utilizzata durante l’inferenza, come la memorizzazione delle attivazioni (risultati intermedi) del modello. Un fattore di overhead tipico è del 20%, un valore ampio.
Vediamo degli esempi.
- Llama 70B, P = 70, con precisione Q = 16 bit
M = 1.2*(P∗4B)/(32/Q)
M = 168 GB
70*4=280
32/16=2
280/2=140
140*1.2= 168
Secondo questo calcolo, per eseguire questo modello con la dotazione standard di 80 GB per GPU servirebbero 3 GPU. Il fattore di overhead è però un numero empirico, per cui ha una tolleranza: si può infatti provare a far girare il modello su 2 moduli, per complessivi 160 GB.
2. Llama 8B, P = 8, con precisione Q = 4 bit
M = 1.2*(P∗4B)/(32/Q)
M = 4,8 GB
8*4=32
32/4=8
32/8=4
4*1.2= 4.8
La riduzione della precisione diminuisce la necessità di risorse, ma influisce sulla precisione dei risultati. L’approccio migliore va quindi valutato caso per caso.
Articoli correlati:
- Cloud Server High Memory: pronte le istanze a memoria elevata
- Linux: memoria e analisi a run-time
- Cloud Server Shared CPU: crea le tue vps per avere potenza di calcolo on demand
- LogWiper: falsificare il log degli accessi
- Il quarto potere degli oligopoli: come l’Italia può interrompere la dipendenza tecnologica da Big Tech
- Analisi della Polarizzazione Politica nei Modelli Linguistici di Intelligenza Artificiale


