Esegui l’Inferenza LLM Lokale 10 volte più velocemente (244 TOK/s) PyTorch II
Esegui l'Inferenza LLM Locale 10 volte più Velocemente (244 TOK/s) con PyTorch II
Ci sono molti modi per correre, ecco una visione d’insieme rapida
TLDR:
Il team di PyTorch ha ideato un modo per ottimizzare semplicemente costruendo ottimizzazioni dall’inizio
- Torch.compile: Un compilatore per i modelli PyTorch
- Quantizzazione GPU: Accelera i modelli con operazioni di precisione ridotta
- Decodifica speculativa: Accelera LLMs utilizzando un “modello bozza” piccolo per prevedere l’output di un “modello target” grande
- Parallelismo Tensoriale: Accelera i modelli eseguendoli su più dispositivi.
PyTorch è riuscito a fare tutto questo in sole 1000 righe di codice.
Ecco il confronto delle prestazioni
- Prodotti GenAI Muoviti velocemente e fallisci
- 6 quaderni LLM gratuiti e pratici per iniziare con le domande di ammissione alla Laurea Magistrale in Diritto
- Rompere i limiti nella rappresentazione della scena in 3D come una nuova tecnica di intelligenza artificiale sta cambiando il gioco con un rendering più veloce ed efficiente e una riduzione delle esigenze di archiviazione.
Ora, passiamo in rassegna queste opzioni una per una!
Vanilla (25 token/s)
Queste sono le prestazioni di LLaMA-7b.
Primo aumento del 3x utilizzando il nuovo compilatore e l’allocazione intelligente (76 TOK/S)
Utilizzando LLaMA-7B, PyTorch ha analizzato i problemi di prestazioni legati alla CPU. Ciò significa che il sovraccarico è il primo obiettivo per renderlo più efficiente.
Entra in gioco il compilatore. Compilando regioni più grandi in uno stato pre-compilato, il numero di chiamate CPU per operazione diminuisce. Ciò significa che questo wrapper può ora funzionare senza avere spazi vuoti, come puoi vedere di seguito.
Per utilizzarlo, basta usare il codice seguente
torch.compile(decode_one_token, mode="reduce-overhead", fullgraph=True)
Cosa sta succedendo dietro le quinte?
In primo luogo, quando vengono generati più token, la cache kv cresce, necessitando di riallocazioni e copie (calcoli costosi) ogni volta che la cache cresce. PyTorch ha implementato una cache di dimensioni massime per consentire un massimo di spazio.
In secondo luogo, due strategie sono necessarie per compilare separatamente durante la fase di precompilazione. L’intero prompt viene elaborato in modo dinamico e i token vengono decodificati come mostrato nel codice sopra. Mantenere queste strategie in parallelo permette ulteriori ottimizzazioni. Utilizzando solo queste due strategie, è possibile ottenere un ulteriore aumento delle prestazioni del 4x per l’elaborazione.