Optimalizálja következtetési munkáit dinamikus kötegelt következtetéssel a TorchServe segítségével az Amazon SageMakeren

Forrás csomópont: 1884601

A mély tanulásban a kötegelt feldolgozás több input betáplálását jelenti egy modellbe. Bár ez elengedhetetlen a képzés során, nagyon hasznos lehet a költségek kezelése és az átvitel optimalizálása a következtetési idő alatt is. A hardveres gyorsítók párhuzamosságra vannak optimalizálva, és a kötegelés segíti a számítási kapacitás telítését, és gyakran nagyobb átvitelt eredményez.

A kötegelés több forgatókönyvben is hasznos lehet a modell éles üzembe helyezése során. Itt nagyjából két felhasználási esetre osztjuk őket:

  • Valós idejű alkalmazások, ahol több következtetési kérés érkezik különböző ügyfelektől, és dinamikusan kötegelt és betáplálódik a kiszolgáló modellbe. A késleltetés általában fontos ezekben a használati esetekben.
  • Offline alkalmazások, ahol több bemenet vagy kérés kötegelt az ügyféloldalon, és elküldésre kerül a kiszolgáló modellnek. Ezeknél a használati eseteknél gyakran a nagyobb áteresztőképesség a cél, ami segít a költségek kezelésében. Felhasználási példák közé tartozik a videóelemzés és a modellértékelés.

Amazon SageMaker két népszerű lehetőséget kínál a következtetési munkákhoz. A valós idejű alkalmazásokhoz a SageMaker Hosting a TorchServe-et használja háttérkiszolgáló könyvtárként, amely kezeli a fogadott kérések dinamikus kötegelést. Offline alkalmazásokhoz használhat SageMaker kötegelt átalakítási feladatokat. Ebben a bejegyzésben egy-egy példát mutatunk be az egyes lehetőségekre, hogy segítsünk az indulásban.

Mivel a TorchServe natív integrálva a SageMakerrel keresztül SageMaker PyTorch következtetési eszközkészlet, könnyedén telepíthet PyTorch-modellt a TorchServe-re a SageMaker Hosting segítségével. Előfordulhatnak olyan esetek is, amikor tovább kell testreszabnia környezetét egyéni Docker-képek használatával. Ebben a bejegyzésben először bemutatjuk, hogyan telepíthet valós idejű végpontot a natív SageMaker PyTorch következtetési eszközkészlet segítségével, és hogyan konfigurálhatja a kötegméretet az átviteli sebesség optimalizálása érdekében. A második példában bemutatjuk, hogyan lehet egyéni Docker-képet használni olyan speciális TorchServe-konfigurációk konfigurálására, amelyek környezeti változóként nem állnak rendelkezésre a kötegelt következtetési feladat optimalizálásához.

A kötegelt következtetés legjobb gyakorlatai

A kötegelt feldolgozás növelheti az átviteli sebességet és optimalizálhatja az erőforrásokat, mert segít bizonyos időn belül nagyobb számú következtetés végrehajtásában a késleltetés rovására. A nagyobb átviteli sebesség érdekében a modell üzembe helyezésének optimalizálása érdekében az általános irányelv a köteg méretének növelése, amíg az átviteli sebesség csökken. Ez leggyakrabban olyan offline alkalmazásoknak felel meg, ahol több bemenet kötegelt (például videokockák, képek vagy szöveg) a predikciós kimenetek eléréséhez.

A valós idejű alkalmazásoknál a késleltetés gyakran a fő probléma. Kompromisszum van a nagyobb átviteli sebesség és a megnövekedett kötegméret és késleltetés között; szükség szerint módosítania kell, hogy megfeleljen a várakozási idő SLA-jának. A felhővel kapcsolatos bevált gyakorlatok tekintetében a bizonyos számú következtetésre eső költség hasznos iránymutatást jelent az üzleti igényeinek megfelelő tájékozott döntés meghozatalához. A költségek kezelésében az egyik hozzájáruló tényező a megfelelő gyorsító kiválasztása. További információkért lásd Válassza ki a legjobb AI-gyorsítót és modell-összeállítást a számítógépes látás következtetéséhez az Amazon SageMaker segítségével.

TorchServe dinamikus kötegelés a SageMakeren

TorchServe a natív PyTorch-könyvtár a modellek termelési méretben történő kiszolgálásához. Ez a Facebook és az AWS közös fejlesztése. A TorchServe lehetővé teszi a monitorozást, az egyéni mutatók hozzáadását, a több modell támogatását, a dolgozók számának növelését és csökkentését biztonságos felügyeleti API-kon keresztül, valamint következtetési és magyarázati végpontok biztosítását.

A kötegelt feldolgozás támogatására a TorchServe dinamikus kötegelési funkciót biztosít. Egy meghatározott időkereten belül összesíti a beérkezett kéréseket, kötegeli őket, és elküldi a köteget következtetések levonására. A beérkezett kérelmek feldolgozása a rakodók a TorchServe-ben. A TorchServe számos alapértelmezett kezelővel rendelkezik, és szívesen készíthet egyéni kezelőt, ha az Ön használati esete nem terjed ki. Egyéni kezelő használatakor győződjön meg arról, hogy a kötegelt következtetési logika implementálva van a kezelőben. Példa kötegelt következtetés támogatással rendelkező egyéni kezelőre itt érhető el GitHub.

A dinamikus kötegelést két beállítással konfigurálhatja, batch_size és a max_batch_delay, akár a SageMaker környezeti változóin keresztül, akár a config.properties fájlt a TorchServe-ben (ha egyéni tárolót használ). A TorchServe az előbbi beállítások bármelyikét használja, vagy a maximális kötegméretet (batch_size). max_batch_delay.

A TorchServe és a SageMaker integrációjával immár natívan telepítheti a PyTorch modelleket a SageMaker rendszeren, ahol meghatározhat egy SageMaker PyTorch modellt. Egyéni modellbetöltési, következtetési, valamint elő- és utófeldolgozási logikát adhat hozzá a SageMaker PyTorch belépési pontjaként átadott szkripthez (lásd a következő példakódot). Alternatív megoldásként egyéni tárolót is használhat a modellek üzembe helyezéséhez. További információkért lásd A SageMaker PyTorch Model Server.

A PyTorch-modellek kötegméretét a SageMaker-en környezeti változókon keresztül állíthatja be. Ha úgy dönt, hogy egyéni tárolót használ, csomagolhatja beállítások in config.properties modelljével, amikor a modelljét a TorchServe-be csomagolja. A következő kódrészlet példát mutat be a köteg méretének környezeti változók használatával történő beállítására, és a PyTorch modell telepítésére a SageMaker rendszerben:

from SageMaker.pytorch.model import PyTorchModel env_variables_dict = { "SAGEMAKER_TS_BATCH_SIZE": "3", "SAGEMAKER_TS_MAX_BATCH_DELAY": "100000"
} pytorch_model = PyTorchModel( model_data=model_artifact, role=role, source_dir="code", framework_version='1.9', entry_point="inference.py", env=env_variables_dict
) predictor = pytorch_model.deploy(initial_instance_count=1, instance_type="ml.c5.2xlarge", serializer=SageMaker.serializers.JSONSerializer(), deserializer=SageMaker.deserializers.BytesDeserializer())

A kódrészletben model_artifact a betanított modell visszatöltéséhez szükséges összes fájlra vonatkozik, amely egy .tar fájlban archiválva és egy Amazon egyszerű tárolási szolgáltatás (Amazon S3) vödör. Az inference.py hasonló a TorchServe egyéni kezelőhöz; Számos funkciója van, amelyeket felülbírálhat, hogy alkalmazkodjon a modell inicializálásához, a kapott kérések elő- és utófeldolgozásához, valamint a következtetési logikához.

A következő jegyzetfüzet bemutat egy teljes példát a Hugging Face BERT modell telepítésére.

Ha egyéni tárolóra van szüksége, létrehozhat egy egyéni tárolóképet, és elküldheti a Amazon Elastic Container Registry (Amazon ECR) adattár. A modellműtermék ebben az esetben egy TorchServe .mar fájl lehet, amely a modell melléktermékeit a kezelővel együtt csomagolja. Ezt a következő részben mutatjuk be, ahol egy SageMaker kötegelt transzformációs feladatot használunk.

SageMaker kötegelt átalakítási feladat

Az offline felhasználási esetekre, amikor a kéréseket egy adatforrásból, például egy adatkészletből kötegeli a rendszer, a SageMaker biztosítja kötegelt átalakítási feladatok. Ezek a jobok lehetővé teszik, hogy adatokat olvasson egy S3 tárolóból, és írja be az eredményeket egy cél S3 tárolóba. További információkért lásd Használja a Batch Transform-ot, hogy következtetéseket vonjon le nagy adatkészletekből. A kötegelt átalakítási feladatokat használó kötegelt következtetés teljes példája az alábbiakban található jegyzetfüzet, ahol a FLORES verseny gépi fordítási modelljét használjuk. Ebben a példában bemutatjuk, hogyan lehet egyéni tárolót használni modellünk pontozására a SageMaker segítségével. Egyéni következtetési tároló használatával tovább szabhatja a TorchServe konfigurációját. Ebben a példában szeretnénk megváltoztatni és letiltani a JSON dekódolást, amit a TorchServe segítségével tehetünk meg. config.properties fájlt.

Amikor egyéni kezelőt használunk a TorchServe számára, meg kell győződnünk arról, hogy a kezelő megvalósítja a kötegelt következtetési logikát. Mindegyik kezelő rendelkezhet egyéni funkciókkal az előfeldolgozás, a következtetés és az utófeldolgozás végrehajtásához. Példa kötegelt következtetés támogatással rendelkező egyéni kezelőre itt érhető el GitHub.

Egyéni tárolónkat használjuk a modellműtermékek kötegelésére a kezelővel, ahogy a TorchServe-ben (.mar fájl készítése). Szükségünk van egy belépési pontra is a Docker-tárolóhoz, amely elindítja a TorchServe-t a beállított kötegmérettel és JSON-dekódolással. config.properties. Ezt mutatjuk be a példában jegyzetfüzet.

A SageMaker kötegelt átalakítási feladathoz hozzá kell férni a bemeneti fájlokhoz egy S3 tárolóból, ahol a bemeneti fájlokat mini kötegekre osztja, és elküldi következtetésre. A kötegelt átalakítási feladat konfigurálásakor vegye figyelembe a következő pontokat:

  • Helyezze a bemeneti fájlokat (például egy adatkészletet) egy S3 tárolóba, és állítsa be adatforrásként a munkabeállításokban.
  • Rendeljen hozzá egy S3 tárolót, amelybe menteni szeretné a kötegelt átalakítási feladat eredményeit.
  • Készlet BatchStrategy nak nek MultiRecord és a SplitType nak nek Line ha a kötegelt átalakítási feladatra van szüksége mini kötegek készítéséhez a bemeneti fájlból. Ha nem tudja automatikusan felosztani az adatkészletet mini kötegekre, akkor feloszthatja mini kötegekre úgy, hogy minden köteget külön bemeneti fájlba helyez, amelyet az adatforrás S3 tárolójában helyez el.
  • Győződjön meg arról, hogy a köteg mérete belefér a memóriába. A SageMaker ezt általában automatikusan kezeli; a kötegek kézi felosztásánál azonban ezt a memória alapján kell hangolni.

A következő kód egy kötegelt átalakítási feladat példája:

s3_bucket_name= 'SageMaker-us-west-2-XXXXXXXX'
batch_input = f"s3://{s3_bucket_name}/folder/jobename_TorchServe_SageMaker/"
batch_output = f"s3://{s3_bucket_name}/folder/jobname_TorchServe_SageMaker_output/" batch_job_name = 'job-batch' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())
batch_job_name request = { "ModelClientConfig": { "InvocationsTimeoutInSeconds": 3600, "InvocationsMaxRetries": 1, }, "TransformJobName": batch_job_name, "ModelName": model_name, "MaxConcurrentTransforms":1, "BatchStrategy": "MultiRecord", "TransformOutput": {"S3OutputPath": batch_output, "AssembleWith": "Line", "Accept": "application/json"}, "TransformInput": { "DataSource": { "S3DataSource": {"S3DataType": "S3Prefix", "S3Uri": batch_input} }, "SplitType" : "Line", "ContentType": "application/json", }, "TransformResources": {"InstanceType": "ml.p2.xlarge", "InstanceCount": 1},
}

Amikor az előző beállításokat használjuk, és elindítjuk az átalakítási feladatunkat, akkor kötegenként beolvassa a bemeneti fájlokat a forrás S3 vödörből, és elküldi következtetésre. Az eredményeket a rendszer visszaírja a kimenetekhez megadott S3 tárolóba.

A következő kódrészlet bemutatja, hogyan lehet munkát létrehozni és elindítani az előző beállításokkal:

sm.create_transform_job(**request) while True: response = sm.describe_transform_job(TransformJobName=batch_job_name) status = response["TransformJobStatus"] if status == "Completed": print("Transform job ended with status: " + status) break if status == "Failed": message = response["FailureReason"] print("Transform failed with the following error: {}".format(message)) raise Exception("Transform job failed") print("Transform job is still in status: " + status) time.sleep(30)

Következtetés

Ebben a bejegyzésben áttekintettük a SageMaker által kínált két módot az online és offline következtetésekhez. Az előbbi a TorchServe-ben biztosított dinamikus kötegelést használja a több klienstől érkező kérések kötegeléséhez. Ez utóbbi egy SageMaker átalakítási feladatot használ a bemeneti fájlokból származó kérések köteggel történő összegyűjtésére egy S3 tárolóban, és lefuttatja a következtetést.

Megmutattuk azt is, hogyan lehet modelleket kiszolgálni a SageMaker-en a natív SageMaker PyTorch következtetési eszközkészlet-tárolóképek használatával, és hogyan lehet egyéni tárolókat használni olyan felhasználási esetekben, amelyek speciális TorchServe konfigurációs beállításokat igényelnek.

Ahogy a TorchServe folyamatosan fejlődik, hogy megfeleljen a PyTorch közösség igényeinek, új funkciókat integráltak a SageMakerbe, hogy hatékony módszereket biztosítsanak a modellek éles kiszolgálására. További információkért tekintse meg a TorchServe GitHub repo és a SageMaker példák.


A szerzőkről

Phi Nguyen az AWS megoldástervezője, aki segíti az ügyfeleket felhőalapú utazásukban, különös tekintettel a Data Lake-re, az elemzésekre, a szemantikai technológiákra és a gépi tanulásra. Szabadidejében találkozhat vele, hogy munkába kerékpározzon, fia focicsapatát edzi, vagy a természetben sétáljon a családjával.

Nikhil Kulkarni az AWS Machine Learning szoftverfejlesztője, aki arra összpontosít, hogy a gépi tanulási munkaterheléseket hatékonyabbá tegye a felhőben, és társalkotója az AWS Deep Learning Containers képzési és következtetési célú tárolóinak. Szenvedélyesen rajong az elosztott Deep Learning Systemsért. A munkán kívül szívesen olvas könyveket, gitároz és pizzát készít.

Hamid Shojanazeri a Pytorch partnermérnöke, aki az OSS nagy teljesítményű modellek optimalizálásával és kiszolgálásával foglalkozik. Hamid a számítógépes látás területén szerzett Ph.D fokozatot, kutatóként dolgozott multimédiás laborokban Ausztráliában, Malajziában, az NLP-n pedig az Opus.ai-t vezette. Szeret egyszerűbb megoldásokat találni nehéz problémákra, szabadidejében művészetkedvelő.

Geeta Chauhan vezeti a Meta AI AI Partner Engineering részlegét, és szakértelemmel rendelkezik a rugalmas, törékeny, nagy léptékű elosztott platformok építésében kezdő vállalkozások és Fortune 500 számára. Csapata stratégiai partnerekkel, az iparág gépi tanulási vezetőivel és az összes jelentős felhőszolgáltatóval dolgozik új mesterséges intelligencia-termék-szolgáltatások és -tapasztalatok kidolgozásában és bevezetésében; és a PyTorch-modelleket a kutatástól a gyártásig. A Women in IT – Szilícium-völgy – A 2019-es év műszaki igazgatója díj nyertese, az ACM kiváló előadója és gondolatvezetője a mesterséges intelligencia etikája, a mélytanulás, a blokklánc és az IoT témakörében. Szenvedélyesen támogatja az AI for Good használatát.

Forrás: https://aws.amazon.com/blogs/machine-learning/optimize-your-inference-jobs-using-dynamic-batch-inference-with-torchserve-on-amazon-sagemaker/

Időbélyeg:

Még több AWS gépi tanulási blog