Optimoi päättelytyösi käyttämällä dynaamista eräpäätelmää TorchServen avulla Amazon SageMakerissa

Lähdesolmu: 1884601

Syväoppimisessa eräkäsittely tarkoittaa useiden syötteiden syöttämistä malliin. Vaikka se on välttämätöntä koulutuksen aikana, se voi olla erittäin hyödyllistä hallita kustannuksia ja optimoida läpimenoa myös päättelyn aikana. Laitteistokiihdyttimet on optimoitu rinnakkaisuudelle, ja eräajo auttaa kyllästämään laskentakapasiteettia ja johtaa usein suurempaan suorituskykyyn.

Eräsarjasta voi olla apua useissa skenaarioissa mallin käyttöönoton aikana tuotannossa. Tässä luokittelemme ne laajasti kahteen käyttötapaukseen:

  • Reaaliaikaiset sovellukset, joissa useita päättelypyyntöjä vastaanotetaan eri asiakkailta ja ne jaksotetaan dynaamisesti ja syötetään palvelumalliin. Latenssi on yleensä tärkeä näissä käyttötapauksissa.
  • Offline-sovellukset, joissa useita syötteitä tai pyyntöjä kootaan asiakaspuolella ja lähetetään käyttömalliin. Tällaisten käyttötapausten tavoitteena on usein suurempi suoritusteho, mikä auttaa hallitsemaan kustannuksia. Esimerkkejä käyttötapauksista ovat videoanalyysi ja mallin arviointi.

Amazon Sage Maker tarjoaa kaksi suosittua vaihtoehtoa päättelytöillesi. Reaaliaikaisissa sovelluksissa SageMaker Hosting käyttää TorchServeä taustapalvelukirjastona, joka käsittelee vastaanotettujen pyyntöjen dynaamisen erän. Offline-sovelluksissa voit käyttää SageMakerin erämuunnostöitä. Tässä viestissä käymme läpi esimerkin kustakin vaihtoehdosta, jotta pääset alkuun.

Koska TorchServe on natiivi integroitu SageMakeriin kautta SageMaker PyTorch päättelytyökalupakki, voit helposti ottaa PyTorch-mallin käyttöön TorchServessä SageMaker Hostingin avulla. Saattaa myös olla aikoja, jolloin sinun on mukautettava ympäristöäsi edelleen mukautettujen Docker-kuvien avulla. Tässä viestissä näytämme ensin, kuinka reaaliaikainen päätepiste otetaan käyttöön käyttämällä alkuperäistä SageMaker PyTorch -päätelmätyökalupakkia ja määritetään eräkoko suorituskyvyn optimoimiseksi. Toisessa esimerkissä osoitamme, kuinka mukautetun Docker-kuvan avulla määritetään edistyneitä TorchServe-kokoonpanoja, jotka eivät ole käytettävissä ympäristömuuttujana eräpäätelmätyön optimoimiseksi.

Eräpäätelmien parhaat käytännöt

Eräkäsittely voi lisätä suorituskykyä ja optimoida resursseja, koska se auttaa suorittamaan suuremman määrän päätelmiä tietyssä ajassa latenssin kustannuksella. Mallin käyttöönoton optimoimiseksi suuremman suorituskyvyn saavuttamiseksi yleinen ohje on suurentaa eräkokoa, kunnes suorituskyky pienenee. Tämä sopii useimmiten offline-sovelluksiin, joissa useita syötteitä (kuten videokehykset, kuvat tai teksti) syötetään ennustetulosteiden saamiseksi.

Reaaliaikaisissa sovelluksissa latenssi on usein tärkein huolenaihe. On olemassa kompromissi suuremman suorituskyvyn ja suuremman eräkoon ja latenssin välillä; saatat joutua säätämään tarpeen mukaan täyttääksesi viiveen SLA:n. Mitä tulee pilveen liittyviin parhaisiin käytäntöihin, hinta per tietty määrä päätelmiä on hyödyllinen ohje yrityksesi tarpeita vastaavan tietoisen päätöksen tekemisessä. Yksi vaikuttava tekijä kustannusten hallinnassa on oikean kiihdytin valinta. Katso lisätietoja Valitse Amazon AI: n avulla paras AI -kiihdytin ja mallikokoonpano tietokoneen näkökyvyn päättämiseen.

TorchServe dynaaminen eräkäsittely SageMakerissa

SoihtuPalvelu on alkuperäinen PyTorch-kirjasto mallien palvelemiseen tuotannossa mittakaavassa. Se on Facebookin ja AWS:n yhteinen kehitys. TorchServen avulla voit seurata, lisätä mukautettuja mittareita, tukea useita malleja, skaalata ylös ja alas työntekijöiden määrää suojattujen hallintasovellusliittymien avulla ja tarjota päätelmiä ja selityksiä.

Eräkäsittelyn tukemiseksi TorchServe tarjoaa dynaamisen eräkäsittelyominaisuuden. Se kokoaa vastaanotetut pyynnöt tietyn ajanjakson sisällä, koota ne yhteen ja lähettää erän päätelmiä varten. Vastaanotetut pyynnöt käsitellään käsittelijät TorchServessä. TorchServessä on useita oletuskäsittelijöitä, ja voit luoda mukautetun käsittelijän, jos käyttötapaustasi ei käsitellä. Kun käytät mukautettua käsittelijää, varmista, että eräpäättelylogiikka on toteutettu käsittelijässä. Esimerkki mukautetusta käsittelijästä eräpäättelytuella on saatavilla osoitteessa GitHub.

Voit määrittää dynaamisen erän kahdella asetuksella, batch_size ja max_batch_delay, joko ympäristömuuttujien kautta SageMakerissa tai kautta config.properties tiedosto TorchServessä (jos käytät mukautettua säilöä). TorchServe käyttää mitä tahansa asetusta, joka tulee ensin, joko enimmäiserän kokoa (batch_size). max_batch_delay.

TorchServe-integraatioiden avulla SageMakerin kanssa voit nyt ottaa PyTorch-malleja natiivisti käyttöön SageMakerissa, jossa voit määrittää SageMaker PyTorch -mallin. Voit lisätä mukautetun mallin lataus-, päättely- ja esikäsittely- ja jälkikäsittelylogiikkaa komentosarjaan, joka välitetään aloituspisteenä SageMaker PyTorchiin (katso seuraava esimerkkikoodi). Vaihtoehtoisesti voit käyttää mukautettua säilöä malliesi käyttöönottoon. Katso lisätietoja SageMaker PyTorch -mallipalvelin.

Voit määrittää PyTorch-mallien eräkoon SageMakerissa ympäristömuuttujien kautta. Jos päätät käyttää mukautettua säilöä, voit niputtaa settings in config.properties mallisi kanssa, kun pakkaat mallisi TorchServeen. Seuraava koodinpätkä näyttää esimerkin erän koon asettamisesta ympäristömuuttujien avulla ja PyTorch-mallin käyttöönotosta SageMakerissa:

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())

Koodinpätkässä model_artifact viittaa kaikkiin tiedostoihin, jotka vaaditaan koulutetun mallin lataamiseksi takaisin, joka arkistoidaan .tar-tiedostoon ja työnnetään Amazonin yksinkertainen tallennuspalvelu (Amazon S3) ämpäri. Inference.py on samanlainen kuin mukautettu TorchServe-käsittelijä; Siinä on useita toimintoja, jotka voit ohittaa mallin alustuksen, vastaanotettujen pyyntöjen esi- ja jälkikäsittelyn sekä päättelylogiikan mukauttamiseksi.

Seuraavat muistikirja näyttää täydellisen esimerkin Hugging Face BERT -mallin käyttöönotosta.

Jos tarvitset mukautetun säilön, voit rakentaa mukautetun säilön kuvan ja työntää sen Amazonin elastisten säiliörekisteri (Amazon ECR) arkisto. Mallin artefakti voi tässä tapauksessa olla TorchServe .mar -tiedosto, joka niputtaa mallin artefaktit käsittelijän kanssa. Esittelemme tämän seuraavassa osiossa, jossa käytämme SageMakerin erämuunnostyötä.

SageMaker erämuunnostyö

SageMaker tarjoaa offline-käyttötapauksiin, joissa pyynnöt kootaan tietolähteestä, kuten tietojoukosta erämuunnostyöt. Näiden töiden avulla voit lukea tietoja S3-säilöstä ja kirjoittaa tulokset kohde-S3-säilöön. Katso lisätietoja Käytä erämuunnosa saadaksesi päätelmiä suurista tietojoukoista. Täydellinen esimerkki eräpäätelmästä erämuunnostöitä käyttäen löytyy seuraavasta muistikirja, jossa käytämme FLORES-kilpailun konekäännösmallia. Tässä esimerkissä näytämme kuinka käyttää mukautettua säilöä mallin pisteytykseen SageMakerin avulla. Mukautetun päätelmäsäiliön avulla voit mukauttaa TorchServe-kokoonpanoasi edelleen. Tässä esimerkissä haluamme muuttaa ja poistaa käytöstä JSON-dekoodauksen, jonka voimme tehdä TorchServen kautta. config.properties tiedosto.

Kun käytät mukautettua TorchServen käsittelijää, meidän on varmistettava, että käsittelijä toteuttaa eräpäättelylogiikan. Jokaisella käsittelijällä voi olla mukautettuja toimintoja esikäsittelyn, päättelyn ja jälkikäsittelyn suorittamiseksi. Esimerkki mukautetusta käsittelijästä eräpäättelytuella on saatavilla osoitteessa GitHub.

Käytämme mukautettua säilöämme mallin artefaktien niputtamiseksi käsittelijän kanssa kuten TorchServessä (.mar-tiedoston tekeminen). Tarvitsemme myös sisääntulopisteen Docker-säilöön, joka käynnistää TorchServen eräkoon ja JSON-dekoodauksen ollessa asetettuna. config.properties. Osoitamme tämän esimerkissä muistikirja.

SageMaker-erämuunnostyö vaatii pääsyn syöttötiedostoihin S3-ämpäristä, jossa se jakaa syöttötiedostot minieriin ja lähettää ne päätelmiä varten. Ota huomioon seuraavat seikat määrittäessäsi erämuunnostyötä:

  • Aseta syöttötiedostot (kuten tietojoukko) S3-säihöön ja aseta se tietolähteeksi työn asetuksissa.
  • Määritä S3-säilö, johon tallennat erämuunnostyön tulokset.
  • Asettaa Erästrategia että MultiRecord ja SplitType että Line jos tarvitset erämuunnostyötä tehdäksesi minieriä syöttötiedostosta. Jos se ei pysty jakamaan tietojoukkoa automaattisesti minieriin, voit jakaa sen minieriin asettamalla kunkin erän erilliseen syöttötiedostoon, joka sijoitetaan tietolähteen S3-ämpäriin.
  • Varmista, että eräkoko mahtuu muistiin. SageMaker käsittelee tämän yleensä automaattisesti; kuitenkin, kun eriä jaetaan manuaalisesti, tämä on viritettävä muistin perusteella.

Seuraava koodi on esimerkki erämuunnostyöstä:

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},
}

Kun käytämme edellä olevia asetuksia ja käynnistämme muunnostyömme, se lukee syöttötiedostot lähteen S3-ämpäristä erissä ja lähettää ne päätelmiä varten. Tulokset kirjoitetaan takaisin lähdöille määritettyyn S3-alueeseen.

Seuraava koodinpätkä näyttää, kuinka työ luodaan ja aloitetaan käyttämällä edellä olevia asetuksia:

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)

Yhteenveto

Tässä viestissä tarkastelimme kahta SageMakerin tarjoamaa tilaa online- ja offline-johtopäätöksiin. Edellinen käyttää TorchServen tarjoamaa dynaamista eräajoa useiden asiakkaiden pyyntöjen yhdistämiseen. Jälkimmäinen käyttää SageMaker-muunnostyötä S3-säihön syöttötiedostojen pyyntöjen yhdistämiseen ja päättelyn suorittamiseen.

Näitimme myös, kuinka malleja voidaan palvella SageMakerissa käyttämällä alkuperäisiä SageMaker PyTorch -päätelmätyökalusarjan säilökuvia ja kuinka mukautettuja säilöjä käytetään käyttötapauksissa, jotka vaativat edistyneitä TorchServe-määritysasetuksia.

TorchServen kehittyessä PyTorch-yhteisön tarpeisiin vastaamaan SageMakeriin on integroitu uusia ominaisuuksia, jotka tarjoavat tehokkaita tapoja palvella malleja tuotannossa. Lisätietoja on osoitteessa TorchServe GitHub -repo ja SageMaker esimerkkejä.


Tietoja Tekijät

Phi Nguyen on AWS:n ratkaisuarkkitehti, joka auttaa asiakkaita heidän pilvimatkallaan keskittyen erityisesti datajärveen, analytiikkaan, semantiikan teknologioihin ja koneoppimiseen. Vapaa-ajallaan voit löytää hänet pyöräilemään töihin, valmentamaan poikansa jalkapallojoukkuetta tai nauttimaan luontokävelystä perheensä kanssa.

Nikhil Kulkarni on AWS-koneoppimisen ohjelmistokehittäjä, joka keskittyy koneoppimistyökuormien tehostamiseen pilvessä ja on AWS Deep Learning Containers -säilöjen luoja koulutusta ja päätelmiä varten. Hän on intohimoinen hajautettuihin Deep Learning Systems -järjestelmiin. Työn ulkopuolella hän lukee kirjoja, soittaa kitaraa ja tekee pizzaa.

Hamid Shojanazeri on Pytorchin kumppaniinsinööri, joka työskentelee OSS:n korkean suorituskyvyn mallien optimoinnin ja palvelun parissa. Hamidilla on tohtorin tutkinto tietokonenäöstä ja hän työskenteli tutkijana multimedialaboratorioissa Australiassa, Malesiassa ja NLP-johtajana Opus.ai:ssa. Hän haluaa löytää yksinkertaisempia ratkaisuja vaikeisiin ongelmiin ja harrastaa taidetta vapaa-ajallaan.

Geeta Chauhan johtaa Meta AI:n tekoälykumppanien suunnittelua, jolla on asiantuntemusta kimmoisten, hauraiden ja laajamittaisten hajautettujen alustojen rakentamisesta startup-yrityksille ja Fortune 500sille. Hänen tiiminsä työskentelee strategisten kumppaneiden, alan koneoppimisjohtajien ja kaikkien suurten pilvipalveluntarjoajien kanssa uusien tekoälytuotepalvelujen ja -kokemusten rakentamiseksi ja lanseeraamiseksi. ja vie PyTorch-malleja tutkimuksesta tuotantoon. Hän on Women in IT – Piilaakso – Vuoden teknologiajohtaja 2019 -palkinnon voittaja, ACM Distinguished Speaker ja ajatusjohtaja aiheissa, jotka vaihtelevat tekoälyn etiikkasta, syväoppimisesta, lohkoketjusta ja IoT:stä. Hän on intohimoisesti edistänyt tekoälyn käyttöä hyväksi.

Lähde: https://aws.amazon.com/blogs/machine-learning/optimize-your-inference-jobs-using-dynamic-batch-inference-with-torchserve-on-amazon-sagemaker/

Aikaleima:

Lisää aiheesta AWS-koneoppimisblogi