Optimeerige oma järeldustöid, kasutades dünaamilist partii järeldust TorchServe'iga Amazon SageMakeris

Allikasõlm: 1884601

Süvaõppe puhul tähendab paketttöötlus mitme sisendi sisestamist mudelisse. Kuigi see on koolituse ajal hädavajalik, võib see olla väga kasulik kulude haldamiseks ja läbilaskevõime optimeerimiseks ka järelduste tegemise ajal. Riistvarakiirendid on optimeeritud paralleelsuse jaoks ja partiide jagamine aitab arvutusvõimsust küllastada ja viib sageli suurema läbilaskevõimeni.

Pakkimine võib olla abiks mitme stsenaariumi korral mudeli tootmises juurutamisel. Siin liigitame need laias laastus kaheks kasutusjuhtumiks:

  • Reaalajas rakendused, kus erinevatelt klientidelt võetakse vastu mitu järelduspäringut, mis dünaamiliselt komplekteeritakse ja edastatakse teenindusmudelisse. Latentsus on sellistel kasutusjuhtudel tavaliselt oluline.
  • Võrguühenduseta rakendused, kus mitu sisendit või päringut koondatakse kliendi poolel ja saadetakse teenindusmudelile. Nende kasutusjuhtumite eesmärk on sageli suurem läbilaskevõime, mis aitab kulusid hallata. Kasutusjuhtude näideteks on videoanalüüs ja mudeli hindamine.

Amazon SageMaker pakub teie järeldustööde jaoks kahte populaarset võimalust. Reaalajas rakenduste jaoks kasutab SageMaker Hosting taustateenindusteegina TorchServe, mis tegeleb vastuvõetud päringute dünaamilise pakkimisega. Võrguühenduseta rakenduste jaoks saate kasutada SageMakeri pakkteisendustöid. Selles postituses käsitleme iga valiku näidet, mis aitab teil alustada.

Kuna TorchServe on algne integreeritud SageMakeriga kaudu SageMaker PyTorchi järelduste tööriistakomplekt, saate PyTorchi mudeli hõlpsasti TorchServe'is juurutada, kasutades SageMaker Hosting. Samuti võib juhtuda, et peate oma keskkonda kohandatud Dockeri piltide abil veelgi kohandama. Selles postituses näitame esmalt, kuidas juurutada reaalajas lõpp-punkti, kasutades natiivset SageMaker PyTorchi järelduste tööriistakomplekti ja konfigureerida partii suurust läbilaskevõime optimeerimiseks. Teises näites demonstreerime, kuidas kasutada kohandatud Dockeri pilti, et konfigureerida TorchServe'i täpsemaid konfiguratsioone, mis pole keskkonnamuutujana saadaval, et optimeerida teie partii järelduste tööd.

Paremad tavad partii järelduste tegemiseks

Paketttöötlus võib suurendada läbilaskevõimet ja optimeerida teie ressursse, kuna see aitab latentsusaja arvelt teatud aja jooksul lõpule viia suurema hulga järeldusi. Mudeli juurutamise optimeerimiseks suurema läbilaskevõime saavutamiseks on üldine juhis suurendada partii suurust, kuni läbilaskevõime väheneb. See sobib kõige sagedamini võrguühenduseta rakendustele, kus ennustusväljundite saamiseks on mitu sisendit (nt videokaadrid, pildid või tekst) komplekteeritud.

Reaalajas rakenduste puhul on sageli peamine probleem latentsusaeg. Suurema läbilaskevõime ning suurema partii suuruse ja latentsuse vahel on kompromiss; latentsustaseme SLA-le vastamiseks võib tekkida vajadus kohandada. Pilve parimate tavade seisukohast on teatud arvu järelduste maksumus kasulik juhis teie ettevõtte vajadustele vastava teadliku otsuse tegemisel. Üks kulude haldamist soodustav tegur on õige kiirendi valimine. Lisateabe saamiseks vt Valige Amazon SageMakeriga parim AI kiirendi ja mudelite kompilatsioon arvutinägemise järelduste tegemiseks.

TorchServe'i dünaamiline komplekteerimine SageMakeris

TorchServe on PyTorchi põhiteek mudelite mastaabis teenindamiseks tootmises. See on Facebooki ja AWS-i ühine arendus. TorchServe võimaldab teil jälgida, lisada kohandatud mõõdikuid, toetada mitut mudelit, suurendada ja vähendada töötajate arvu turvaliste haldus API-de abil ning pakkuda järeldusi ja selgitusi.

Paketttöötluse toetamiseks pakub TorchServe dünaamilist komplekteerimisfunktsiooni. See koondab saadud päringud kindlaksmääratud aja jooksul, koondab need kokku ja saadab partii järelduste tegemiseks. Saabunud taotlusi töödeldakse läbi käitlejad TorchServe'is. TorchServe'il on mitu vaiketöötlejat ja kui teie kasutusjuhtumit ei käsitleta, võite luua kohandatud töötleja. Kohandatud töötleja kasutamisel veenduge, et töötlejas oleks rakendatud partii järeldamisloogika. Näidis kohandatud töötlejast koos partii järelduste toega on saadaval aadressil GitHub.

Saate konfigureerida dünaamilist komplekteerimist, kasutades kahte seadet, batch_size ja max_batch_delay, kas SageMakeri keskkonnamuutujate või rakenduse kaudu config.properties faili TorchServe'is (kui kasutate kohandatud konteinerit). TorchServe kasutab mis tahes sätteid, mis tulevad esimesena, kas maksimaalset partii suurust (batch_size) või määratud ajavahemikku, mille jooksul tuleb taotluste kogum oodata max_batch_delay.

TorchServe'i integreerimisega SageMakeriga saate nüüd PyTorchi mudeleid SageMakeris algselt juurutada, kus saate määratleda SageMakeri PyTorchi mudeli. Saate lisada kohandatud mudeli laadimise, järelduste ning eeltöötluse ja järeltöötluse loogika skripti, mis edastatakse SageMaker PyTorchi sisenemispunktina (vt järgmist näidiskoodi). Teise võimalusena saate oma mudelite juurutamiseks kasutada kohandatud konteinerit. Lisateabe saamiseks vt SageMaker PyTorchi mudeliserver.

Saate SageMakeris PyTorchi mudelite partii suuruse määrata keskkonnamuutujate kaudu. Kui otsustate kasutada kohandatud konteinerit, saate selle komplekteerida seaded in config.properties oma mudeliga, kui pakkite oma mudelit TorchServe'i. Järgmine koodilõik näitab näidet partii suuruse määramiseks keskkonnamuutujate abil ja PyTorchi mudeli juurutamiseks SageMakeris:

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

Koodilõigul model_artifact viitab kõigile vajalikele failidele koolitatud mudeli tagasilaadimiseks, mis arhiveeritakse tar-faili ja lükatakse Amazoni lihtne salvestusteenus (Amazon S3) kopp. Inference.py sarnaneb TorchServe'i kohandatud töötlejaga; sellel on mitu funktsiooni, mida saate alistada, et kohandada mudeli lähtestamist, vastuvõetud päringute eel- ja järeltöötlust ning järeldusloogikat.

Järgmised märkmik näitab täielikku näidet Hugging Face BERTi mudeli kasutuselevõtust.

Kui vajate kohandatud konteinerit, saate luua kohandatud konteineri kujutise ja lükata selle kataloogi Amazoni elastsete konteinerite register (Amazon ECR) hoidla. Mudeli artefakt võib sel juhul olla TorchServe .mar-fail, mis koondab mudeli artefaktid koos käitlejaga. Näitame seda järgmises jaotises, kus kasutame SageMakeri partii teisendustööd.

SageMakeri partii teisendustöö

Võrguühenduseta kasutamise juhtudel, kui päringud kogutakse andmeallikast, näiteks andmestikust, pakub SageMaker partii teisendustööd. Need tööd võimaldavad teil lugeda andmeid S3 ämbrist ja kirjutada tulemused sihtmärgi S3 ämbrisse. Lisateabe saamiseks vt Kasutage suurte andmekogumite põhjal järelduste saamiseks pakkteisendust. Täieliku näite pakkjäreldamise kohta partii teisendustööde abil leiate järgmisest märkmik, kus kasutame konkursi FLORES masintõlke mudelit. Selles näites näitame, kuidas kasutada kohandatud konteinerit meie mudeli hindamiseks SageMakeri abil. Kohandatud järelduskonteineri kasutamine võimaldab teil oma TorchServe'i konfiguratsiooni veelgi kohandada. Selles näites tahame muuta ja keelata JSON-i dekodeerimist, mida saame teha TorchServe'i kaudu config.properties faili.

Kui kasutate TorchServe'i jaoks kohandatud töötlejat, peame veenduma, et käitleja rakendab partii järeldamisloogikat. Igal töötlejal võib olla eeltöötluse, järelduste ja järeltöötluse teostamiseks kohandatud funktsioone. Näidis kohandatud töötlejast koos partii järelduste toega on saadaval aadressil GitHub.

Kasutame oma kohandatud konteinerit, et komplekteerida mudeli artefaktid käitlejaga, nagu TorchServe'is (mar-faili tegemine). Vajame ka Dockeri konteineri sisenemispunkti, mis käivitab TorchServe'i partii suuruse ja JSON-i dekodeerimisega. config.properties. Näitame seda näites märkmik.

SageMakeri partii teisendustöö nõuab juurdepääsu sisendfailidele S3 ämbrist, kus see jagab sisendfailid minipakkideks ja saadab need järelduste tegemiseks. Partii teisendustöö konfigureerimisel arvestage järgmiste punktidega.

  • Asetage sisendfailid (nt andmekogum) S3 ämbrisse ja määrake see töö seadetes andmeallikaks.
  • Määrake S3-salv, kuhu salvestada partii teisendustöö tulemused.
  • komplekt Partiistrateegia et MultiRecord ja SplitType et Line kui teil on sisendfailist minipartiide tegemiseks vaja partii teisendustööd. Kui see ei saa andmestikku automaatselt minipartiideks jagada, saate selle jagada minipartiideks, paigutades iga partii eraldi sisendfaili, mis asetatakse andmeallika S3 ämbrisse.
  • Veenduge, et partii suurus mahuks mällu. SageMaker tegeleb sellega tavaliselt automaatselt; partiide käsitsi jagamisel tuleb seda aga mälu järgi häälestada.

Järgmine kood on pakkteisendustöö näide:

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

Kui kasutame eelmisi sätteid ja käivitame oma teisendustöö, loeb see S3 allika sisendfailid partiidena ja saadab need järelduste tegemiseks. Tulemused kirjutatakse tagasi väljunditele määratud S3 ämbrisse.

Järgmine koodilõik näitab, kuidas eelmiste sätete abil tööd luua ja käivitada.

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)

Järeldus

Selles postituses vaatasime üle kaks režiimi, mida SageMaker pakub võrgu- ja võrguühenduseta järelduste tegemiseks. Esimene kasutab TorchServe'is pakutavat dünaamilist komplekteerimist mitme kliendi päringute komplekteerimiseks. Viimane kasutab SageMakeri teisendustööd, et koondada S3 ämbrisse sisendfailide päringud ja käivitada järeldused.

Samuti näitasime, kuidas pakkuda mudeleid SageMakeris, kasutades natiivseid SageMakeri PyTorchi järelduste tööriistakomplekti konteineri kujutisi, ja kuidas kasutada kohandatud konteinereid kasutusjuhtudel, mis nõuavad TorchServe'i täpsemaid konfiguratsioonisätteid.

Kuna TorchServe areneb jätkuvalt PyTorchi kogukonna vajaduste rahuldamiseks, on SageMakerisse integreeritud uued funktsioonid, et pakkuda tõhusaid viise tootmismudelite teenindamiseks. Lisateabe saamiseks vaadake TorchServe GitHubi repo ja SageMakeri näited.


Autoritest

Phi Nguyen on AWS-i lahenduste arhitekt, kes aitab kliente nende pilveteekonnal, keskendudes eelkõige andmejärvele, analüütikale, semantikatehnoloogiatele ja masinõppele. Vabal ajal võib teda leida rattaga tööle sõitmas, poja jalgpallimeeskonda juhendamas või perega looduses jalutamas.

Nikhil Kulkarni on AWS-i masinõppega tarkvaraarendaja, kes keskendub masinõppe töökoormuse muutmisele pilves ning on AWS-i süvaõppekonteinerite kaaslooja koolituse ja järelduste tegemiseks. Ta on kirglik hajutatud süvaõppesüsteemide vastu. Töövälisel ajal meeldib talle raamatuid lugeda, kitarri kallal askeldada ja pitsat valmistada.

Hamid Shojanazeri on Pytorchi partnerinsener, kes töötab OSS-i suure jõudlusega mudelite optimeerimise ja teenindamise kallal. Hamidil on doktorikraad arvutinägemise alal ning ta töötas teadurina multimeedialaborites Austraalias ja Malaisias ning NLP juht sai Opus.ai. Talle meeldib rasketele probleemidele lihtsamaid lahendusi leida ja vabal ajal on ta kunstihuviline.

Geeta Chauhan juhib Meta AI tehisintellekti partnertehnoloogiat, kellel on teadmised vastupidavate, ebakindlate, suuremahuliste hajutatud platvormide loomisel alustavatele ettevõtetele ja Fortune 500-le. Tema meeskond töötab uute tehisintellekti tooteteenuste ja -kogemuste loomisel ja turuletoomisel strateegiliste partnerite, masinõppe juhtide kogu tööstuse ja kõigi suuremate pilveteenuste pakkujatega; ja PyTorchi mudelite viimine uurimistööst tootmisse. Ta on konkursi Women in IT – Silicon Valley – 2019. aasta CTO võitja, ACM-i silmapaistev kõneleja ja mõtteliider teemadel, mis ulatuvad tehisintellekti eetikast, süvaõppest, plokiahelast ja asjade internetist. Ta on kirglik AI for Good kasutamise propageerimise vastu.

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

Ajatempel:

Veel alates AWS-i masinõppe ajaveeb