Gradient face benchmarkingul LLM rentabil și fără efort cu AWS Inferentia | Amazon Web Services

Gradient face benchmarkingul LLM rentabil și fără efort cu AWS Inferentia | Amazon Web Services

Aceasta este o postare pentru invitați scrisă împreună cu Michael Feil la Gradient.

Evaluarea performanței modelelor de limbaj mari (LLM) este un pas important al procesului de pre-instruire și reglare fină înainte de implementare. Cu cât poți valida performanța mai rapid și mai frecvent, cu atât sunt mai mari șansele să poți îmbunătăți performanța modelului.

At Gradient, lucrăm la dezvoltarea personalizată LLM și tocmai am lansat recent Laboratorul de dezvoltare AI, oferind organizațiilor de întreprindere un serviciu de dezvoltare personalizat, de la capăt la capăt, pentru a construi LLM-uri private personalizate și copiloți de inteligență artificială (AI). Ca parte a acestui proces, evaluăm în mod regulat performanța modelelor noastre (reglate, antrenate și deschise) în raport cu benchmark-uri deschise și proprietare. În timp ce lucram cu echipa AWS pentru a ne instrui modelele AWS Trainium, ne-am dat seama că eram restricționați atât la VRAM, cât și la disponibilitatea instanțelor GPU atunci când era vorba de instrumentul principal pentru evaluarea LLM, lm-evaluare-ham. Acest cadru open source vă permite să notați diferite modele de limbaj generativ în diferite sarcini de evaluare și benchmark-uri. Este folosit de clasamente precum Fata îmbrățișată pentru benchmarking public.

Pentru a depăși aceste provocări, am decis să construim și să deschidem soluția noastră – integrarea AWS Neuron, biblioteca din spate Inferentia AWS și Trainium, în lm-evaluation-harness. Această integrare a făcut posibilă evaluarea comparativă v-alpha-tross, o versiune timpurie a modelului nostru Albatross, față de alte modele publice în timpul procesului de instruire și după.

Pentru context, această integrare rulează ca o nouă clasă de model în cadrul lm-evaluation-harness, abstragând inferența jetoanelor și estimarea log-probabilității secvențelor fără a afecta sarcina reală de evaluare. Decizia de a muta conducta noastră de testare internă la Cloud Elastic de calcul Amazon (Amazon EC2) Instanțe Inf2 (produs de AWS Inferentia2) ne-a permis să accesăm până la 384 GB de memorie de accelerație partajată, potrivindu-se fără efort în toate arhitecturile noastre publice actuale. Folosind Instanțele AWS Spot, am putut profita de capacitatea EC2 neutilizată din AWS Cloud, permițând economii de până la 90% la prețuri la cerere. Acest lucru a minimizat timpul necesar pentru testare și ne-a permis să testăm mai des, deoarece am putut testa mai multe instanțe care erau ușor disponibile și eliberăm instanțele când am terminat.

În această postare, oferim o detaliere a testelor noastre, provocările pe care le-am întâlnit și un exemplu de utilizare a cablajului de testare pe AWS Inferentia.

Evaluare comparativă pe AWS Inferentia2

Scopul acestui proiect a fost de a genera scoruri identice așa cum se arată în Deschideți Clasamentul LLM (pentru multe modele CausalLM disponibile pe Hugging Face), păstrând în același timp flexibilitatea de a-l rula pe benchmark-uri private. Pentru a vedea mai multe exemple de modele disponibile, consultați AWS Inferentia și Trainium pe Hugging Face.

Schimbările de cod necesare pentru a porta un model de la transformatoare Hugging Face la Hugging Face Neuron optim Biblioteca Python era destul de scăzută. Deoarece lm-evaluare-ham utilizeaza AutoModelForCausalLM, există o scădere a utilizării de înlocuire NeuronModelForCausalLM. Fără un model precompilat, modelul este compilat automat în acest moment, ceea ce ar putea adăuga 15-60 de minute la o lucrare. Acest lucru ne-a oferit flexibilitatea de a implementa testarea pentru orice instanță AWS Inferentia2 și modelul CausalLM acceptat.

REZULTATE

Din cauza modului în care funcționează benchmark-urile și modelele, nu ne așteptam ca scorurile să se potrivească exact în diferite runde. Cu toate acestea, ar trebui să fie foarte apropiate pe baza abaterii standard și am văzut în mod constant acest lucru, așa cum se arată în tabelul următor. Benchmark-urile inițiale pe care le-am rulat pe AWS Inferentia2 au fost toate confirmate de clasamentul Hugging Face.

In lm-evaluation-harness, există două fluxuri principale utilizate de teste diferite: generate_until și loglikelihood. Testul gsm8k folosește în principal generate_until pentru a genera răspunsuri la fel ca în timpul inferenței. Loglikelihood este utilizat în principal în benchmarking și testare și examinează probabilitatea producerii diferitelor rezultate. Ambele lucrează în Neuron, dar loglikelihood metoda din SDK 2.16 folosește pași suplimentari pentru a determina probabilitățile și poate dura timp suplimentar.

Lm-evaluare-harness Rezultate
Configurarea hardware Sistemul original AWS Inferentia inf2.48xlarge
Timp cu batch_size=1 pentru a evalua mistralai/Mistral-7B-Instruct-v0.1 pe gsm8k 103 minute 32 minute
Scor pe gsm8k (get-answer – exact_match with std) 0.3813 – 0.3874 (± 0.0134) 0.3806 – 0.3844 (± 0.0134)

Începeți cu Neuron și lm-evaluation-harness

Codul din această secțiune vă poate ajuta să utilizați lm-evaluation-harness și rulați-l împotriva modelelor acceptate pe Hugging Face. Pentru a vedea câteva modele disponibile, vizitați AWS Inferentia și Trainium pe Hugging Face.

Dacă sunteți familiarizat cu rularea modelelor pe AWS Inferentia2, este posibil să observați că nu există num_cores setarea a fost transmisă. Codul nostru detectează câte nuclee sunt disponibile și trece automat acel număr ca parametru. Acest lucru vă permite să rulați testul folosind același cod, indiferent de dimensiunea instanței pe care o utilizați. De asemenea, s-ar putea să observați că ne referim la modelul original, nu la o versiune compilată Neuron. Hamul compilează automat modelul pentru tine, după cum este necesar.

Următorii pași vă arată cum să implementați Gradient gradientai/v-alpha-tross modelul pe care l-am testat. Dacă doriți să testați cu un exemplu mai mic pe o instanță mai mică, puteți utiliza mistralai/Mistral-7B-v0.1 model.

  1. Cota implicită pentru rularea instanțelor On-Demand Inf este 0, așa că ar trebui să solicitați o creștere prin Service Quotes. Adăugați o altă solicitare pentru toate solicitările Inf Spot Instanțe, astfel încât să puteți testa cu Instanțe Spot. Veți avea nevoie de o cotă de 192 vCPU pentru acest exemplu folosind o instanță inf2.48xlarge sau o cotă de 4 vCPU pentru un inf2.xlarge de bază (dacă implementați modelul Mistral). Cotele sunt specifice regiunii AWS, așa că asigurați-vă că solicitați us-east-1 or us-west-2.
  2. Decideți-vă instanța pe baza modelului dvs. Deoarece v-alpha-tross este o arhitectură 70B, am decis să folosim o instanță inf2.48xlarge. Implementați un inf2.xlarge (pentru modelul 7B Mistral). Dacă testați un alt model, poate fi necesar să vă ajustați instanța în funcție de dimensiunea modelului dvs.
  3. Implementați instanța utilizând Hugging Face DLAMI versiunea 20240123, astfel încât să fie instalate toate driverele necesare. (Prețul afișat include costul instanței și nu există nicio taxă suplimentară pentru software.)
  4. Reglați dimensiunea unității la 600 GB (100 GB pentru Mistral 7B).
  5. Clonează și instalează lm-evaluation-harness pe instanță. Specificăm o construcție astfel încât să știm că orice variație se datorează modificărilor de model, nu modificărilor testului sau codului.
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. Alerga lm_eval cu tipul de model hf-neuron și asigurați-vă că aveți un link către calea înapoi la modelul de pe 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

Dacă rulați exemplul precedent cu Mistral, ar trebui să primiți următoarea ieșire (pe inf2.xlarge mai mic, ar putea dura 250 de minute):

███████████████████████| 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|

A curăța

Când ați terminat, asigurați-vă că opriți instanțele EC2 prin consola Amazon EC2.

Concluzie

Echipele Gradient și Neuron sunt încântate să vadă o adoptare mai largă a evaluării LLM cu această versiune. Încercați-l singur și rulați cel mai popular cadru de evaluare pe instanțe AWS Inferentia2. Acum puteți beneficia de disponibilitatea la cerere a AWS Inferentia2 atunci când utilizați dezvoltare personalizată LLM de la Gradient. Începeți să găzduiți modele pe AWS Inferentia cu acestea tutoriale.


Despre Autori

Gradient face benchmarkingul LLM rentabil și fără efort cu AWS Inferentia | Amazon Web Services PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Michael Feil este inginer AI la Gradient și a lucrat anterior ca inginer ML la Rodhe & Schwarz și cercetător la Max-Plank Institute for Intelligent Systems și Bosch Rexroth. Michael este unul dintre cei mai importanți contribuitori la diferite biblioteci de inferențe open source pentru LLM și proiecte open source, cum ar fi StarCoder. Michael deține o diplomă de licență în mecatronică și IT de la KIT și un master în robotică de la Universitatea Tehnică din München.

Gradient face benchmarkingul LLM rentabil și fără efort cu AWS Inferentia | Amazon Web Services PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Jim Burtoft este arhitect senior de soluții pentru startup la AWS și lucrează direct cu startup-uri precum Gradient. Jim este CISSP, parte a comunității AWS AI/ML Technical Field, Ambasador Neuron și lucrează cu comunitatea open source pentru a permite utilizarea Inferentia și Trainium. Jim deține o diplomă de licență în matematică de la Universitatea Carnegie Mellon și un master în economie de la Universitatea din Virginia.

Timestamp-ul:

Mai mult de la Învățare automată AWS