Risposta breve: per ottimizzare i modelli di intelligenza artificiale, scegli un vincolo primario (latenza, costo, memoria, qualità, stabilità o throughput), quindi acquisisci una baseline affidabile prima di apportare modifiche. Rimuovi prima i colli di bottiglia della pipeline, quindi applica miglioramenti a basso rischio come precisione mista e batching; se la qualità persiste, passa agli strumenti di compilazione/runtime e solo allora riduci le dimensioni del modello tramite quantizzazione o distillazione, quando necessario.
Punti chiave:
Vincolo : scegli una o due metriche target; l'ottimizzazione è un panorama di compromessi, non di vittorie gratuite.
Misurazione : profilazione di carichi di lavoro reali con p50/p95/p99, throughput, utilizzo e picchi di memoria.
Pipeline : correggi la tokenizzazione, i caricatori di dati, la pre-elaborazione e il batching prima di toccare il modello.
Serving : utilizzare la memorizzazione nella cache, il batching deliberato, l'ottimizzazione della concorrenza e tenere d'occhio la latenza di coda.
Guardrail : esegui prompt d'oro, metriche delle attività e controlli a campione dopo ogni modifica delle prestazioni.

🔗 Come valutare efficacemente i modelli di intelligenza artificiale
Criteri e passaggi chiave per giudicare i modelli in modo equo e affidabile.
🔗 Come misurare le prestazioni dell'IA con parametri reali
Utilizza benchmark, latenza, costi e segnali di qualità per effettuare confronti.
🔗 Come testare i modelli di intelligenza artificiale prima della produzione
Flusso di lavoro pratico dei test: suddivisione dei dati, casi di stress e monitoraggio.
🔗 Come usare l'intelligenza artificiale per la creazione di contenuti
Trasforma le idee in bozze più velocemente con prompt strutturati e iterazioni.
1) Cosa significa "Ottimizza" in pratica (perché ognuno lo usa in modo diverso) 🧠
Quando si dice "ottimizzare un modello di intelligenza artificiale", si potrebbe intendere:
-
Rendilo più veloce (latenza inferiore)
-
Renderlo più economico (meno ore GPU, minore spesa cloud)
-
Riduci le dimensioni (ingombro della memoria, distribuzione edge)
-
Renderlo più accurato (miglioramenti della qualità, meno allucinazioni)
-
Renderlo più stabile (meno varianza, meno guasti nella produzione)
-
Semplificare il servizio (rendimento, batching, prestazioni prevedibili)
Ecco la verità, anche se un po' fastidiosa: non è possibile massimizzare tutti questi aspetti contemporaneamente. L'ottimizzazione è come spremere un palloncino: spingi un lato dentro e l'altro fuoriesce. Non sempre, ma abbastanza spesso da dover prevedere dei compromessi.
Quindi, prima di toccare qualsiasi cosa, scegli il tuo vincolo primario :
-
Se stai servendo gli utenti in tempo reale, tieni in considerazione la latenza p95 ( percentili AWS CloudWatch ) e le prestazioni finali ( best practice per la "latenza finale" ) 📉
-
Se ti stai allenando, tieni in considerazione il rapporto qualità-tempo e l'utilizzo della GPU 🔥
-
Se stai distribuendo su dispositivi, tieni in considerazione RAM e potenza 🔋
2) Come si presenta una buona versione dell'ottimizzazione del modello di intelligenza artificiale ✅
Una buona versione dell'ottimizzazione non è semplicemente "applica la quantizzazione e prega". È un sistema. Le configurazioni migliori di solito prevedono:
-
Una base di riferimento di cui ti fidi.
Se non riesci a riprodurre i tuoi risultati attuali, non puoi sapere di aver migliorato qualcosa. Semplice... ma la gente lo salta. E poi precipita. -
Un obiettivo preciso, ovvero
"Più veloce", è vago. "Ridurre la latenza p95 da 900 ms a 300 ms con lo stesso punteggio di qualità" è un obiettivo reale. -
Barriere di sicurezza per la qualità
Ogni vittoria in termini di prestazioni rischia di causare una regressione silenziosa della qualità. Servono test, valutazioni o almeno una suite di analisi di sanità mentale. -
Consapevolezza dell'hardware
Un modello "veloce" su una GPU può rallentare su un'altra. Le CPU sono un caos a sé stante. -
Cambiamenti iterativi, non una riscrittura radicale
Quando modifichi cinque cose contemporaneamente e le prestazioni migliorano, non sai perché. Il che è... inquietante.
L'ottimizzazione dovrebbe essere come accordare una chitarra: piccoli aggiustamenti, ascoltare attentamente, ripetere 🎸. Se ti sembra di destreggiarti tra coltelli, qualcosa non va.
3) Tabella comparativa: opzioni popolari per ottimizzare i modelli di intelligenza artificiale 📊
Di seguito è riportata una tabella comparativa rapida e un po' disordinata degli strumenti/approcci di ottimizzazione più comuni. No, non è del tutto "giusta" - nemmeno la vita reale lo è.
| Strumento / Opzione | Pubblico | Prezzo | Perché funziona |
|---|---|---|---|
PyTorch torch.compile ( documentazione PyTorch ) |
Ragazzi di PyTorch | Gratuito | I trucchi per catturare grafici e compilare possono ridurre i costi generali... a volte è magia ✨ |
| ONNX Runtime ( documentazione ONNX Runtime ) | Squadre di distribuzione | Gratuito | Ottime ottimizzazioni di inferenza, ampio supporto, ottimo per la distribuzione standardizzata |
| TensorRT ( documentazione NVIDIA TensorRT ) | Distribuzione NVIDIA | Vibrazioni a pagamento (spesso in bundle) | Fusione del kernel aggressiva + gestione precisa, molto veloce quando fa clic |
| DeepSpeed ( documentazione ZeRO ) | Squadre di formazione | Gratuito | Ottimizzazioni di memoria e throughput (ZeRO ecc.). Può sembrare un motore a reazione |
| FSDP (PyTorch) ( documentazione PyTorch FSDP ) | Squadre di formazione | Gratuito | Parametri/gradienti dei frammenti, rendono i modelli grandi meno spaventosi |
| quantizzazione bitsandbytes ( bitsandbytes ) | Gli sperimentatori dell'LLM | Gratuito | Peso dei bit basso, enorme risparmio di memoria: la qualità dipende, ma uff 😬 |
| Distillazione ( Hinton et al., 2015 ) | Team di prodotto | “Tempo-costo” | Il modello studentesco più piccolo eredita il comportamento, solitamente il miglior ROI a lungo termine |
| Potatura ( tutorial sulla potatura con PyTorch ) | Ricerca + produzione | Gratuito | Rimuove il peso morto. Funziona meglio se abbinato al riaddestramento |
| Flash Attention / kernel fusi ( articolo FlashAttention ) | Appassionati di performance | Gratuito | Attenzione più rapida, migliore comportamento della memoria. Una vera vittoria per i Transformers |
| Triton Inference Server ( batch dinamico ) | Ops/infra | Gratuito | Produzione, servizio, batching, pipeline multi-modello: sembra aziendale |
Confessione di una stranezza di formattazione: "Prezzo" non è un termine appropriato perché l'open source può comunque costare un fine settimana di debug, il che è... un prezzo. 😵💫
4) Inizia con la misurazione: crea un profilo come se lo pensassi davvero 🔍
Se vuoi fare solo una cosa in questa guida, fallo: misura correttamente.
Nei miei test, le più grandi "svolte di ottimizzazione" sono derivate dalla scoperta di qualcosa di imbarazzantemente semplice come:
-
caricatore dati che affama la GPU
-
Collo di bottiglia della pre-elaborazione della CPU
-
piccole dimensioni dei batch che causano un sovraccarico nell'avvio del kernel
-
tokenizzazione lenta (i tokenizzatori possono essere dei cattivi silenziosi)
-
frammentazione della memoria ( note sull'allocatore di memoria CUDA PyTorch )
-
un singolo strato che domina il calcolo
Cosa misurare (set minimo)
-
Latenza (p50, p95, p99) ( SRE sui percentili di latenza )
-
Capacità di elaborazione (token/sec, richieste/sec)
-
Utilizzo della GPU (calcolo + memoria)
-
Picchi VRAM / RAM
-
Costo per 1k token (o per inferenza)
Mentalità di profilazione pratica
-
Descrivi uno scenario che ti interessa (non un suggerimento giocattolo).
-
Annota tutto in un piccolo "diario delle prestazioni".
Sì, è noioso... ma ti evita di farti prendere in giro in seguito.
(Se si desidera uno strumento concreto da cui iniziare: PyTorch Profiler ( torch.profiler docs ) e Nsight Systems ( NVIDIA Nsight Systems ) sono i soliti sospetti.)
5) Ottimizzazione dei dati e della formazione: la superpotenza silenziosa 📦🚀
Le persone sono ossessionate dall'architettura del modello e dimenticano la pipeline. Nel frattempo, la pipeline brucia silenziosamente metà della GPU.
Vittorie facili che si vedono subito
-
Utilizza una precisione mista (FP16/BF16 dove stabile) ( PyTorch AMP / torch.amp ).
Solitamente più veloce, spesso buono, ma fai attenzione alle stranezze numeriche. -
Accumulo di gradienti quando la dimensione del batch è limitata ( 🤗 Guida Accelerate )
Mantiene stabile l'ottimizzazione senza far esplodere la memoria. -
Il checkpointing del gradiente ( torch.utils.checkpoint )
scambia il calcolo con la memoria, rendendo possibili contesti più ampi. -
Tokenizzazione efficiente ( 🤗 Tokenizzatori )
La tokenizzazione può diventare il collo di bottiglia su larga scala. Non è affascinante; è importante. -
Ottimizzazione del dataloader:
più worker, memoria bloccata, prefetching: poco appariscente ma efficace 😴➡️💪 ( Guida all'ottimizzazione delle prestazioni di PyTorch )
Ottimizzazione efficiente dei parametri
Se si stanno perfezionando modelli di grandi dimensioni, i metodi PEFT (come gli adattatori in stile LoRA) possono ridurre notevolmente i costi di addestramento, pur rimanendo sorprendentemente robusti ( 🤗 Guida PEFT sui Transformers , articolo su LoRA ). Questo è uno di quei momenti in cui ti chiedi "perché non l'abbiamo fatto prima?".
6) Ottimizzazione a livello di architettura: dimensionare correttamente il modello 🧩
A volte il modo migliore per ottimizzare è... smettere di usare un modello troppo grande per il lavoro. Lo so, è un sacrilegio 😄.
Prendi in considerazione alcuni aspetti fondamentali:
-
Decidi se hai bisogno di un'intelligenza generale completa o di uno specialista.
-
Mantieni la finestra del contesto grande quanto necessario, non più grande.
-
Utilizzare un modello addestrato per il lavoro da svolgere (modelli di classificazione per lavori di classificazione e così via).
Strategie pratiche di dimensionamento corretto
-
Passare a un backbone più piccolo per la maggior parte delle richieste
, quindi instradare le "query difficili" a un modello più grande. -
Usa una configurazione a due fasi:
bozze di modelli veloci, verifiche o modifiche più efficaci.
È come scrivere con un amico esigente: fastidioso, ma efficace. -
Riduci la lunghezza dell'output.
I token di output costano denaro e tempo. Se il tuo modello è discontinuo, paghi per il divario.
Ho visto team tagliare drasticamente i costi imponendo tempi di produzione più brevi. Sembra meschino. Funziona.
7) Ottimizzazioni del compilatore e del grafico: da dove deriva la velocità 🏎️
Questo è il livello "fai in modo che il computer faccia cose più intelligenti".
Tecniche comuni:
-
Fusione degli operatori (combinazione dei kernel) ( NVIDIA TensorRT “fusione di livelli” )
-
Piegatura costante (precalcolo dei valori fissi) ( ottimizzazioni del grafico di runtime ONNX )
-
Selezione del kernel sintonizzata sull'hardware
-
Acquisizione di grafici per ridurre il sovraccarico di Python ( panoramica
di torch.compile)
In parole povere: il tuo modello potrebbe essere veloce matematicamente, ma lento operativamente. I compilatori risolvono alcuni di questi problemi.
Note pratiche (anche note come cicatrici)
-
Queste ottimizzazioni possono essere sensibili alle modifiche della forma del modello.
-
Alcuni modelli accelerano molto, altri si muovono appena.
-
A volte si verifica un aumento di velocità e un bug enigmatico, come se fosse entrato un gremlin 🧌
Tuttavia, quando funziona, è una delle vittorie più pulite.
8) Quantizzazione, potatura, distillazione: più piccolo senza piangere (troppo) 🪓📉
Questa è la sezione che la gente vuole... perché sembra una prestazione gratuita. Può esserlo, ma bisogna trattarla come un intervento chirurgico.
Quantizzazione (pesi/attivazioni di precisione inferiore)
-
Ottimo per velocità di inferenza e memoria
-
Rischio: calo della qualità, soprattutto nei casi limite
-
Buona pratica: valutare su un set di test reale, non su vibrazioni
Sapori comuni di cui sentirai parlare:
-
INT8 (spesso solido) ( tipi quantizzati TensorRT )
-
INT4 / low-bit (enormi risparmi, il rischio di qualità aumenta) ( quantizzazione k-bit bitsandbytes )
-
Quantità mista (non tutto necessita della stessa precisione)
Potatura (rimozione dei parametri)
-
Rimuove pesi o strutture "non importanti" ( tutorial sulla potatura di PyTorch )
-
Di solito necessita di riqualificazione per recuperare la qualità
-
Funziona meglio di quanto la gente pensi... se fatto con attenzione
Distillazione (lo studente impara dall'insegnante)
Questa è la mia leva preferita a lungo termine. La distillazione può produrre un modello più piccolo che si comporta in modo simile, ed è spesso più stabile della quantizzazione estrema ( Distillare la conoscenza in una rete neurale ).
Una metafora imperfetta: la distillazione è come versare una zuppa complessa attraverso un filtro e ottenere... una zuppa più piccola. Non è così che funziona la zuppa, ma il concetto è chiaro 🍲.
9) Serving and Inference: la vera zona di battaglia 🧯
È possibile "ottimizzare" un modello e comunque servirlo male. È proprio durante la distribuzione che latenza e costi diventano reali.
Il servizio è la vittoria che conta
-
Il batching
migliora la produttività. Ma aumenta la latenza se si esagera. Bilanciatelo. ( Batching dinamico Triton ) -
La memorizzazione nella
cache dei prompt e il riutilizzo della cache KV possono essere massicci per contesti ripetuti. ( Spiegazione della cache KV ) -
Output in streaming:
gli utenti lo ritengono più veloce, anche se il tempo totale è simile. La percezione conta 🙂. -
Riduzione del sovraccarico token per token.
Alcuni stack eseguono un lavoro extra per token. Riduci questo sovraccarico e vinci alla grande.
Attenzione alla latenza della coda
La tua media potrebbe sembrare ottima, mentre il tuo p99 è un disastro. Purtroppo, gli utenti vivono nella coda. ( "Latenza di coda" e perché le medie mentono )
10) Ottimizzazione basata sull'hardware: adatta il modello alla macchina 🧰🖥️
Ottimizzare senza la consapevolezza dell'hardware è come mettere a punto un'auto da corsa senza controllare le gomme. Certo, si può fare, ma è un po' sciocco.
Considerazioni sulla GPU
-
Spesso il fattore limitante è la larghezza di banda della memoria, non il calcolo grezzo
-
Lotti più grandi possono aiutare, finché non lo fanno più
-
La fusione del kernel e le ottimizzazioni dell'attenzione sono enormi per i trasformatori ( FlashAttention: attenzione esatta consapevole dell'IO )
Considerazioni sulla CPU
-
Threading, vettorizzazione e località della memoria sono molto importanti
-
Il sovraccarico di tokenizzazione può dominare ( 🤗 Tokenizzatori "veloci" )
-
Potrebbero essere necessarie strategie di quantizzazione diverse rispetto alla GPU
Considerazioni su Edge/mobile
-
L'impronta di memoria diventa la priorità numero uno
-
La varianza della latenza è importante perché i dispositivi sono... lunatici
-
I modelli più piccoli e specializzati spesso battono i grandi modelli generali
11) Guardrail di qualità: non "ottimizzarti" fino a diventare un bug 🧪
Ogni vittoria in velocità dovrebbe essere accompagnata da un controllo di qualità. Altrimenti festeggerai, spedirai e poi riceverai un messaggio del tipo "perché l'assistente improvvisamente parla come un pirata?" 🏴☠️
Parapetti pragmatici:
-
Prompt d'oro (insieme fisso di prompt che testi sempre)
-
Metriche delle attività (accuratezza, F1, BLEU, qualsiasi cosa si adatti)
-
Controlli umani a campione (sì, sul serio)
-
Soglie di regressione ("non è consentito un calo superiore al X%)
Tieni traccia anche delle modalità di guasto:
-
deriva di formattazione
-
cambiamenti nel comportamento di rifiuto
-
frequenza delle allucinazioni
-
inflazione della lunghezza della risposta
L'ottimizzazione può cambiare il comportamento in modi sorprendenti. In modo peculiare. Irritante. Prevedibile, a posteriori.
12) Checklist: come ottimizzare i modelli di intelligenza artificiale passo dopo passo ✅🤖
Se desideri un ordine chiaro delle operazioni su come ottimizzare i modelli di intelligenza artificiale , ecco il flusso di lavoro che tende a mantenere le persone sane di mente:
-
Definisci il successo
Scegli 1-2 metriche principali (latenza, costo, produttività, qualità). -
Misura
i carichi di lavoro reali del profilo di base, registra p50/p95, memoria, costo. ( PyTorch Profiler ) -
Correggere i colli di bottiglia della pipeline
Caricamento dei dati, tokenizzazione, pre-elaborazione, batching. -
Applicare vincite di calcolo a basso rischio
Precisione mista, ottimizzazioni del kernel, batching migliore. -
Prova le ottimizzazioni del compilatore/runtime
Cattura di grafici, runtime di inferenza, fusione di operatori. ( tutorialtorch.compile, documentazione di ONNX Runtime ) -
Ridurre i costi del modello
Quantizzare con attenzione, distillare se possibile, potare se opportuno. -
Ottimizzazione del servizio
di caching, concorrenza, test di carico, correzioni della latenza finale. -
Convalida la qualità
Esegui test di regressione e confronta i risultati affiancati. -
Ripetizione.
Piccole modifiche, note chiare, ripeti. Poco appariscente, efficace.
E sì, questo è ancora " Come ottimizzare i modelli di intelligenza artificiale", anche se sembra più "Come smettere di calpestare i rastrelli". Stessa cosa.
13) Errori comuni (per non ripeterli come tutti noi) 🙃
-
Ottimizzare prima di misurare.
Sprecherai tempo. E poi ottimizzerai la cosa sbagliata con sicurezza... -
Inseguire un singolo benchmark.
I benchmark mentono per omissione. Il tuo carico di lavoro è la verità. -
Ignorare la memoria
I problemi di memoria causano rallentamenti, arresti anomali e jitter. ( Comprendere l'utilizzo della memoria CUDA in PyTorch ) -
Sovraquantizzare troppo presto.
La quantizzazione a basso numero di bit può essere sorprendente, ma inizia prima con passaggi più sicuri. -
Nessun piano di rollback
Se non è possibile ripristinare rapidamente, ogni distribuzione diventa stressante. Lo stress crea bug.
Note conclusive: il modo umano di ottimizzare 😌⚡
Come ottimizzare i modelli di intelligenza artificiale non è un singolo trucco. È un processo a più livelli: misurare, correggere la pipeline, usare compilatori e runtime, ottimizzare il servizio, quindi ridurre il modello con quantizzazione o distillazione, se necessario. Procedere passo dopo passo, mantenere standard di qualità e non fidarsi del "sembra più veloce" come metrica (le tue sensazioni sono belle, le tue sensazioni non sono un profiler).
Se vuoi un takeaway più breve:
-
Misura prima 🔍
-
Ottimizza la pipeline successiva 🧵
-
Quindi ottimizza il modello 🧠
-
Quindi ottimizza il servizio 🏗️
-
Effettua sempre controlli di qualità ✅
E se può esserti utile, ricordati: l'obiettivo non è un "modello perfetto". L'obiettivo è un modello che sia veloce, conveniente e abbastanza affidabile da permetterti di dormire la notte... quasi tutte le notti 😴.
Domande frequenti
Cosa significa in pratica ottimizzare un modello di intelligenza artificiale
"Ottimizzare" di solito significa migliorare un vincolo primario: latenza, costi, ingombro di memoria, accuratezza, stabilità o throughput di servizio. La parte difficile sono i compromessi: insistere su un'area può compromettere un'altra. Un approccio pratico consiste nello scegliere un obiettivo chiaro (come la latenza p95 o il time-to-quality) e ottimizzare in base a esso. Senza un obiettivo, è facile "migliorare" e comunque perdere.
Come ottimizzare i modelli di intelligenza artificiale senza compromettere silenziosamente la qualità
Tratta ogni variazione di velocità o di costo come una potenziale regressione silenziosa. Utilizza misure di sicurezza come prompt d'oro, metriche di attività e rapidi controlli a campione eseguiti da personale esperto. Stabilisci una soglia chiara per un eventuale scostamento di qualità accettabile e confronta i risultati ottenuti. Questo evita che "è più veloce" si trasformi in "perché è diventato improvvisamente strano in produzione?" dopo la spedizione.
Cosa misurare prima di iniziare l'ottimizzazione
Inizia con i percentili di latenza (p50, p95, p99), la produttività (token/sec o richieste/sec), l'utilizzo della GPU e il picco di VRAM/RAM. Tieni traccia del costo per inferenza o per 1k token se il costo è un vincolo. Profila uno scenario reale che servi, non un prompt giocattolo. Tenere un piccolo "diario delle prestazioni" ti aiuta a evitare di tirare a indovinare e ripetere gli errori.
Vittorie rapide e a basso rischio per le prestazioni di allenamento
La precisione mista (FP16/BF16) è spesso la prima leva più veloce, ma attenzione alle stranezze numeriche. Se le dimensioni del batch sono limitate, l'accumulo del gradiente può stabilizzare l'ottimizzazione senza sprecare memoria. Il checkpoint del gradiente sacrifica la potenza di calcolo extra per una quantità di memoria inferiore, consentendo contesti più ampi. Non ignorate la tokenizzazione e l'ottimizzazione del dataloader: possono tranquillamente consumare la GPU.
Quando utilizzare torch.compile, ONNX Runtime o TensorRT
Questi strumenti mirano a ridurre il sovraccarico operativo: acquisizione di grafici, fusione del kernel e ottimizzazione dei grafici runtime. Possono fornire velocizzazioni di inferenza pulite, ma i risultati variano a seconda della forma del modello e dell'hardware. Alcune configurazioni sembrano magiche; altre si muovono a malapena. Aspettatevi sensibilità ai cambiamenti di forma e occasionali bug "gremlin": misurate il prima e il dopo sul vostro carico di lavoro reale.
Se la quantizzazione vale la pena e come evitare di andare troppo oltre
La quantizzazione può ridurre drasticamente la memoria e accelerare l'inferenza, soprattutto con INT8, ma la qualità può peggiorare nei casi limite. Le opzioni a bit più bassi (come INT4/k-bit) comportano maggiori risparmi a fronte di rischi più elevati. L'abitudine più sicura è quella di valutare su un set di test reale e confrontare i risultati, non basandosi sull'istinto. Iniziare prima con passaggi più sicuri, quindi ridurre la precisione solo se necessario.
La differenza tra potatura e distillazione per la riduzione delle dimensioni del modello
Il pruning rimuove i parametri "inutili" e spesso richiede un nuovo addestramento per recuperare la qualità, soprattutto se eseguito in modo aggressivo. La distillazione addestra un modello di studente più piccolo a imitare il comportamento di un insegnante più grande e può offrire un ROI a lungo termine più elevato rispetto alla quantizzazione estrema. Se si desidera un modello più piccolo che si comporti in modo simile e rimanga stabile, la distillazione è spesso la soluzione più pulita.
Come ridurre i costi di inferenza e la latenza attraverso miglioramenti del servizio
Il servizio è dove l'ottimizzazione diventa tangibile: il batching aumenta la produttività, ma può compromettere la latenza se esagerato, quindi regolatelo con attenzione. Il caching (caching rapido e riutilizzo della cache KV) può essere enorme quando i contesti si ripetono. L'output in streaming migliora la velocità percepita anche se il tempo totale è simile. Prestate attenzione anche all'overhead token per token nel vostro stack: un piccolo lavoro per token si accumula rapidamente.
Perché la latenza di coda è così importante quando si ottimizzano i modelli di intelligenza artificiale
Le medie possono sembrare ottime, mentre p99 è un disastro, e gli utenti tendono a vivere nella coda. La latenza di coda spesso deriva da jitter: frammentazione della memoria, picchi di pre-elaborazione della CPU, rallentamenti della tokenizzazione o comportamento scadente del batching. Ecco perché la guida enfatizza percentili e carichi di lavoro reali. Anche ottimizzando solo p50, si può comunque ottenere un'esperienza che "sembra casualmente lenta"
Riferimenti
-
Amazon Web Services (AWS) - Percentili AWS CloudWatch (definizioni statistiche) - docs.aws.amazon.com
-
Google - La coda su larga scala (best practice per la latenza della coda) - sre.google
-
Google - Obiettivi del livello di servizio (Libro SRE) - percentili di latenza - sre.google
-
PyTorch - torch.compile - docs.pytorch.org
-
PyTorch - FullyShardedDataParallel (FSDP) - docs.pytorch.org
-
PyTorch - Profilo PyTorch - docs.pytorch.org
-
PyTorch - Semantica CUDA: gestione della memoria (note sull'allocatore di memoria CUDA) - docs.pytorch.org
-
PyTorch - Precisione mista automatica (torch.amp / AMP) - docs.pytorch.org
-
PyTorch - torch.utils.checkpoint - docs.pytorch.org
-
PyTorch - Guida all'ottimizzazione delle prestazioni - docs.pytorch.org
-
PyTorch - Tutorial sulla potatura - docs.pytorch.org
-
PyTorch - Comprensione dell'utilizzo della memoria CUDA in PyTorch - docs.pytorch.org
-
PyTorch - tutorial / panoramica di torch.compile - docs.pytorch.org
-
ONNX Runtime - Documentazione di ONNX Runtime - onnxruntime.ai
-
NVIDIA - Documentazione TensorRT - docs.nvidia.com
-
NVIDIA - Tipi quantizzati TensorRT - docs.nvidia.com
-
NVIDIA - Nsight Systems - developer.nvidia.com
-
NVIDIA - Triton Inference Server - batching dinamico - docs.nvidia.com
-
DeepSpeed - Documentazione ZeRO Stage 3 - deepspeed.readthedocs.io
-
bitsandbytes (fondazione bitsandbytes) - bitsandbytes - github.com
-
Hugging Face - Accelerate: Guida all'accumulo di gradienti - huggingface.co
-
Hugging Face - Documentazione dei tokenizzatori - huggingface.co
-
Hugging Face - Transformers: guida PEFT - huggingface.co
-
Hugging Face - Transformers: spiegazione della cache KV - huggingface.co
-
Hugging Face - Transformers: tokenizzatori "veloci" (classi tokenizer) - huggingface.co
-
arXiv - Distillare la conoscenza in una rete neurale (Hinton et al., 2015) - arxiv.org
-
arXiv - LoRA: adattamento di basso rango di modelli linguistici di grandi dimensioni - arxiv.org
-
arXiv - FlashAttention: Attenzione esatta veloce ed efficiente in termini di memoria con consapevolezza IO - arxiv.org