De laatste jaren hebben we een snelle ontwikkeling doorgemaakt op het gebied van deep learning. Hoewel de hardware is verbeterd, zoals met de nieuwste generatie accelerators van NVIDIA en Amazon, ondervinden geavanceerde machine learning (ML)-beoefenaars nog regelmatig problemen bij het inzetten van hun grote deep learning-modellen voor toepassingen zoals natuurlijke taalverwerking (NLP).
In een eerdere post bespraken we mogelijkheden en configureerbare instellingen in Implementatie van Amazon SageMaker-model dat kan de conclusie met deze grote modellen gemakkelijker maken. Vandaag kondigen we een nieuwe Amazon Sage Maker Deep Learning Container (DLC) waarmee u binnen enkele minuten aan de slag kunt met grote modelinferentie. Deze DLC bundelt enkele van de meest populaire open-sourcebibliotheken voor parallelle inferentie van modellen, zoals DeepSpeed โโen Hugging Face Accelerate.
In dit bericht gebruiken we een nieuwe SageMaker grootmodel inferentie-DLC om twee van de meest populaire grote NLP-modellen in te zetten: BigScience's BLOEI-176B en meta's OPT-30B uit de Hugging Face-repository. In het bijzonder gebruiken we Deep Java Library (DJL)-serving- en tensor-parallellismetechnieken van DeepSpeed โโom 0.1 seconde latentie per token te bereiken in een gebruiksscenario voor het genereren van tekst.
U vindt onze volledige voorbeeldnotitieboekjes in onze GitHub-repository.
Inferentietechnieken voor grote modellen
Taalmodellen zijn de laatste tijd explosief gestegen, zowel in omvang als in populariteit. Met gemakkelijke toegang vanuit modeldierentuinen zoals Hugging Face en verbeterde nauwkeurigheid en prestaties bij NLP-taken zoals classificatie en tekstgeneratie, grijpen beoefenaars steeds meer naar deze grote modellen. Grote modellen zijn echter vaak te groot om in het geheugen van een enkele versneller te passen. Het BLOOM-176B-model kan bijvoorbeeld meer dan 350 gigabyte aan acceleratorgeheugen nodig hebben, wat veel groter is dan de capaciteit van hardwareversnellers die tegenwoordig beschikbaar zijn. Dit vereist het gebruik van parallelle modeltechnieken uit bibliotheken zoals DeepSpeed โโen Hugging Face Accelerate om een โโmodel te distribueren over meerdere versnellers voor gevolgtrekking. In dit bericht gebruiken we de SageMaker groot model inferentiecontainer om latentie- en doorvoerprestaties te genereren en te vergelijken met behulp van deze twee open-sourcebibliotheken.
DeepSpeed โโen Accelerate gebruiken verschillende technieken om grote taalmodellen voor gevolgtrekking te optimaliseren. Het belangrijkste verschil is dat van DeepSpeed gebruik van geoptimaliseerde kernels. Deze kernels kunnen de inferentielatentie drastisch verbeteren door knelpunten in de berekeningsgrafiek van het model te verminderen. Geoptimaliseerde kernels kunnen moeilijk te ontwikkelen zijn en zijn typisch specifiek voor een bepaalde modelarchitectuur; DeepSpeed โโondersteunt populaire grote modellen zoals OPT en BLOOM met deze geoptimaliseerde kernels. Daarentegen bevat de Accelerate-bibliotheek van Hugging Face op het moment van schrijven geen geoptimaliseerde kernels. Zoals we in onze resultatensectie bespreken, is dit verschil verantwoordelijk voor een groot deel van het prestatievoordeel dat DeepSpeed โโheeft ten opzichte van Accelerate.
Een tweede verschil tussen DeepSpeed โโen Accelerate is het type parallellisme van het model. Accelerate gebruikt pijplijnparallellisme om een โโmodel te verdelen tussen de verborgen lagen van een model, terwijl DeepSpeed โโtensorparallellisme gebruikt om de lagen zelf te verdelen. Pijplijnparallellisme is een flexibele benadering die meer modeltypen ondersteunt en de doorvoer kan verbeteren wanneer grotere batchgroottes worden gebruikt. Tensor-parallellisme vereist meer communicatie tussen GPU's omdat modellagen over meerdere apparaten kunnen worden verspreid, maar de latentie van gevolgtrekkingen kan verbeteren door meerdere GPU's tegelijkertijd in te schakelen. U kunt meer leren over parallellismetechnieken in: Inleiding tot modelparallellisme en Modelparallellisme.
Overzicht oplossingen
Om effectief grote taalmodellen te hosten, hebben we functies en ondersteuning nodig op de volgende belangrijke gebieden:
- Oplossingen bouwen en testen โ Gezien de iteratieve aard van ML-ontwikkeling, hebben we de mogelijkheid nodig om te bouwen, snel te herhalen en te testen hoe het inferentie-eindpunt zich zal gedragen wanneer deze modellen worden gehost, inclusief de mogelijkheid om snel te falen. Deze modellen kunnen meestal alleen worden gehost op grotere instanties zoals p4dn of g5, en gezien de grootte van de modellen, kan het even duren om een โโinferentie-instantie op te starten en een testiteratie uit te voeren. Lokaal testen heeft meestal beperkingen omdat je een vergelijkbare instantie nodig hebt om te testen, en deze modellen zijn niet gemakkelijk te verkrijgen.
- Op schaal implementeren en uitvoeren โ De modelbestanden moeten op de inferentie-instanties worden geladen, wat op zichzelf al een uitdaging is gezien de grootte. Tar / Un-Tar als voorbeeld voor de Bloom-176B duurt ongeveer 1 uur om te maken en nog een uur om te laden. We hebben een alternatief mechanisme nodig om gemakkelijke toegang tot de modelbestanden mogelijk te maken.
- Het model laden als singleton โ Voor een proces met meerdere werknemers moeten we ervoor zorgen dat het model slechts รฉรฉn keer wordt geladen, zodat we niet in race-omstandigheden terechtkomen en onnodige middelen uitgeven. In dit bericht laten we een manier zien om rechtstreeks te laden van Amazon eenvoudige opslagservice (Amazon S3). Dit werkt echter alleen als we de standaardinstellingen van de DJL gebruiken. Bovendien moet elke schaling van de eindpunten in een paar minuten kunnen draaien, wat een heroverweging vereist van hoe de modellen kunnen worden geladen en gedistribueerd.
- Sharding-frameworks - Deze modellen moeten meestal zijn, meestal door een tensor-parallelisme of door pijplijn-sharding als de typische sharding-technieken, en we hebben geavanceerde concepten zoals ZeRO-sharding bovenop tensor-sharding gebouwd. Raadpleeg voor meer informatie over sharding-technieken: Modelparallellisme. Om dit te bereiken, kunnen we verschillende combinaties hebben en frameworks gebruiken van NIVIDIA, DeepSpeed โโen anderen. Dit vereist de mogelijkheid om BYOC te testen of 1P-containers te gebruiken en oplossingen te herhalen en benchmarkingtests uit te voeren. Misschien wilt u ook verschillende hostingopties testen, zoals asynchroon, serverloos en andere.
- Hardware selectie โ Uw keuze in hardware wordt bepaald door alle bovengenoemde punten en verdere verkeerspatronen, use case-behoeften en modelgroottes.
In dit bericht gebruiken we DeepSpeed's geoptimaliseerde kernels en tensor parallellisme-technieken om BLOOM-176B en OPT-30B op SageMaker te hosten. We vergelijken ook de resultaten van Accelerate om de prestatievoordelen van geoptimaliseerde kernels en tensorparallellisme aan te tonen. Raadpleeg voor meer informatie over DeepSpeed โโen Accelerate: DeepSpeed-inferentie: efficiรซnte inferentie van transformatormodellen mogelijk maken op ongekende schaal en Ongelooflijk snelle BLOOM-inferentie met DeepSpeed โโen Accelerate.
In dit voorbeeld gebruiken we DJLServering als de oplossing voor het serveren van modellen. DJLServering is een krachtige universele model-serving-oplossing aangedreven door de Deep Java Library (DJL) die programmeertaal-agnostisch is. Voor meer informatie over de DJL en DJLServering, zie: Implementeer grote modellen op Amazon SageMaker met behulp van DJLServering en DeepSpeed โโmodel parallelle inferentie.
Het is vermeldenswaard dat geoptimaliseerde kernels kunnen resulteren in precisieveranderingen en een gewijzigde berekeningsgrafiek, wat theoretisch zou kunnen resulteren in veranderd modelgedrag. Hoewel dit af en toe de uitkomst van de gevolgtrekking kan veranderen, verwachten we niet dat deze verschillen een wezenlijke invloed zullen hebben op de basisevaluatiestatistieken van een model. Desalniettemin wordt beoefenaars geadviseerd om te bevestigen dat de modeluitvoer is zoals verwacht bij het gebruik van deze kernels.
De volgende stappen demonstreren hoe u een BLOOM-176B-model in SageMaker implementeert met behulp van DJLServering en een SageMaker grootmodel inferentiecontainer. Het complete voorbeeld is ook beschikbaar in onze GitHub-repository.
De DJLServering SageMaker DLC-afbeelding gebruiken
Gebruik de volgende code om de DJLServering SageMaker DLC-image te gebruiken nadat u de regio hebt vervangen door uw specifieke regio waarin u de notebook gebruikt:
Maak ons โโmodelbestand
Eerst maken we een bestand met de naam serving.properties
die slechts รฉรฉn regel code bevat. Dit vertelt de DJL-modelserver om de DeepSpeed-engine te gebruiken. Het bestand bevat de volgende code:
serving.properties
is een bestand gedefinieerd door DJLServing dat wordt gebruikt om de configuratie per model te configureren.
Vervolgens maken we onze model.py
bestand, dat de code definieert die nodig is om het model te laden en vervolgens te bedienen. In onze code lezen we in de TENSOR_PARALLEL_DEGREE
omgevingsvariabele (de standaardwaarde is 1). Dit stelt het aantal apparaten in waarover de parallelle tensor-modules worden verdeeld. Merk op dat DeepSpeed โโenkele ingebouwde partitiedefinities biedt, waaronder een voor BLOOM-modellen. We gebruiken het door te specificeren: replace_method
en relpace_with_kernel_inject
. Als je een aangepast model hebt en DeepSpeed โโnodig hebt om effectief te partitioneren, moet je veranderen relpace_with_kernel_inject
naar false
en voeg injection_policy
om de runtime-partitie te laten werken. Voor meer informatie, zie: Initialiseren voor gevolgtrekking. Voor ons voorbeeld hebben we het vooraf gepartitioneerde BLOOM-model op DeepSpeed โโgebruikt.
Ten tweede, in de model.py
bestand, laden we het model ook van Amazon S3 nadat het eindpunt is opgedraaid. Het model wordt geladen in de /tmp
ruimte op de container omdat SageMaker de /tmp
aan de Amazon elastische blokwinkel (Amazon EBS) volume dat wordt aangekoppeld wanneer we de parameter voor het maken van het eindpunt opgeven VolumeSizeInGB
. Voor instanties zoals p4dn, die vooraf zijn gebouwd met de volume-instantie, kunnen we gebruik blijven maken van de /tmp
op de container. Zie de volgende code:
DJLServering beheert de runtime-installatie op alle pip-pakketten gedefinieerd in requirement.txt
. Dit bestand heeft:
We hebben een map gemaakt met de naam code
en model.py
, serving.properties
en requirements.txt
bestanden zijn al gemaakt in deze map. Om de bestanden te bekijken, kunt u de volgende code uitvoeren vanaf de terminal:
De volgende afbeelding toont de structuur van de model.tar.gz
.
Ten slotte maken we het modelbestand en uploaden het naar Amazon S3:
Download en bewaar het model van Hugging Face (optioneel)
We hebben de stappen in dit gedeelte gegeven voor het geval u het model naar Amazon S3 wilt downloaden en vanaf daar wilt gebruiken. De stappen worden gegeven in het Jupyter-bestand op GitHub. De volgende schermafbeelding toont een momentopname van de stappen.
Een SageMaker-model maken
We maken nu een SageMaker-model. Wij gebruiken de Amazon Elastic Container-register (Amazon ECR) afbeelding geleverd door en het modelartefact uit de vorige stap om het SageMaker-model te maken. In de modelconfiguratie configureren we TENSOR_PARALLEL_DEGREE=8
, wat betekent dat het model is verdeeld over 8 GPU's. Zie de volgende code:
Nadat u de voorgaande cel in het Jupyter-bestand hebt uitgevoerd, ziet u een uitvoer die lijkt op het volgende:
Een SageMaker-eindpunt maken
U kunt alle instanties met meerdere GPU's gebruiken om te testen. In deze demo gebruiken we een p4d.24xlarge instance. Merk in de volgende code op hoe we de . instellen ModelDataDownloadTimeoutInSeconds
, ContainerStartupHealthCheckTimeoutInSeconds
en VolumeSizeInGB
parameters om de grote modelgrootte te accommoderen. De VolumeSizeInGB
parameter is van toepassing op GPU-instanties die de EBS-volumebijlage ondersteunen.
Ten slotte maken we een SageMaker-eindpunt:
Je ziet het afgedrukt in de volgende code:
Het starten van het eindpunt kan even duren. Je kunt het nog een paar keer proberen als je de tegenkomt InsufficientInstanceCapacity
fout, of u kunt een verzoek indienen bij AWS om de limiet in uw account te verhogen.
Prestatieafstemming
Als je van plan bent om dit bericht en de bijbehorende notebook met een ander model te gebruiken, wil je misschien enkele van de afstembare parameters verkennen die SageMaker, DeepSpeed โโen de DJL bieden. Iteratief experimenteren met deze parameters kan een materiรซle impact hebben op de latentie, doorvoer en kosten van uw gehoste grote model. Raadpleeg voor meer informatie over afstemmingsparameters zoals het aantal werkers, de mate van tensorparallellisme, de grootte van de taakwachtrij en andere DJL-serverconfiguraties en Implementeer grote modellen op Amazon SageMaker met behulp van DJLServering en DeepSpeed โโmodel parallelle inferentie.
Resultaten
In dit bericht hebben we DeepSpeed โโgebruikt om BLOOM-176B en OPT-30B te hosten op SageMaker ML-instanties. De volgende tabel geeft een overzicht van onze prestatieresultaten, inclusief een vergelijking met Hugging Face's Accelerate. Latency geeft het aantal milliseconden weer dat nodig is om vier keer een string van 256 tokens te produceren (batch_size=4
) uit het model. Doorvoer geeft het aantal tokens weer dat per seconde voor elke test wordt geproduceerd. Voor Hugging Face Accelerate gebruikten we de standaard laden van de bibliotheek met GPU-geheugentoewijzing. Voor DeepSpeed โโhebben we het snellere laadmechanisme voor checkpoints gebruikt.
Model | Bibliotheek | Model Precisie | Seriegrootte | Parallelle graad | Aanleg | Tijd om te laden (S) |
Latentie (4 x 256 token-uitvoer) | . | ||
. | . | . | . | . | . | . | P50 (Mevrouw) |
P90 (Mevrouw) |
P99 (Mevrouw) |
Doorvoer (tokens/sec) |
BLOEI-176B | diepe snelheid | INT8 | 4 | 8 | p4d.24xgroot | 74.9 | 27,564 | 27,580 | 32,179 | 37.1 |
BLOEI-176B | Versnellen | INT8 | 4 | 8 | p4d.24xgroot | 669.4 | 92,694 | 92,735 | 103,292 | 11.0 |
OPT-30B | diepe snelheid | FP16 | 4 | 4 | g5.24xgroot | 239.4 | 11,299 | 11,302 | 11,576 | 90.6 |
OPT-30B | Versnellen | FP16 | 4 | 4 | g5.24xgroot | 533.8 | 63,734 | 63,737 | 67,605 | 16.1 |
Vanuit latentieperspectief is DeepSpeed โโongeveer 3.4 keer sneller voor BLOOM-176B en 5.6 keer sneller voor OPT-30B dan Accelerate. De geoptimaliseerde kernels van DeepSpeed โโzijn verantwoordelijk voor een groot deel van dit verschil in latentie. Gezien deze resultaten raden we aan om DeepSpeed โโboven Accelerate te gebruiken als uw model naar keuze wordt ondersteund.
Het is ook vermeldenswaard dat de laadtijden van modellen met DeepSpeed โโveel korter waren, waardoor het een betere optie is als u verwacht dat u snel uw aantal eindpunten moet opschalen. Accelerate's meer flexibele pijplijn parallellisme techniek kan een betere optie zijn als je modellen of model precisies hebt die niet ondersteund worden door DeepSpeed.
Deze resultaten tonen ook het verschil in latentie en doorvoer van verschillende modelgroottes. In onze tests genereert OPT-30B 2.4 keer het aantal tokens per tijdseenheid dan BLOOM-176B op een instantietype dat meer dan drie keer goedkoper is. Op basis van een prijs per doorvoereenheid is OPT-30B op een g5.24xl-instantie 8.9 keer beter dan BLOOM-176B op een p4d.24xl-instantie. Als u strikte latentie-, doorvoer- of kostenbeperkingen hebt, overweeg dan om het kleinst mogelijke model te gebruiken dat nog steeds aan functionele vereisten voldoet.
Opruimen
Als onderdeel van best practices wordt het altijd aanbevolen om inactieve instanties te verwijderen. De onderstaande code laat zien hoe u de instanties verwijdert.
Verwijder optioneel het modelcontrolepunt van uw S3
Conclusie
In dit bericht hebben we laten zien hoe u SageMaker-containers voor grote modelinferenties kunt gebruiken om twee grote taalmodellen te hosten, BLOOM-176B en OPT-30B. We gebruikten de parallelle technieken van DeepSpeed โโmet meerdere GPU's op een enkele SageMaker ML-instantie.
Voor meer details over Amazon SageMaker en de mogelijkheden voor het maken van grote modellen, zie: Amazon SageMaker ondersteunt nu de implementatie van grote modellen via configureerbare volumegrootte en time-outquota en Real-time gevolgtrekking.
Over de auteurs
Simon Zamarin is een AI / ML Solutions Architect die zich voornamelijk richt op het helpen van klanten om waarde uit hun data-assets te halen. In zijn vrije tijd brengt Simon graag tijd door met familie, leest hij sci-fi en werkt hij aan verschillende doe-het-zelfprojecten.
Rupinder Grewal is een Sr Ai/ML Specialist Solutions Architect bij AWS. Hij richt zich momenteel op het bedienen van modellen en MLOps op SageMaker. Voorafgaand aan deze functie heeft hij gewerkt als Machine Learning Engineer voor het bouwen en hosten van modellen. Naast zijn werk speelt hij graag tennis en fietst hij graag op bergpaden.
Frank Liu is een Software Engineer voor AWS Deep Learning. Hij richt zich op het bouwen van innovatieve deep learning-tools voor software-ingenieurs en wetenschappers. In zijn vrije tijd trekt hij graag met vrienden en familie.
Alan Tan is een Senior Product Manager bij SageMaker die leiding geeft aan de inferentie van grote modellen. Hij is gepassioneerd over het toepassen van Machine Learning op het gebied van Analytics. Buiten het werk geniet hij van het buitenleven.
Dhawal Patel is een Principal Machine Learning Architect bij AWS. Hij heeft gewerkt met organisaties variรซrend van grote ondernemingen tot middelgrote startups aan problemen met betrekking tot gedistribueerde computing en kunstmatige intelligentie. Hij richt zich op Deep learning inclusief NLP en Computer Vision domeinen. Hij helpt klanten bij het bereiken van high-performance modelinferentie op SageMaker.
Qing Lan is een Software Development Engineer bij AWS. Hij heeft aan verschillende uitdagende producten in Amazon gewerkt, waaronder hoogwaardige ML-inferentieoplossingen en een hoogwaardig logsysteem. Het team van Qing lanceerde met succes het eerste miljard-parametermodel in Amazon Advertising met een zeer lage latentie vereist. Qing heeft diepgaande kennis over de optimalisatie van de infrastructuur en de versnelling van Deep Learning.
Qingwei Li is Machine Learning Specialist bij Amazon Web Services. Hij behaalde zijn Ph.D. in Operations Research nadat hij de onderzoeksbeursrekening van zijn adviseur had verbroken en de beloofde Nobelprijs niet kon leveren. Momenteel helpt hij klanten in de financiรซle dienstverlening en de verzekeringssector bij het bouwen van machine learning-oplossingen op AWS. In zijn vrije tijd houdt hij van lezen en lesgeven.
Robert van Dusen is Senior Product Manager bij Amazon SageMaker. Hij leidt deep learning-modeloptimalisatie voor toepassingen zoals grote modelinferentie.
Siddharth Venkatesan is een Software Engineer in AWS Deep Learning. Hij richt zich momenteel op het bouwen van oplossingen voor grote modelinferentie. Voordat hij bij AWS kwam, werkte hij in de Amazon Grocery-organisatie aan het ontwikkelen van nieuwe betalingsfuncties voor klanten over de hele wereld. Buiten zijn werk houdt hij van skiรซn, het buitenleven en sport kijken.
- Gevorderd (300)
- AI
- ai kunst
- ai kunst generator
- je hebt een robot
- Amazon Sage Maker
- kunstmatige intelligentie
- certificering van kunstmatige intelligentie
- kunstmatige intelligentie in het bankwezen
- kunstmatige intelligentie robot
- kunstmatige intelligentie robots
- kunstmatige intelligentiesoftware
- AWS-machine learning
- blockchain
- blockchain conferentie ai
- vindingrijk
- conversatie kunstmatige intelligentie
- crypto conferentie ai
- van dall
- diepgaand leren
- google ai
- machine learning
- Plato
- plato ai
- Plato gegevensintelligentie
- Plato-spel
- PlatoData
- platogamen
- schaal ai
- syntaxis
- zephyrnet