Gradient rende il benchmarking LLM conveniente e semplice con AWS Inferentia | Servizi Web di Amazon

Gradient rende il benchmarking LLM conveniente e semplice con AWS Inferentia | Servizi Web di Amazon

Questo è un guest post scritto in collaborazione con Michael Feil di Gradient.

La valutazione delle prestazioni dei modelli linguistici di grandi dimensioni (LLM) è un passaggio importante del processo di pre-formazione e messa a punto prima della distribuzione. Quanto più velocemente e frequentemente riesci a convalidare le prestazioni, maggiori saranno le possibilità di migliorare le prestazioni del modello.

At Gradiente, lavoriamo allo sviluppo LLM personalizzato e proprio di recente abbiamo lanciato il nostro Laboratorio di sviluppo dell'intelligenza artificiale, offrendo alle organizzazioni aziendali un servizio di sviluppo end-to-end personalizzato per creare LLM privati ​​e personalizzati e co-piloti di intelligenza artificiale (AI). Nell'ambito di questo processo, valutiamo regolarmente le prestazioni dei nostri modelli (ottimizzati, addestrati e aperti) rispetto a benchmark aperti e proprietari. Mentre lavoriamo con il team AWS per addestrare i nostri modelli AWSTrainium, ci siamo resi conto che eravamo limitati sia alla VRAM che alla disponibilità di istanze GPU quando si trattava dello strumento principale per la valutazione LLM, lm-imbracatura-di-valutazione. Questo framework open source ti consente di assegnare punteggi a diversi modelli linguistici generativi attraverso varie attività di valutazione e benchmark. Viene utilizzato da classifiche come Abbracciare il viso per il benchmarking pubblico.

Per superare queste sfide, abbiamo deciso di creare e rendere open source la nostra soluzione: l'integrazione Neurone AWS, la biblioteca dietro AWS Inferenza e Trainium, in lm-evaluation-harness. Questa integrazione ha reso possibile il benchmarking v-alpha-tross, una prima versione del nostro modello Albatross, rispetto ad altri modelli pubblici durante il processo formativo e dopo.

Per contesto, questa integrazione viene eseguita come una nuova classe modello all'interno di lm-evaluation-harness, astraendo l'inferenza dei token e la stima della verosimiglianza delle sequenze senza influenzare l'effettiva attività di valutazione. La decisione di spostare la nostra pipeline di test interni a Cloud di calcolo elastico di Amazon (Amazon EC2) Istanze di Inf2 (con tecnologia AWS Inferentia2) ci ha permesso di accedere fino a 384 GB di memoria dell'acceleratore condiviso, adattandosi facilmente a tutte le nostre attuali architetture pubbliche. Utilizzando le istanze Spot di AWS, siamo stati in grado di sfruttare la capacità EC2 inutilizzata nel cloud AWS, consentendo risparmi sui costi scontati fino al 90% rispetto ai prezzi on-demand. Ciò ha ridotto al minimo il tempo necessario per i test e ci ha permesso di eseguire test più frequentemente perché siamo stati in grado di testare più istanze prontamente disponibili e rilasciare le istanze una volta terminato.

In questo post forniamo un'analisi dettagliata dei nostri test, delle sfide che abbiamo incontrato e un esempio di utilizzo del cablaggio di test su AWS Inferentia.

Benchmarking su AWS Inferentia2

L'obiettivo di questo progetto era generare punteggi identici come mostrato nel file Apri la classifica LLM (per molti modelli CausalLM disponibili su Hugging Face), pur mantenendo la flessibilità necessaria per confrontarlo con benchmark privati. Per vedere altri esempi di modelli disponibili, vedere AWS Inferentia e Trainium sul Volto che abbraccia.

Il codice cambia richiesto per trasferire un modello dai trasformatori Hugging Face all'Hugging Face Neurone ottimale La libreria Python era piuttosto bassa. Perché lm-evaluation-harness utilizza AutoModelForCausalLM, si verifica un calo nella sostituzione utilizzando NeuronModelForCausalLM. Senza un modello precompilato, il modello viene compilato automaticamente al momento, il che potrebbe aggiungere 15-60 minuti a un lavoro. Questo ci ha dato la flessibilità necessaria per distribuire test per qualsiasi istanza AWS Inferentia2 e modello CausalLM supportato.

Risultati

A causa del modo in cui funzionano i benchmark e i modelli, non ci aspettavamo che i punteggi corrispondessero esattamente nelle diverse sessioni. Tuttavia, dovrebbero essere molto vicini in base alla deviazione standard, e lo abbiamo osservato costantemente, come mostrato nella tabella seguente. I benchmark iniziali che abbiamo eseguito su AWS Inferentia2 sono stati tutti confermati dalla classifica Hugging Face.

In lm-evaluation-harness, ci sono due flussi principali utilizzati da diversi test: generate_until ed loglikelihood. Il test gsm8k utilizza principalmente generate_until per generare risposte proprio come durante l'inferenza. Loglikelihood viene utilizzato principalmente nel benchmarking e nei test ed esamina la probabilità che vengano prodotti risultati diversi. Entrambi funzionano in Neuron, ma il loglikelihood Il metodo nell'SDK 2.16 utilizza passaggi aggiuntivi per determinare le probabilità e può richiedere più tempo.

Risultati del cablaggio di valutazione Lm
Configurazione hardware Sistema originale AWS Inferentia inf2.48xlarge
Tempo con batch_size=1 per valutare mistralai/Mistral-7B-Instruct-v0.1 su gsm8k 103 minuti 32 minuti
Punteggio su gsm8k (ottieni risposta – esatta_corrispondenza con std) 0.3813 – 0.3874 (± 0.0134) 0.3806 – 0.3844 (± 0.0134)

Inizia con Neuron e l'imbracatura di valutazione lm

Il codice in questa sezione può aiutarti a utilizzare lm-evaluation-harness ed eseguilo con i modelli supportati su Hugging Face. Per vedere alcuni modelli disponibili, visita AWS Inferentia e Trainium sul Volto che abbraccia.

Se hai familiarità con l'esecuzione di modelli su AWS Inferentia2, potresti notare che non esiste num_cores impostazione passata. Il nostro codice rileva quanti core sono disponibili e passa automaticamente quel numero come parametro. Ciò ti consente di eseguire il test utilizzando lo stesso codice indipendentemente dalla dimensione dell'istanza che stai utilizzando. Potresti anche notare che stiamo facendo riferimento al modello originale, non a una versione compilata da Neuron. L'imbracatura compila automaticamente il modello secondo necessità.

I passaggi seguenti mostrano come distribuire il gradiente gradientai/v-alpha-tross modello che abbiamo testato. Se vuoi testare un esempio più piccolo su un'istanza più piccola, puoi utilizzare il file mistralai/Mistral-7B-v0.1 modello.

  1. La quota predefinita per l'esecuzione di istanze Inf on-demand è 0, quindi dovresti richiedere un aumento tramite Service Quotas. Aggiungi un'altra richiesta per tutte le richieste di istanze Spot informazioni in modo da poter testare con le istanze Spot. Avrai bisogno di una quota di 192 vCPU per questo esempio utilizzando un'istanza inf2.48xlarge o una quota di 4 vCPU per un'istanza inf2.xlarge di base (se stai distribuendo il modello Mistral). Le quote sono specifiche della regione AWS, quindi assicurati di richiederle us-east-1 or us-west-2.
  2. Decidi la tua istanza in base al tuo modello. Perché v-alpha-tross è un'architettura da 70B, abbiamo deciso di utilizzare un'istanza inf2.48xlarge. Distribuisci un inf2.xlarge (per il modello 7B Mistral). Se stai testando un modello diverso, potrebbe essere necessario modificare l'istanza in base alle dimensioni del modello.
  3. Distribuisci l'istanza utilizzando il file Versione DLAMI del viso abbracciato 20240123, in modo che tutti i driver necessari siano installati. (Il prezzo indicato include il costo dell'istanza e non sono previsti costi aggiuntivi per il software.)
  4. Regola la dimensione dell'unità su 600 GB (100 GB per Mistral 7B).
  5. Clona e installa lm-evaluation-harness sull'istanza. Specifichiamo una build in modo da sapere che qualsiasi variazione è dovuta a modifiche del modello, non a modifiche di test o di codice.
git clone https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
# optional: pick specific revision from the main branch version to reproduce the exact results
git checkout 756eeb6f0aee59fc624c81dcb0e334c1263d80e3
# install the repository without overwriting the existing torch and torch-neuronx installation
pip install --no-deps -e . 
pip install peft evaluate jsonlines numexpr pybind11 pytablewriter rouge-score sacrebleu sqlitedict tqdm-multiprocess zstandard hf_transfer

  1. Correre lm_eval con il tipo di modello hf-neuron e assicurati di avere un collegamento al percorso di ritorno al modello su Hugging Face:
# e.g use mistralai/Mistral-7B-v0.1 if you are on inf2.xlarge
MODEL_ID=gradientai/v-alpha-tross

python -m lm_eval --model "neuronx" --model_args "pretrained=$MODEL_ID,dtype=bfloat16" --batch_size 1 --tasks gsm8k

Se esegui l'esempio precedente con Mistral, dovresti ricevere il seguente output (sul più piccolo inf2.xlarge, potrebbero essere necessari 250 minuti per l'esecuzione):

███████████████████████| 1319/1319 [32:52<00:00,  1.50s/it]
neuronx (pretrained=mistralai/Mistral-7B-v0.1,dtype=bfloat16), gen_kwargs: (None), limit: None, num_fewshot: None, batch_size: 1
|Tasks|Version|  Filter  |n-shot|  Metric   |Value |   |Stderr|
|-----|------:|----------|-----:|-----------|-----:|---|-----:|
|gsm8k|      2|get-answer|     5|exact_match|0.3806|±  |0.0134|

ripulire

Al termine, assicurati di arrestare le istanze EC2 tramite la console Amazon EC2.

Conclusione

I team Gradient e Neuron sono entusiasti di vedere un'adozione più ampia della valutazione LLM con questa versione. Provalo tu stesso ed esegui il framework di valutazione più popolare sulle istanze AWS Inferentia2. Ora puoi beneficiare della disponibilità on demand di AWS Inferentia2 durante l'utilizzo sviluppo LLM personalizzato da Gradient. Inizia a ospitare modelli su AWS Inferentia con questi esercitazioni.


Informazioni sugli autori

Gradient rende il benchmarking LLM conveniente e semplice con AWS Inferentia | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Michael Feil è un ingegnere AI presso Gradient e in precedenza ha lavorato come ingegnere ML presso Rodhe & Schwarz e ricercatore presso Max-Plank Institute for Intelligent Systems e Bosch Rexroth. Michael è uno dei principali collaboratori di varie librerie di inferenza open source per LLM e progetti open source come StarCoder. Michael ha conseguito una laurea in meccatronica e informatica presso la KIT e un master in robotica presso l'Università Tecnica di Monaco.

Gradient rende il benchmarking LLM conveniente e semplice con AWS Inferentia | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Jim Burtoft è Senior Startup Solutions Architect presso AWS e lavora direttamente con startup come Gradient. Jim è un CISSP, parte della AWS AI/ML Technical Field Community, un Neuron Ambassador e collabora con la comunità open source per consentire l'uso di Inferentia e Trainium. Jim ha conseguito una laurea in matematica presso la Carnegie Mellon University e un master in economia presso l'Università della Virginia.

Timestamp:

Di più da Apprendimento automatico di AWS