Come abbiamo accelerato l’elaborazione di inferenza del transformer di 100 volte per i clienti di 🤗 API
Abbiamo accelerato l'elaborazione di inferenza del transformer di 100 volte per i clienti di 🤗 API.
🤗 Transformers è diventata la libreria predefinita per gli scienziati dei dati di tutto il mondo per esplorare modelli NLP all’avanguardia e costruire nuove funzionalità NLP. Con oltre 5.000 modelli preaddestrati e raffinati disponibili, in più di 250 lingue, è un ricco campo di gioco, facilmente accessibile indipendentemente dal framework con cui stai lavorando.
Mentre sperimentare con i modelli in 🤗 Transformers è facile, distribuire questi grandi modelli in produzione con prestazioni massime e gestirli in un’architettura scalabile è una sfida ingegneristica difficile per qualsiasi Ingegnere di Machine Learning.
Questa guadagno di prestazioni 100 volte superiore e la scalabilità integrata è il motivo per cui i sottoscrittori della nostra API di inferenza accelerata hanno scelto di costruire le loro funzionalità NLP su di essa. Per ottenere gli ultimi 10 volte di aumento delle prestazioni, le ottimizzazioni devono essere a basso livello, specifiche per il modello e per l’hardware di destinazione.
Questo post condivide alcuni dei nostri approcci per spremere ogni goccia di potenza di calcolo per i nostri clienti. 🍋
- Ottieni risultati migliori e addestra più velocemente con ZeRO tramite DeepSpeed e FairScale
- Modelli TensorFlow più veloci in Hugging Face Transformers
- Hugging Face su PyTorch / XLA TPUs
Raggiungere il primo aumento di prestazioni del 10x
La prima parte del viaggio di ottimizzazione è la più accessibile, riguarda l’utilizzo della migliore combinazione di tecniche offerte dalle librerie di Hugging Face, indipendentemente dall’hardware di destinazione.
Utilizziamo i metodi più efficienti incorporati nelle pipeline dei modelli di Hugging Face per ridurre la quantità di calcoli durante ogni passaggio in avanti. Questi metodi sono specifici per l’architettura del modello e il compito di destinazione, ad esempio per un compito di generazione di testo su un’architettura GPT, riduciamo la dimensionalità dei calcoli delle matrici di attenzione concentrandoci sull’attenzione aggiornata sull’ultimo token in ogni passaggio:
La tokenizzazione è spesso un collo di bottiglia per l’efficienza durante l’inferenza. Utilizziamo i metodi più efficienti della libreria 🤗 Tokenizers, sfruttando l’implementazione in Rust del tokenizzatore del modello in combinazione con una cache intelligente per ottenere un aumento di velocità fino a 10 volte per la latenza complessiva.
Sfruttando le ultime funzionalità delle librerie di Hugging Face, raggiungiamo un affidabile aumento di velocità del 10x rispetto a una distribuzione standard per una coppia modello/hardware specifica. Poiché le nuove versioni di Transformers e Tokenizers vengono generalmente rilasciate ogni mese, i nostri clienti API non hanno bisogno di adattarsi costantemente alle nuove opportunità di ottimizzazione, i loro modelli continuano semplicemente a funzionare più velocemente.
Compilazione FTW: i difficili 10x
Qui è dove diventa davvero complicato. Per ottenere le migliori prestazioni possibili, dovremo modificare il modello e compilarlo mirando all’hardware specifico per l’inferenza. La scelta dell’hardware stesso dipenderà sia dal modello (dimensione in memoria) che dal profilo della domanda (batching delle richieste). Anche quando si servono previsioni dallo stesso modello, alcuni clienti API possono beneficiare di più dall’inferenza CPU accelerata e altri dall’inferenza GPU accelerata, ognuno con diverse tecniche di ottimizzazione e librerie applicate.
Una volta selezionata la piattaforma di calcolo per il caso d’uso, possiamo metterci al lavoro. Ecco alcune tecniche specifiche per la CPU che possono essere applicate con un grafo statico:
- Ottimizzazione del grafo (rimozione del flusso non utilizzato)
- Fusione dei livelli (con istruzioni specifiche della CPU)
- Quantizzazione delle operazioni
L’utilizzo di funzioni pronte all’uso delle librerie open source (ad esempio 🤗 Transformers con ONNX Runtime) non produrrà i migliori risultati, o potrebbe comportare una significativa perdita di precisione, in particolare durante la quantizzazione. Non esiste una soluzione perfetta, e il percorso migliore è diverso per ogni architettura del modello. Ma approfondendo il codice di Transformers e la documentazione di ONNX Runtime, le stelle possono allinearsi per ottenere un altro aumento di velocità del 10x.
Vantaggio sleale
L’architettura Transformer è stato un punto di svolta decisivo per le prestazioni del Machine Learning, a partire dall’NLP, e negli ultimi 3 anni il tasso di miglioramento nella comprensione e generazione del linguaggio naturale è stato ripido e accelerato. Un’altra metrica che è accelerata di conseguenza è la dimensione media dei modelli, dai 110 milioni di parametri di BERT ai 175 miliardi di GPT-3.
Questa tendenza ha introdotto sfide spaventose per gli Ingegneri del Machine Learning quando si tratta di distribuire gli ultimi modelli in produzione. Sebbene un aumento di velocità del 100x sia un obiettivo ambizioso da raggiungere, è ciò che serve per servire previsioni con una latenza accettabile nelle applicazioni consumer in tempo reale.
Per raggiungere quel obiettivo, come Ingegneri del Machine Learning presso Hugging Face abbiamo sicuramente un vantaggio sleale essendo nello stesso (virtuale) ufficio dei manutentori di 🤗 Transformers e 🤗 Tokenizers 😬. Siamo anche estremamente fortunati per le ricche collaborazioni che abbiamo sviluppato attraverso le collaborazioni open source con fornitori di hardware e cloud come Intel, NVIDIA, Qualcomm, Amazon e Microsoft che ci consentono di ottimizzare i nostri modelli per l’infrastruttura con le ultime tecniche di ottimizzazione hardware.
Se desideri sentire la velocità sulla nostra infrastruttura, avvia una prova gratuita e ci metteremo in contatto. Se desideri beneficiare della nostra esperienza nell’ottimizzazione dell’inferenza sulla tua infrastruttura, partecipa al nostro 🤗 Programma di Accelerazione degli Esperti.