Zephyrnet-logo

Bereik hoge prestaties met de laagste kosten voor generatieve AI-inferentie met behulp van AWS Inferentia2 en AWS Trainium op Amazon SageMaker

Datum:

De wereld van kunstmatige intelligentie (AI) en machine learning (ML) is getuige geweest van een paradigmaverschuiving met de opkomst van generatieve AI-modellen die mensachtige tekst, afbeeldingen, code en audio kunnen creëren. In vergelijking met klassieke ML-modellen zijn generatieve AI-modellen aanzienlijk groter en complexer. Hun toenemende complexiteit brengt echter ook hoge kosten voor inferentie met zich mee en een groeiende behoefte aan krachtige rekenbronnen. De hoge inferentiekosten voor generatieve AI-modellen kunnen een toetredingsdrempel vormen voor bedrijven en onderzoekers met beperkte middelen, waardoor er behoefte is aan efficiëntere en kosteneffectievere oplossingen. Bovendien hebben de meeste generatieve AI-use-cases betrekking op menselijke interactie of real-world scenario's, waardoor hardware nodig is die prestaties met lage latentie kan leveren. AWS innoveert met speciaal gebouwde chips om tegemoet te komen aan de groeiende behoefte aan krachtige, efficiënte en kosteneffectieve rekenhardware.

Vandaag zijn we verheugd om dat aan te kondigen Amazon Sage Maker ondersteunt AWS Inferentie2 (ml.inf2) en AWS Trainium (ml.trn1) gebaseerde SageMaker-instanties om generatieve AI-modellen te hosten voor real-time en asynchrone inferentie. ml.inf2-instanties zijn beschikbaar voor modelimplementatie op SageMaker in Oost-VS (Ohio) en ml.trn1-instanties in Oost-VS (N. Virginia).

U kunt deze instanties op SageMaker gebruiken om tegen lage kosten hoge prestaties te bereiken voor generatieve AI-modellen, waaronder grote taalmodellen (LLM's), stabiele diffusie en beeldtransformatoren. Bovendien kunt u gebruiken Amazon SageMaker Inferentie-aanbeveler om u te helpen bij het uitvoeren van belastingstests en het evalueren van de prijs-prestatievoordelen van het implementeren van uw model op deze instanties.

U kunt ml.inf2- en ml.trn1-instanties gebruiken om uw ML-toepassingen op SageMaker uit te voeren voor tekstsamenvatting, codegeneratie, video- en beeldgeneratie, spraakherkenning, personalisatie, fraudedetectie en meer. U kunt eenvoudig aan de slag gaan door ml.trn1- of ml.inf2-instanties op te geven bij het configureren van uw SageMaker-eindpunt. U kunt ml.trn1- en ml.inf2-compatibele AWS Deep Learning Containers (DLC's) voor PyTorch, TensorFlow, Hugging Face en large model inference (LMI) gebruiken om eenvoudig aan de slag te gaan. Zie voor de volledige lijst met versies Beschikbare Deep Learning Containers-afbeeldingen.

In dit bericht laten we het proces zien van het implementeren van een groot taalmodel op AWS Inferentia2 met behulp van SageMaker, zonder extra codering, door gebruik te maken van de LMI-container. Wij gebruiken de GPT4ALL-J, een verfijnd GPT-J 7B-model dat interactie in chatbotstijl biedt.

Overzicht van ml.trn1- en ml.inf2-instanties

ml.trn1-instanties worden mogelijk gemaakt door de Trainium-versneller, die speciaal is gebouwd voor krachtige deep learning-training van generatieve AI-modellen, waaronder LLM's. Deze instances ondersteunen echter ook inferentieworkloads voor modellen die nog groter zijn dan wat in Inf2 past. De grootste instantiegrootte, trn1.32xlarge instanties, heeft 16 Trainium-versnellers met 512 GB acceleratorgeheugen in een enkele instantie die tot 3.4 petaflops aan FP16/BF16-rekenkracht levert. 16 Trainium-versnellers zijn verbonden met ultrasnelle NeuronLinkv2 voor gestroomlijnde collectieve communicatie.

ml.Inf2-instanties worden mogelijk gemaakt door de AWS Inferentia2-versneller, een speciaal gebouwde versneller voor inferentie. Het levert drie keer hogere rekenprestaties, tot vier keer hogere doorvoer en tot 10 keer lagere latentie in vergelijking met AWS Inferentia van de eerste generatie. De grootste instantiegrootte, Inf2.48xlarge, beschikt over 12 AWS Inferentia2-accelerators met 384 GB acceleratorgeheugen in één instantie voor een gecombineerd rekenvermogen van 2.3 petaflops voor BF16/FP16. Hiermee kunt u in één instantie een model met maximaal 175 miljard parameters implementeren. Inf2 is de enige voor inferentie geoptimaliseerde instantie die deze interconnect aanbiedt, een functie die alleen beschikbaar is in duurdere trainingsinstanties. Voor ultragrote modellen die niet in een enkele versneller passen, stromen gegevens rechtstreeks tussen versnellers met NeuronLink, waarbij de CPU volledig wordt omzeild. Met NeuronLink ondersteunt Inf2 snellere gedistribueerde inferentie en verbetert het de doorvoer en latentie.

Zowel AWS Inferentia2- als Trainium-versnellers hebben er twee NeuronCores-v2, 32 GB HBM-geheugenstacks en speciale collectieve rekenengines, die automatisch de runtime optimaliseren door berekening en communicatie te overlappen bij inferentie met meerdere versnellers. Voor meer details over de architectuur, zie Trainium- en Inferentia-apparaten.

Het volgende diagram toont een voorbeeldarchitectuur met AWS Inferentia2.

AWS Neuron-SDK

AWS-neuron is de SDK die wordt gebruikt om deep learning-workloads uit te voeren op op AWS Inferentia en Trainium gebaseerde instanties. AWS Neuron bevat een deep learning-compiler, runtime en tools die standaard zijn geïntegreerd in TensorFlow en PyTorch. Met Neuron kunt u krachtige ML-workloads ontwikkelen, profileren en implementeren op ml.trn1 en ml.inf2.

De Neuron-compiler accepteert ML-modellen in verschillende formaten (TensorFlow, PyTorch, XLA HLO) en optimaliseert ze voor gebruik op Neuron-apparaten. De Neuron-compiler wordt aangeroepen binnen het ML-framework, waar ML-modellen naar de compiler worden gestuurd door de Neuron-framework-plug-in. Het resulterende compilerartefact wordt een NEFF-bestand (Neuron Executable File Format) genoemd dat op zijn beurt wordt geladen door de Neuron-runtime naar het Neuron-apparaat.

De Neuron-looptijd bestaat uit kerneldriver en C/C++-bibliotheken, die API's bieden voor toegang tot AWS Inferentia- en Trainium Neuron-apparaten. De Neuron ML-frameworks-plug-ins voor TensorFlow en PyTorch gebruiken de Neuron-runtime om modellen op de NeuronCores te laden en uit te voeren. De Neuron-runtime laadt gecompileerde deep learning-modellen (NEFF) naar de Neuron-apparaten en is geoptimaliseerd voor hoge doorvoer en lage latentie.

Host NLP-modellen met behulp van SageMaker ml.inf2-instanties

Voordat we diep ingaan op het bedienen van LLM's met transformatoren-neuronx, wat een open-sourcebibliotheek is om de grote gewichtsmatrices van het model op meerdere NeuronCores te verdelen, laten we kort de typische implementatiestroom doornemen voor een model dat op de enkele NeuronCore past.

Controleer de lijst met ondersteunde modellen om ervoor te zorgen dat het model wordt ondersteund op AWS Inferentia2. Vervolgens moet het model vooraf worden gecompileerd door de Neuron Compiler. U kunt een SageMaker-notebook of een Amazon Elastic Compute-cloud (Amazon EC2) instantie om het model te compileren. U kunt de SageMaker Python SDK gebruiken om modellen te implementeren met behulp van populaire deep learning-frameworks zoals PyTorch, zoals weergegeven in de volgende code. U kunt uw model implementeren op SageMaker-hostingservices en een eindpunt krijgen dat kan worden gebruikt voor gevolgtrekkingen. Deze eindpunten worden volledig beheerd en ondersteunen automatisch schalen.

from sagemaker.pytorch.model import PyTorchModel pytorch_model = PyTorchModel( model_data=s3_model_uri, role=role, source_dir="code", entry_point="inference.py", image_uri=ecr_image
) predictor = pytorch_model.deploy( initial_instance_count=1, instance_type="ml.inf2.xlarge"
)

Verwijzen naar Ontwikkelaars stromen voor meer informatie over typische ontwikkelingsstromen van Inf2 op SageMaker met voorbeeldscripts.

Host LLM's met behulp van SageMaker ml.inf2-instanties

Grote taalmodellen met miljarden parameters zijn vaak te groot om op één enkele versneller te passen. Dit vereist het gebruik van modelparallelle technieken voor het hosten van LLM's over meerdere versnellers. Een andere cruciale vereiste voor het hosten van LLM's is de implementatie van een krachtige model-serving-oplossing. Deze oplossing moet het model efficiënt laden, partitionering beheren en naadloos verzoeken verwerken via HTTP-eindpunten.

SageMaker bevat gespecialiseerde deep learning-containers (DLC's), bibliotheken en tooling voor modelparallelisme en grote modelinferentie. Raadpleeg voor bronnen om aan de slag te gaan met LMI op SageMaker Modelparallelisme en grote modelinferentie. SageMaker onderhoudt DLC's met populaire open-sourcebibliotheken voor het hosten van grote modellen zoals GPT, T5, OPT, BLOOM en Stable Diffusion op AWS-infrastructuur. Deze gespecialiseerde DLC's worden SageMaker LMI-containers genoemd.

SageMaker LMI-containers gebruik DJLServing, een modelserver die is geïntegreerd met de transformers-neuronx-bibliotheek om tensorparallelisme over NeuronCores te ondersteunen. Voor meer informatie over hoe DJLServing werkt, zie Implementeer grote modellen op Amazon SageMaker met behulp van DJLServering en DeepSpeed ​​model parallelle inferentie. De DJL-modelserver en transformers-neuronx-bibliotheek dienen als kerncomponenten van de container, die ook de Neuron SDK bevat. Deze opstelling vergemakkelijkt het laden van modellen op AWS Inferentia2-versnellers, parallelliseert het model over meerdere NeuronCores en maakt bediening via HTTP-eindpunten mogelijk.

De LMI-container ondersteunt laadmodellen van een Amazon eenvoudige opslagservice (Amazon S3) emmer of Hugging Face Hub. Het standaardhandlerscript laadt het model, compileert en converteert het naar een voor Neuron geoptimaliseerd formaat en laadt het. Om de LMI-container te gebruiken om LLM's te hosten, hebben we twee opties:

  • Een no-code (voorkeur) – Dit is de gemakkelijkste manier om een ​​LLM te implementeren met behulp van een LMI-container. Bij deze methode kunt u de meegeleverde gebruiken standaard handler en geef gewoon de modelnaam en de vereiste parameters door serving.properties bestand om het model te laden en te hosten. Om de standaard handler te gebruiken, bieden we de entryPoint parameter als djl_python.transformers-neuronx.
  • Neem je eigen schrift mee – In deze benadering heeft u de mogelijkheid om uw eigen model.py-bestand te maken, dat de code bevat die nodig is voor het laden en bedienen van het model. Dit bestand fungeert als tussenpersoon tussen de DJLServing API's en de transformers-neuronx API's. Om het laadproces van het model aan te passen, kunt u opgeven serving.properties met configureerbare parameters. Raadpleeg voor een uitgebreide lijst met beschikbare configureerbare parameters Alle DJL-configuratieopties. Hier is een voorbeeld van een model.py bestand.

Runtime-architectuur

De tensor_parallel_degree eigenschapswaarde bepaalt de verdeling van tensor-parallelle modules over meerdere NeuronCores. Inf2.24xlarge heeft bijvoorbeeld zes AWS Inferentia2-versnellers. Elke AWS Inferentia2-versneller heeft twee NeuronCores. Elke NeuronCore heeft een speciaal geheugen met hoge bandbreedte (HBM) van 16 GB voor het opslaan van tensor-parallelle modules. Met een tensor-parallelgraad van 4 zal de LMI drie modelkopieën van hetzelfde model toewijzen, elk gebruikmakend van vier NeuronCores. Zoals te zien is in het volgende diagram, wordt het model bij het starten van de LMI-container eerst geladen en getraceerd in het CPU-adresseerbare geheugen. Wanneer het traceren is voltooid, wordt het model verdeeld over de NeuronCores op basis van de tensorparallelle graad.

LMI gebruikt DJLServing als modelservingstack. Nadat de statuscontrole van de container in SageMaker is geslaagd, is de container klaar om het gevolgtrekkingsverzoek te verwerken. DJLServing lanceert meerdere Python-processen gelijk aan de TOTAL NUMBER OF NEURON CORES/TENSOR_PARALLEL_DEGREE. Elk Python-proces bevat threads in C++ gelijk aan TENSOR_PARALLEL_DEGREE. Elke C++-threads bevat één scherf van het model op één NeuronCore.

Veel beoefenaars (Python-proces) hebben de neiging om inferentie opeenvolgend uit te voeren wanneer de server wordt aangeroepen met meerdere onafhankelijke verzoeken. Hoewel het eenvoudiger is om in te stellen, is het meestal niet de beste manier om de rekenkracht van de accelerator te gebruiken. Om dit aan te pakken, biedt DJLServing de ingebouwde optimalisaties van dynamische batching om deze onafhankelijke inferentieverzoeken aan de serverzijde te combineren om dynamisch een grotere batch te vormen om de doorvoer te verhogen. Alle verzoeken bereiken eerst de dynamische batcher voordat ze de daadwerkelijke taakwachtrijen binnenkomen om te wachten op gevolgtrekking. U kunt uw gewenste batchgroottes voor dynamische batching instellen met behulp van de batch_size instellingen in serving.properties. U kunt ook configureren: max_batch_delay om de maximale vertragingstijd in de batcher op te geven om te wachten op andere verzoeken om deel te nemen aan de batch op basis van uw latentievereisten. De doorvoer is ook afhankelijk van het aantal modelexemplaren en de Python-procesgroepen die in de container zijn gestart. Zoals weergegeven in het volgende diagram, start de LMI-container, met de tensorparallelle graad ingesteld op 4, drie Python-procesgroepen, die elk de volledige kopie van het model bevatten. Hierdoor kunt u de batchgrootte vergroten en een hogere doorvoer krijgen.

SageMaker-notebook voor het implementeren van LLM's

In deze sectie bieden we een stapsgewijze uitleg van de implementatie van GPT4All-J, een model met 6 miljard parameters dat 24 GB groot is in FP32. GPT4All-J is een populaire chatbot die is getraind op een grote verscheidenheid aan interactie-inhoud, zoals woordproblemen, dialogen, code, gedichten, liedjes en verhalen. GPT4all-J is een verfijnd GPT-J-model dat reacties genereert die vergelijkbaar zijn met menselijke interacties.

Het complete notitieboek voor dit voorbeeld wordt geleverd op GitHub. We kunnen de SageMaker Python SDK gebruiken om het model in een Inf2-instantie te implementeren. We gebruiken de verstrekte standaard handler om het model te laden. Hiermee hoeven we alleen maar een porties.eigenschappen bestand. Dit bestand bevat de vereiste configuraties voor de DJL-modelserver om het model te downloaden en te hosten. We kunnen de naam van het Hugging Face-model specificeren met behulp van de model_id parameter om het model rechtstreeks uit de Hugging Face-repo te downloaden. U kunt het model ook downloaden van Amazon S3 door de s3url parameter. De entryPoint parameter is geconfigureerd om naar de bibliotheek te wijzen om het model te laden. Voor meer informatie over djl_python.fastertransformer, verwijs naar de GitHub-code.

De tensor_parallel_degree eigenschapswaarde bepaalt de verdeling van tensor-parallelle modules over meerdere apparaten. Bijvoorbeeld, met 12 NeuronCores en een tensorparallelle graad van 4, zal LMI drie modelkopieën toewijzen, die elk vier NeuronCores gebruiken. U kunt het precisietype ook definiëren met behulp van de eigenschap dtype. n_position parameter definieert de som van de maximale invoer- en uitvoerreekslengte voor het model. Zie de volgende code:

%%writefile serving.properties# Start writing content here
engine=Python
option.entryPoint=djl_python.transformers-neuronx
#option.model_id=nomic-ai/gpt4all-j
option.s3url = {{s3url}}
option.tensor_parallel_degree=2
option.model_loading_timeout=2400
option.n_positions=512

Construeer de tarball bevattende serving.properties en upload het naar een S3-bucket. Hoewel in dit voorbeeld de standaardhandler wordt gebruikt, kunt u een model.py bestand voor het aanpassen van het laad- en weergaveproces. Als er pakketten zijn die moeten worden geïnstalleerd, neem deze dan op in het requirements.txt bestand. Zie de volgende code:

%%sh
mkdir mymodel
mv serving.properties mymodel/
tar czvf mymodel.tar.gz mymodel/
rm -rf mymodel s3_code_prefix = "large-model-lmi/code"
bucket = sess.default_bucket() # bucket to house artifacts
code_artifact = sess.upload_data("mymodel.tar.gz", bucket, s3_code_prefix)print(f"S3 Code or Model tar ball uploaded to --- > {code_artifact}")

Haal de DJL-containerafbeelding op en maak het SageMaker-model:

##Retrieve djl container image
image_uri = image_uris.retrieve( framework="djl-deepspeed", region=sess.boto_session.region_name, version="0.21.0" )
image_uri = image_uri.split(":")[0] + ":" + "0.22.1-neuronx-sdk2.9.0" model = Model(image_uri=image_uri, model_data=code_artifact, env=env, role=role)

Vervolgens maken we het SageMaker-eindpunt met de eerder gedefinieerde modelconfiguratie. De container downloadt het model naar het /tmp ruimte omdat SageMaker de /tmp naar Amazon elastische blokwinkel (Amazone-EBS). We moeten een toevoegen volume_size parameter om ervoor te zorgen dat de /tmp directory heeft voldoende ruimte om het model te downloaden en te compileren. Wij zetten container_startup_health_check_timeout tot 3,600 seconden om ervoor te zorgen dat de statuscontrole begint nadat het model klaar is. We gebruiken de instantie ml.inf2.8xlarge. Zie de volgende code:

instance_type = "ml.inf2.8xlarge"
endpoint_name = sagemaker.utils.name_from_base("lmi-model") model.deploy(initial_instance_count=1, instance_type=instance_type, endpoint_name=endpoint_name, container_startup_health_check_timeout=3600, volume_size=256 )

Nadat het SageMaker-eindpunt is gemaakt, kunnen we real-time voorspellingen doen tegen SageMaker-eindpunten met behulp van de Predictor voorwerp:

# our requests and responses will be in json format so we specify the serializer and the deserializer
predictor = sagemaker.Predictor( endpoint_name=endpoint_name, sagemaker_session=sess, serializer=serializers.JSONSerializer(), deserializer=deserializers.JSONDeserializer(),
) predictor.predict( {"inputs": "write a blog on new York", "parameters": {}}
)

Opruimen

Verwijder de eindpunten om kosten te besparen nadat u klaar bent met uw tests:

# - Delete the end point
sess.delete_endpoint(endpoint_name)
sess.delete_endpoint_config(endpoint_name)
model.delete_model()

Conclusie

In dit bericht hebben we de nieuw gelanceerde mogelijkheid van SageMaker laten zien, die nu ml.inf2- en ml.trn1-instanties ondersteunt voor het hosten van generatieve AI-modellen. We hebben gedemonstreerd hoe GPT4ALL-J, een generatief AI-model, op AWS Inferentia2 kan worden geïmplementeerd met behulp van SageMaker en de LMI-container, zonder enige code te schrijven. We hebben ook laten zien hoe u DJLServing en transformers-neuronx om een ​​model te laden, te partitioneren en te serveren.

Inf2-instanties bieden de meest kosteneffectieve manier om generatieve AI-modellen op AWS uit te voeren. Raadpleeg voor meer informatie over prestaties Inf2-prestaties.

Check out de GitHub repo voor een voorbeeld notebook. Probeer het uit en laat het ons weten als je vragen hebt!


Over de auteurs

Vivek Gangasani is Senior Machine Learning Solutions Architect bij Amazon Web Services. Hij werkt samen met Machine Learning Startups om AI/ML-applicaties op AWS te bouwen en te implementeren. Momenteel richt hij zich op het leveren van oplossingen voor MLOps, ML Inference en low-code ML. Hij heeft gewerkt aan projecten in verschillende domeinen, waaronder Natural Language Processing en Computer Vision.

Hiroshi Tokio is een Solutions Architect bij AWS Annapurna Labs. Hij is gevestigd in Japan en kwam al vóór de overname door AWS bij Annapurna Labs en heeft klanten consequent geholpen met Annapurna Labs-technologie. Zijn recente focus ligt op Machine Learning-oplossingen op basis van speciaal gebouwd silicium, AWS Inferentia en Trainium.

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.

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.

Varun Syal is een Software Development Engineer bij AWS Sagemaker die werkt aan kritieke klantgerichte functies voor het ML Inference-platform. Hij is gepassioneerd door het werken in de gedistribueerde systemen en AI-ruimte. In zijn vrije tijd houdt hij van lezen en tuinieren.

spot_img

Laatste intelligentie

spot_img