Ottimizzazione dell'addestramento LLM in Swift: da 2,8 Gflop/s a 1,1 Tflop/s
Uno sviluppatore documenta il processo di ottimizzazione del codice di moltiplicazione di matrici scritto a mano in Swift per addestrare un LLM stile GPT-2 su Apple Silicon. Partendo da un'implementazione Swift ingenua che raggiungeva solo 2,8 Gflop/s, l'autore ha applicato una serie di ottimizzazioni: sostituzione di Array con MutableSpan per evitare il sovraccarico copy-on-write, uso di Relaxed.multiplyAdd da Swift Numerics per istruzioni fused-multiply-add, srotolamento manuale dei cicli con InlineArray, multithreading tramite DispatchQueue.concurrentPerform, istruzioni AMX reverse-engineered e infine shader GPU Metal personalizzati. L'implementazione finale ha raggiunto 1,1 Tflop/s, un miglioramento di 382x. Il modello di riferimento è llm.c di Andrej Karpathy, un'implementazione in C puro di GPT-2 con 124 milioni di parametri. L'autore nota che il framework Accelerate di Apple e altre librerie sarebbero più efficienti per uso produttivo e che l'unità AMX non è documentata ed è soggetta a modifiche che rompono la compatibilità. L'articolo è la prima parte di una serie che esplora l'addestramento di reti neurali in Swift su Apple Silicon.
Fatti principali
- L'implementazione Swift iniziale raggiungeva 2,8 Gflop/s.
- L'implementazione finale ottimizzata ha raggiunto 1,1 Tflop/s, un miglioramento di 382x.
- Le ottimizzazioni includevano MutableSpan, Relaxed.multiplyAdd, InlineArray, DispatchQueue.concurrentPerform, istruzioni AMX e kernel GPU Metal.
- Il modello di riferimento è llm.c di Andrej Karpathy, un'implementazione GPT-2 in C puro con 124.439.808 pesi.
- L'unità AMX di Apple non è documentata e viene accessa tramite istruzioni reverse-engineered.
- L'implementazione GPU Metal ha raggiunto 1,1 Tflop/s, ma il picco teorico della GPU è di 15 Tflop/s.
- Swift è risultato leggermente più veloce di C in alcuni benchmark grazie a una migliore selezione di istruzioni SIMD.
- L'articolo è la prima parte di una serie; gli articoli futuri tratteranno BLAS, BNNS, CoreML, MPSGraph.
Entità
Artisti
- Andrej Karpathy
- James Thompson
Istituzioni
- Apple
- Swift Numerics
- Accelerate framework
- Metal
- OpenMP
- Cocoa with Love