Sparsamhet möter noggrannhet: Kostnadseffektiv träning av GPT NeoX- och Pythia-modeller med AWS Trainium | Amazon webbtjänster

Sparsamhet möter noggrannhet: Kostnadseffektiv träning av GPT NeoX- och Pythia-modeller med AWS Trainium | Amazon webbtjänster

Stora språkmodeller (eller LLM) har blivit ett ämne för dagliga samtal. Deras snabba antagande framgår av hur lång tid som krävs för att nå 100 miljoner användare, som har gått från "4.5 år av facebook" till det lägsta någonsin på bara "2 månader av ChatGPT." En generativ förtränad transformator (GPT) använder kausala autoregressiva uppdateringar för att göra förutsägelser. En mängd olika uppgifter som taligenkänning, textgenerering och frågesvar har visat sig ha enastående prestanda av dessa modellarkitekturer. Flera nyare modeller som t.ex Neox, Falcon, Lama använda GPT-arkitekturen som ryggrad. Att träna LLM kräver en enorm mängd beräkningstid, vilket kostar miljontals dollar. I det här inlägget kommer vi att sammanfatta utbildningsförfarandet för GPT Neox on AWS Trainium, en specialbyggd maskininlärningsaccelerator (ML) optimerad för djupinlärningsträning. Vi kommer att beskriva hur vi kostnadseffektivt (3.2 M tokens/$) tränade sådana modeller med AWS Trainium utan att förlora någon modellkvalitet.

Lösningsöversikt

GPT NeoX och Pythia modeller

GPT NeoX och Pythia är kausala språkmodeller med öppen källkod av Eleuther-AI med cirka 20 miljarder parametrar i NeoX och 6.9 miljarder i Pythia. Båda är avkodarmodeller som följer liknande arkitektonisk design som Chat GPT3. Men de har också flera tillägg, som också är allmänt antagna i de senaste modellerna som Llama. Speciellt har de rotationspositionell inbäddning (ROPE) med partiell rotation över huvudets dimensioner. Originalmodellerna (NeoX och Pythia 6.9B) är utbildade på öppet tillgängliga Högdataset med deduplicering och med hjälp av Megatron och Deepspeed backend.

Vi demonstrerar förträning och finjustering av dessa modeller på AWS Trainium-baserade Trn1-instanser med hjälp av Neuron NeMo bibliotek. För att fastställa proof-of-concept och snabb reproduktion kommer vi att använda en mindre Wikipedia-datauppsättning som tokeniserats med GPT2 Byte-pair encoding (BPE) tokenizer.

genomgång

Ladda ner den förtokeniserade Wikipedia-datauppsättningen som visas:

export DATA_DIR=~/examples_datasets/gpt2 mkdir -p ${DATA_DIR} && cd ${DATA_DIR} wget https://s3.amazonaws.com/models.huggingface.co/bert/gpt2-vocab.json
wget https://s3.amazonaws.com/models.huggingface.co/bert/gpt2-merges.txt
aws s3 cp s3://neuron-s3/training_datasets/gpt/wikipedia/my-gpt2_text_document.bin . --no-sign-request
aws s3 cp s3://neuron-s3/training_datasets/gpt/wikipedia/my-gpt2_text_document.idx . --no-sign-request
aws s3 cp s3://neuron-s3/training_datasets/gpt/wikipedia/license.txt . --no-sign-request

Både NeoX 20B och Pythia 6.9B använder ROPE med partiell rotation, till exempel roterar 25% av huvudets dimensioner och håller resten oroterat. För att effektivt implementera den partiella rotationen på AWS Trainium accelerator, istället för att sammanfoga de roterande och icke-roterande dimensionerna, lägger vi till nollfrekvenser för icke-roterande dimensioner och roterar sedan hela uppsättningen av huvuddimensioner. Detta enkla trick hjälpte oss att förbättra genomströmningen (sekvenser bearbetade per sek) på AWS Trainium.

Träningssteg

För att genomföra utbildningen använder vi SLURM-hanterad multi-nod Amazon Elastic Compute Cloud (Amazon EC2) Trn1-kluster, där varje nod innehåller en trn1.32xl-instans. Varje trn1.32xl har 16 acceleratorer med två arbetare per accelerator. Efter att ha laddat ner den senaste Neuron NeMo paket, använd det medföljande neox och pythia förträning och finjustering av skript med optimerade hyperparametrar och exekvera följande för en träning med fyra noder.

  1. Kompilera: Förkompilera modellen med tre tågiterationer för att generera och spara graferna:
    sbatch --nodes 4 compile.slurm ./neoX_20B_slurm.sh

  2. Kör: Utför träningen genom att ladda de cachade graferna från första steg
    sbatch --nodes 4 run.slurm ./neoX_20B_slurm.sh

  3. Övervaka resultat
    tensorboard --logdir=nemo_experiments/megatron_neox

Samma steg måste följas för att köra Pythia 6.9B-modellen med byte neox_20B_slurm.sh by pythia_6.9B_slurm.sh.

Förträning och finjusteringsexperiment

Vi demonstrerar förträningen av GPT-NeoX- och Pythia-modeller på AWS Trainium med hjälp av Neuron NeMo bibliotek för 10k iterationer, och visar även finjustering av dessa modeller för 1k steg. För förträning använder vi GPT2 BPE-tokenizern inuti NeMo och följer densamma config som används i originalmodellen. Finjustering på AWS Trainium kräver ändring av få parametrar (som t.ex vokab storleksdelningsfaktor), som tillhandahålls i finjusteringsskripten för att ta hänsyn till Megatron kontra NeMo-skillnader och GPU kontra AWS Trainium-ändringar. Den multi-nodsdistribuerade träningsgenomströmningen med varierande antal noder visas i tabell-1.

Modell Tensor parallell Rörledning parallell Antal instanser Kostnad ($/timme) Sekvenslängd Global batchstorlek Genomströmning (sek/sek) Kostnadsgenomströmningsförhållande (tokens/$)
Pythia 6.9B 8 1 1 7.59 2048 256 10.4 10,102,387
8 1 4 30.36 2048 256 35.8 8,693,881
NeoX 20B 8 4 4 30.36 2048 16384 13.60 3,302,704
8 4 8 60.72 2048 16384 26.80 3,254,134
8 4 16 121.44 2048 16384 54.30 3,296,632
8 4 32 242.88 2048 16384 107.50 3,263,241
8 4 64 485.76 2048 16384 212.00 3,217,708

Tabell 1. Jämför genomsnittlig genomströmning av GPT NeoX- och Pythia-modeller för att träna upp till 500 steg med växlande antal noder. De prissättning av trn1.32xl baseras på den 3-åriga reserverade effektiva timpriset.

Därefter utvärderar vi också förlustbanan för modellträningen på AWS Trainium och jämför den med motsvarande körning på ett P4d (Nvidia A100 GPU-kärnor)-kluster. Tillsammans med träningsförlusten jämför vi också användbar indikator som gradientnorm, som är 2-normen av modellgradienterna som beräknas vid varje träningsiteration för att övervaka träningsframstegen. Träningsresultaten visas i figur-1, 2 och finjustering av NeoX 20B i figur-3.

Utbildningsförlust i genomsnitt för alla arbetare (vänster) och gradientnorm (höger) vid utbildning varje steg.

Figur 1. Utbildningsförlust i genomsnitt för alla arbetare (vänster) och gradientnorm (höger) vid utbildning varje steg. NeoX 20B tränas på 4 noder med liten wikidatauppsättning på GPU och Trainium med samma träningshyperparametrar (global batchstorlek=256). GPU använder BF16 och standard blandad precision medan AWS Trainium använder full BF16 med stokastisk avrundning. Förlust- och gradientnormbanorna matchar för GPU och AWS Trainium.

Utbildningsförlust i genomsnitt för alla arbetare (vänster) och gradientnorm (höger) vid träning varje steg (Pythia).

Figur 2. Utbildningsförlust i genomsnitt för alla arbetare (vänster) och gradientnorm (höger) vid utbildning varje steg. I likhet med GPT NeoX i figur-1 tränas Pythia 6.9B på 4 noder med liten wikidatauppsättning på GPU och Trainium med samma träningshyperparametrar (global batchstorlek=256). Förlust- och gradientnormbanorna matchar GPU och Trainium.

Finjustera GPT NeoX 20B-modellen på GPU och AWS Trainium med träningsförlust i genomsnitt för alla arbetare (vänster) och gradientnorm (höger).

Figur 3. Finjustera GPT NeoX 20B-modellen på GPU och AWS Trainium med träningsförlust i genomsnitt för alla arbetare (vänster) och gradientnorm (höger). En liten wikidatauppsättning används för att finjustera demonstrationen. Förlust- och gradientnormbanorna matchar för GPU och AWS Trainium.

I det här inlägget visade vi kostnadseffektiv utbildning av LLM:er på AWS djupinlärningshårdvara. Vi tränade GPT NeoX 20B och Pythia 6.9B-modeller på AWS Trn1 med Neuron NeMo-biblioteket. Den normaliserade kostnaden för 20 miljarder modeller med AWS Trainium är cirka 3.2 miljoner tokens/$ spenderade. Tillsammans med kostnadseffektiv träning på AWS Trainium får vi liknande modellnoggrannhet, vilket framgår av träningsstegförlust och gradientnormbana. Vi finjusterade också de tillgängliga kontrollpunkterna för NeoX 20B-modellen på AWS Trainium. För ytterligare information om den distribuerade utbildningen med NeMo Megatron på AWS Trainium, se AWS Neuron Reference för NeMo Megatron. En bra resurs för att börja finjustera Llama-modellen kan hittas här, Finjustering av Lama2. För att komma igång med managed AWS Trainium på Amazon SageMaker, Se Träna dina ML-modeller med AWS Trainium och Amazon SageMaker.


Om författarna

Sparsamhet möter noggrannhet: Kostnadseffektiv träning av GPT NeoX- och Pythia-modeller med AWS Trainium | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Gaurav Gupta är för närvarande en tillämpad forskare vid Amazon Web Services (AWS) AI-labb. Dr. Gupta avslutade sin doktorsexamen från USC Viterbi. Hans forskningsintressen spänner över domänen av sekventiell datamodellering, inlärning av partiella differentialekvationer, informationsteori för maskininlärning, fraktionella dynamiska modeller och komplexa nätverk. Han arbetar för närvarande med tillämpade och matematiska problem på LLM:s träningsbeteende, synmodeller med PDE, informationsteoretiska multimodalitetsmodeller. Dr. Gupta har publikationer i topptidskrifter/konferenser som Neurips, ICLR, ICML, Nature, IEEE Control Society, ACM cyber-physical society.

Sparsamhet möter noggrannhet: Kostnadseffektiv träning av GPT NeoX- och Pythia-modeller med AWS Trainium | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Ben Snyder är tillämpad forskare med AWS Deep Learning. Hans forskningsintressen inkluderar grundläggande modeller, förstärkningsinlärning och asynkron optimering. Utanför jobbet tycker han om att cykla och campa.

Sparsamhet möter noggrannhet: Kostnadseffektiv träning av GPT NeoX- och Pythia-modeller med AWS Trainium | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Amith (R) Mamidala är senior applikationsteknik för maskininlärning på AWS Annapurna Labs. Dr. Mamidala avslutade sin doktorsexamen vid Ohio State University i högpresterande datoranvändning och kommunikation. Under sin tjänstgöringstid på IBM Research bidrog Dr. Mamidala till BlueGene-klassen av datorer som ofta ledde Top500-rankingen av de mest kraftfulla och energieffektiva superdatorerna. Projektet belönades 2009 med National Medal of Technology and Innovation. Efter en kort period som AI-ingenjör på en finansiell hedgefond, gick Dr. Mamidala med i Annapurna-laboratoriet med fokus på utbildning i stora språkmodeller.

Sparsamhet möter noggrannhet: Kostnadseffektiv träning av GPT NeoX- och Pythia-modeller med AWS Trainium | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Jun (Luke) Huan är huvudforskare vid AWS AI Labs. Dr. Huan arbetar med AI och datavetenskap. Han har publicerat mer än 180 referentgranskade artiklar i ledande konferenser och tidskrifter. Han mottog NSF Faculty Early Career Development Award 2009. Innan han började på AWS arbetade han på Baidu Research som en framstående vetenskapsman och chef för Baidu Big Data Laboratory. Han grundade StylingAI Inc., en AI-start-up, och arbetade som VD och Chief Scientist 2019-2021. Innan han började på industrin var han professor i Charles E. och Mary Jane Spahr vid EECS-avdelningen vid University of Kansas.

Sparsamhet möter noggrannhet: Kostnadseffektiv träning av GPT NeoX- och Pythia-modeller med AWS Trainium | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Shruti Koparkar är Senior Product Marketing Manager på AWS. Hon hjälper kunder att utforska, utvärdera och använda Amazon EC2 accelererad datorinfrastruktur för deras maskininlärningsbehov.

Tidsstämpel:

Mer från AWS maskininlärning