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

PyTorch è riuscito a fare tutto questo in sole 1000 righe di codice.

Ecco il confronto delle prestazioni

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.

Ottieni un altro aumento del 34% tramite…