I det här inlägget visar vi upp finjustering av en Llama 2-modell med hjälp av en PEFT-metod (Parameter-Efficient Fine-Tuning) och distribuerar den finjusterade modellen på AWS Inferentia2. Vi använder AWS Neuron mjukvaruutvecklingskit (SDK) för att komma åt AWS Inferentia2-enheten och dra nytta av dess höga prestanda. Vi använder sedan en stor modell för slutledningsbehållare som drivs av Djupt Java-bibliotek (DJLServing) som vår modellserveringslösning.
Lösningsöversikt
Effektiv finjustering av Llama2 med QLoRa
Llama 2-familjen av stora språkmodeller (LLM) är en samling förtränade och finjusterade generativa textmodeller som sträcker sig i skala från 7 miljarder till 70 miljarder parametrar. Llama 2 var förtränad på 2 biljoner tokens med data från allmänt tillgängliga källor. AWS-kunder väljer ibland att finjustera Llama 2-modeller med hjälp av kundernas egna data för att uppnå bättre prestanda för nedströmsuppgifter. Men på grund av Llama 2-modellens stora antal parametrar kan full finjustering vara oöverkomligt dyrt och tidskrävande. Parameter-Efficient Fine-Tuning (PEFT)-metoden kan lösa detta problem genom att bara finjustera ett litet antal extra modellparametrar samtidigt som de flesta parametrar i den förtränade modellen fryses. För mer information om PEFT kan man läsa detta inlägg. I det här inlägget använder vi QLoRa för att finjustera en Llama 2 7B-modell.
Distribuera en finjusterad modell på Inf2 med Amazon SageMaker
AWS Inferentia2 är specialbyggd maskininlärningsaccelerator (ML) designad för slutledningsarbetsbelastningar och ger hög prestanda till upp till 40 % lägre kostnad för generativa AI- och LLM-arbetsbelastningar jämfört med andra slutledningsoptimerade instanser på AWS. I det här inlägget använder vi Amazon Elastic Compute Cloud (Amazon EC2) Inf2-instans, med AWS Inferentia2, andra generationens Inferentia2-acceleratorer, som var och en innehåller två NeuronCores-v2. Varje NeuronCore-v2 är en oberoende, heterogen beräkningsenhet, med fyra huvudmotorer: Tensor-, Vector-, Scalar- och GPSIMD-motorer. Den inkluderar ett on-chip mjukvaruhanterat SRAM-minne för att maximera datalokaliteten. Eftersom flera bloggar på Inf2 har publicerats kan läsaren hänvisa till detta inlägg och vårt dokumentation för mer information om Inf2.
För att distribuera modeller på Inf2 behöver vi AWS Neuron SDK som mjukvarulager som körs ovanpå Inf2-hårdvaran. AWS Neuron är SDK som används för att köra djupinlärningsarbetsbelastningar på AWS Inferentia och AWS Trainium baserade instanser. Det möjliggör end-to-end ML-utvecklingslivscykel för att bygga nya modeller, träna och optimera dessa modeller och distribuera dem för produktion. AWS Neuron inkluderar en djup inlärning kompilator, runtimeoch verktyg som är integrerat med populära ramverk som TensorFlow och PyTorch. I den här bloggen kommer vi att använda transformers-neuronx
, som är en del av AWS Neuron SDK för arbetsflöden för slutledning av transformatoravkodare. Det stöder en rad populära modeller, inklusive Llama 2.
Att distribuera modeller på Amazon SageMaker, använder vi vanligtvis en behållare som innehåller de nödvändiga biblioteken, såsom Neuron SDK och transformers-neuronx
såväl som modellbetjäningskomponenten. Amazon SageMaker upprätthåller behållare för djupinlärning (DLC) med populära bibliotek med öppen källkod för värd för stora modeller. I det här inlägget använder vi Stor modell slutledningsbehållare för neuron. Denna behållare har allt du behöver för att distribuera din Llama 2-modell på Inf2. För resurser för att komma igång med LMI på Amazon SageMaker, se många av våra befintliga inlägg (blogg 1, blogg 2, blogg 3) om detta ämne. Kort sagt, du kan köra behållaren utan att skriva någon ytterligare kod. Du kan använda standardhanterare för en sömlös användarupplevelse och skicka in ett av de modellnamn som stöds och alla konfigurerbara parametrar för laddningstid. Detta kompilerar och serverar en LLM på en Inf2-instans. Till exempel att distribuera OpenAssistant/llama2-13b-orca-8k-3319
, kan du tillhandahålla följande konfiguration (som serving.properties
fil). I serving.properties
, specificerar vi modelltypen som llama2-13b-orca-8k-3319
, batchstorleken som 4, tensorparallellgraden som 2, och det är det. För hela listan över konfigurerbara parametrar, se Alla DJL-konfigurationsalternativ.
Alternativt kan du skriva din egen modellhanterarfil som visas i denna exempel, men det kräver implementering av modellladdnings- och slutledningsmetoderna för att fungera som en brygga mellan DJLServing API:er.
Förutsättningar
Följande lista beskriver förutsättningarna för att implementera modellen som beskrivs i det här blogginlägget. Du kan implementera antingen från AWS Management Console eller använda den senaste versionen av AWS-kommandoradsgränssnitt (AWS CLI).
genomgång
I följande avsnitt kommer vi att gå igenom koden i två delar:
- Finjustera en Llama2-7b-modell och ladda upp modellartefakterna till en specificerad Amazon S3-skopplats.
- Distribuera modellen i en Inferentia2 med hjälp av DJL-servingsbehållare som är värd i Amazon SageMaker.
De fullständiga kodexemplen med instruktioner finns i denna GitHub förvaret.
Del 1: Finjustera en Llama2-7b-modell med PEFT
Vi kommer att använda den nyligen introducerade metoden i tidningen QLoRA: Kvantiseringsmedveten lågrankad adapterjustering för språkgenerering av Tim Dettmers et al. QLoRA är en ny teknik för att minska minnesavtrycket för stora språkmodeller under finjustering, utan att offra prestanda.
Notera: Finjusteringen av llama2-7b-modellen som visas nedan testades på en Amazon SageMaker Studio Notebook med Python 2.0 GPU-optimerad kärna med en ml.g5.2xlarge instanstyp. Som en bästa praxis rekommenderar vi att du använder en Amazon SageMaker Studio Integrated Development Environment (IDE) lanseras i din egen Amazon Virtual Private Cloud (Amazon VPC). Detta låter dig styra, övervaka och inspektera nätverkstrafik inom och utanför din VPC med standard AWS-nätverks- och säkerhetsfunktioner. För mer information, se Säkrar Amazon SageMaker Studio-anslutning med en privat VPC.
Kvantisera basmodellen
Vi laddar först en kvantiserad modell med 4-bitars kvantisering med hjälp av Huggingface transformatorer bibliotek enligt följande:
Ladda träningsdatauppsättning
Därefter laddar vi datauppsättningen för att mata modellen för finjusteringssteg som visas enligt följande:
Fäst ett adapterlager
Här fäster vi ett litet, träningsbart adapterlager, konfigurerat som LoraConfig definieras i Hugging Face's peft bibliotek.
Träna en modell
Med hjälp av LoRA-konfigurationen som visas ovan kommer vi att finjustera Llama2-modellen tillsammans med hyperparametrar. Ett kodavsnitt för att träna modellen visas i följande:
Slå ihop modellvikt
Den finjusterade modellen som utfördes ovan skapade en ny modell som innehåller de tränade LoRA-adaptervikterna. I följande kodavsnitt slår vi samman adaptern med basmodellen så att vi kan använda den finjusterade modellen för slutledning.
Ladda upp modellvikt till Amazon S3
I det sista steget av del 1 kommer vi att spara de sammanslagna modellvikterna till en specificerad Amazon S3-plats. Modellvikten kommer att användas av en modellbetjäningsbehållare i Amazon SageMaker för att vara värd för modellen med en Inferentia2-instans.
Del 2: Värd för QLoRA-modell för slutledning med AWS Inf2 med SageMaker LMI Container
I det här avsnittet går vi igenom stegen för att distribuera en finjusterad QLoRA-modell i en Amazon SageMaker-värdmiljö. Vi använder en DJL servering behållare från SageMaker DLC, som integreras med transformatorer-neuronx bibliotek för denna modell. Installationen underlättar laddningen av modeller på AWS Inferentia2-acceleratorer, parallelliserar modellen över flera NeuronCores och möjliggör servering via HTTP-slutpunkter.
Förbered modellartefakter
DJL stöder många djupinlärningsoptimeringsbibliotek, inklusive DeepSpeed, Snabbare Transformer och mer. För modellspecifika konfigurationer tillhandahåller vi en serving.properties
med nyckelparametrar, som t.ex tensor_parallel_degree
och model_id
för att definiera modellladdningsalternativen. De model_id
kan vara ett Hugging Face-modell-ID eller en Amazon S3-bana där modellvikterna lagras. I vårt exempel tillhandahåller vi Amazon S3-platsen för vår finjusterade modell. Följande kodavsnitt visar egenskaperna som används för modellvisningen:
Se detta dokumentation för mer information om de konfigurerbara alternativen tillgängliga via serving.properties
. Observera att vi använder option.n_position=512
i den här bloggen för snabbare AWS Neuron-kompilering. Om du vill prova en större längd på indatatoken rekommenderar vi läsaren att förkompilera modellen i förväg (se AOT Pre-Compile Model på EC2). Annars kan du stöta på ett timeout-fel om kompileringstiden är för lång.
Efter serving.properties
fil är definierad, paketerar vi filen i en tar.gz
format enligt följande:
Sedan laddar vi upp tar.gz till en Amazon S3-hinkplats:
Skapa en Amazon SageMaker-modellslutpunkt
För att använda en Inf2-instans för visning använder vi en Amazon SageMaker LMI-behållare med DJL neuronX-stöd. Vänligen hänvisa till detta inlägg för mer information om hur du använder en DJL NeuronX-behållare för slutledning. Följande kod visar hur man distribuerar en modell med Amazon SageMaker Python SDK:
Testmodellens slutpunkt
Efter att modellen har implementerats framgångsrikt kan vi validera slutpunkten genom att skicka en exempelförfrågan till prediktorn:
Exempelutgången visas som följer:
I samband med dataanalys hänvisar Machine Learning (ML) till en statistisk teknik som kan extrahera prediktiv kraft från en datauppsättning med ökande komplexitet och noggrannhet genom att iterativt begränsa omfattningen av en statistik.
Machine Learning är inte en ny statistisk teknik, utan snarare en kombination av befintliga tekniker. Dessutom har den inte utformats för att användas med en specifik datauppsättning eller för att producera ett specifikt resultat. Snarare designades den för att vara tillräckligt flexibel för att anpassa sig till alla datauppsättningar och för att göra förutsägelser om vilket resultat som helst.
Städa upp
Om du bestämmer dig för att du inte längre vill ha SageMaker-slutpunkten igång kan du ta bort den med hjälp av AWS SDK för Python (boto3), AWS CLI eller Amazon SageMaker Console. Dessutom kan du också stänga av Amazon SageMaker Studio Resources som inte längre behövs.
Slutsats
I det här inlägget visade vi dig hur du finjusterar en Llama2-7b-modell med hjälp av LoRA-adapter med 4-bitars kvantisering med en enda GPU-instans. Sedan distribuerade vi modellen till en Inf2-instans som var värd i Amazon SageMaker med hjälp av en DJL-serveringsbehållare. Slutligen validerade vi Amazon SageMaker-modellens slutpunkt med en textgenereringsförutsägelse med SageMaker Python SDK. Varsågod och prova, vi älskar att höra din feedback. Håll ögonen öppna för uppdateringar om fler funktioner och nya innovationer med AWS Inferentia.
För fler exempel om AWS Neuron, se aws-neuron-prover.
Om författarna
Wei Teh är Senior AI/ML Specialist Solutions Architect på AWS. Han brinner för att hjälpa kunder att avancera sin AWS-resa, med fokus på Amazon Machine Learning-tjänster och maskininlärningsbaserade lösningar. Utanför jobbet tycker han om utomhusaktiviteter som camping, fiske och vandring med sin familj.
Qingwejag Li är maskininlärningsspecialist på Amazon Web Services. Han fick sin doktorsexamen. i Operations Research efter att han bröt sin rådgivares forskningsbidragskonto och misslyckades med att leverera det Nobelpris han lovade. För närvarande hjälper han kunder inom finanssektorn och försäkringsbranschen att bygga maskininlärningslösningar på AWS. På fritiden gillar han att läsa och undervisa.
- SEO-drivet innehåll och PR-distribution. Bli förstärkt idag.
- PlatoData.Network Vertical Generative Ai. Styrka dig själv. Tillgång här.
- PlatoAiStream. Web3 Intelligence. Kunskap förstärkt. Tillgång här.
- Platoesg. Kol, CleanTech, Energi, Miljö, Sol, Avfallshantering. Tillgång här.
- PlatoHealth. Biotech och kliniska prövningar Intelligence. Tillgång här.
- Källa: https://aws.amazon.com/blogs/machine-learning/fine-tune-llama-2-using-qlora-and-deploy-it-on-amazon-sagemaker-with-aws-inferentia2/
- : har
- :är
- :inte
- :var
- $UPP
- 1
- 10
- 100
- 11
- 15%
- 16
- 19
- 24
- 300
- 7
- 70
- 8
- a
- Om oss
- ovan
- accelerator
- acceleratorer
- tillgång
- Konto
- noggrannhet
- Uppnå
- tvärs
- aktiviteter
- anpassa
- Annat
- Dessutom
- adress
- avancera
- Efter
- framåt
- AI
- AI / ML
- AL
- tillåter
- längs
- alfa
- också
- amason
- Amazon maskininlärning
- Amazon SageMaker
- Amazon SageMaker Studio
- Amazon Web Services
- an
- analys
- och
- vilken som helst
- API: er
- Ansök
- tillvägagångssätt
- ÄR
- AS
- At
- bifoga
- bil
- tillgänglig
- AWS
- AWS slutledning
- boll
- bas
- baserat
- dosering
- BE
- varit
- fördel
- BÄST
- Bättre
- mellan
- Miljarder
- Blogg
- bloggar
- BRO
- Pank
- SLUTRESULTAT
- men
- by
- KAN
- kapacitet
- kapabel
- Välja
- cloud
- koda
- samling
- kombination
- fullborda
- Komplexiteten
- komponent
- Compute
- konfiguration
- konfigurerad
- Anslutningar
- Konsol
- tidskrävande
- Behållare
- innehåller
- sammanhang
- kontroll
- Pris
- kunde
- skapas
- För närvarande
- Kunder
- datum
- dataanalys
- beslutar
- djup
- djupt lärande
- Standard
- definiera
- definierade
- Examen
- leverera
- levererar
- distribuera
- utplacerade
- utplacera
- beskriven
- utformade
- Utveckling
- anordning
- Hamnarbetare
- ner
- grund
- under
- dynamisk
- E&T
- varje
- antingen
- möjliggör
- början till slut
- Slutpunkt
- Motor
- Motorer
- tillräckligt
- Miljö
- fel
- etc
- allt
- exempel
- exempel
- exekveras
- befintliga
- dyra
- erfarenhet
- extra
- Ansikte
- underlättar
- Misslyckades
- falsk
- familj
- snabbare
- Med
- återkoppling
- Fil
- slutlig
- Slutligen
- finansiella
- finansiell tjänst
- Förnamn
- Fiske
- flexibel
- fokusering
- följer
- följt
- efter
- följer
- Fotavtryck
- För
- format
- hittade
- fyra
- ramar
- frysning
- från
- full
- Vidare
- generering
- generativ
- Generativ AI
- skaffa sig
- Ge
- Go
- kommer
- GPU
- bevilja
- hårdvara
- he
- höra
- hjälpa
- hjälper
- här.
- Hög
- högpresterande
- hans
- värd
- värd
- värd
- Huset
- Hur ser din drömresa ut
- How To
- Men
- html
- http
- HTTPS
- ID
- if
- bild
- genomföra
- genomföra
- in
- innefattar
- innefattar
- Inklusive
- ökande
- oberoende
- industrin
- informationen
- innovationer
- ingång
- ingångar
- exempel
- instruktioner
- försäkring
- integrerade
- integrerar
- in
- introducerade
- IT
- iteration
- DESS
- java
- resa
- jpg
- json
- Ha kvar
- Nyckel
- Kit (SDK)
- språk
- Large
- större
- senaste
- lanserades
- lager
- skikt
- inlärning
- Längd
- Nivå
- bibliotek
- Bibliotek
- livscykel
- tycka om
- gillar
- linje
- Lista
- Lama
- LLM
- läsa in
- läser in
- läge
- längre
- älskar
- lägre
- Maskinen
- maskininlärning
- Huvudsida
- upprätthåller
- göra
- ledning
- många
- maximera
- Minne
- Sammanfoga
- metod
- metoder
- kanske
- ML
- modell
- modeller
- Moduler
- Övervaka
- mer
- mest
- mycket
- multipel
- namn
- vid
- Behöver
- nät
- nätverkstrafik
- nätverk
- Nya
- Nej
- Nobelpriset
- Ingen
- Notera
- antal
- of
- on
- ONE
- endast
- till
- öppet
- öppen källkod
- Verksamhet
- optimering
- Optimera
- optimerad
- Alternativet
- Tillbehör
- or
- Övriga
- annat
- vår
- Resultat
- konturer
- produktion
- utanför
- över
- egen
- paket
- Papper
- Parallell
- parameter
- parametrar
- del
- reservdelar till din klassiker
- passera
- brinner
- bana
- prestanda
- utfört
- Planen
- plato
- Platon Data Intelligence
- PlatonData
- snälla du
- Populära
- Inlägg
- inlägg
- kraft
- drivs
- praktiken
- Precision
- förutsägelse
- Förutsägelser
- Predictor
- förutsättningar
- privat
- Priset
- Problem
- process
- producera
- Produktion
- utlovade
- egenskaper
- ge
- publicly
- publicerade
- Python
- pytorch
- område
- som sträcker sig
- snarare
- Läsa
- Läsare
- Läsning
- mottagna
- nyligen
- rekommenderar
- minska
- hänvisa
- hänvisar
- Repository
- begära
- förfrågningar
- Obligatorisk
- Kräver
- forskning
- Resurser
- respons
- svar
- höger
- Körning
- rinnande
- offra
- sagemaker
- Save
- Skala
- skalning
- omfattning
- sDK
- sömlös
- Andra
- Andra generationen
- §
- säkerhet
- se
- skicka
- senior
- Sekvens
- tjänar
- service
- Tjänster
- portion
- in
- inställning
- inställning
- flera
- Kort
- visa
- visade
- visas
- Visar
- eftersom
- enda
- Storlek
- Small
- kodavsnitt
- So
- Mjukvara
- mjukvaruutveckling
- Utrustning för programvaruutveckling
- lösning
- Lösningar
- ibland
- Källa
- Källor
- specialist
- specifik
- specificerade
- standard
- igång
- statistisk
- bo
- Steg
- Steg
- lagras
- studio
- Framgångsrikt
- sådana
- stödja
- Som stöds
- Stöder
- uppgifter
- Undervisning
- Tekniken
- tekniker
- tensorflow
- testade
- text
- den där
- Smakämnen
- deras
- Dem
- sedan
- Dessa
- detta
- Genom
- tim
- tid
- till
- token
- tokens
- alltför
- topp
- ämne
- brännaren
- trafik
- Tåg
- tränad
- Utbildning
- transformator
- Biljon
- sann
- prova
- stämd
- trimma
- två
- Typ
- Uppdateringar
- uppladdad
- URL
- användning
- Begagnade
- Användare
- Användarupplevelse
- med hjälp av
- vanligen
- BEKRÄFTA
- validerade
- version
- via
- Virtuell
- gå
- genomgång
- vill
- var
- we
- webb
- webbservice
- vikt
- VÄL
- Vad
- Vad är
- som
- medan
- kommer
- med
- inom
- utan
- Arbete
- arbetstagaren
- arbetsflöden
- skriva
- skrivning
- Om er
- Din
- zephyrnet