Optimizirajte svoja opravila sklepanja z uporabo dinamičnega paketnega sklepanja s TorchServe na Amazon SageMaker

Izvorno vozlišče: 1884601

Pri poglobljenem učenju se paketna obdelava nanaša na vnos več vhodnih podatkov v model. Čeprav je med usposabljanjem bistvenega pomena, je lahko zelo koristno upravljati stroške in optimizirati pretok tudi v času sklepanja. Pospeševalniki strojne opreme so optimizirani za vzporednost, paketno združevanje pa pomaga nasičiti računalniško zmogljivost in pogosto vodi do večje prepustnosti.

Sertiranje je lahko koristno v več scenarijih med uvajanjem modela v produkcijo. Tukaj jih na splošno razvrščamo v dva primera uporabe:

  • Aplikacije v realnem času, pri katerih je od različnih odjemalcev prejetih več zahtev za sklepanje, ki so dinamično združene v pakete in posredovane strežnemu modelu. V teh primerih uporabe je zakasnitev običajno pomembna.
  • Aplikacije brez povezave, kjer je več vnosov ali zahtev združenih na strani odjemalca in poslanih strežnemu modelu. Večja prepustnost je pogosto cilj teh primerov uporabe, kar pomaga obvladovati stroške. Primeri uporabe vključujejo analizo videa in oceno modela.

Amazon SageMaker ponuja dve priljubljeni možnosti za vaša opravila sklepanja. Za aplikacije v realnem času SageMaker Hosting uporablja TorchServe kot zaledno strežno knjižnico, ki obravnava dinamično združevanje prejetih zahtev. Za aplikacije brez povezave lahko uporabite opravila paketnega preoblikovanja SageMaker. V tej objavi gremo skozi primer vsake možnosti, da vam pomagamo začeti.

Ker je TorchServe izviren integriran s SageMakerjem preko Komplet orodij za sklepanje SageMaker PyTorch, lahko preprosto namestite model PyTorch na TorchServe z uporabo SageMaker Hosting. Včasih boste morda morali še dodatno prilagoditi svoje okolje z uporabo slik Docker po meri. V tej objavi najprej pokažemo, kako razmestiti končno točko v realnem času z uporabo izvirnega kompleta orodij za sklepanje SageMaker PyTorch in konfiguracijo velikosti paketa za optimizacijo prepustnosti. V drugem primeru prikazujemo, kako uporabiti sliko Docker po meri za konfiguracijo naprednih konfiguracij TorchServe, ki niso na voljo kot spremenljivka okolja za optimizacijo vašega opravila paketnega sklepanja.

Najboljše prakse za paketno sklepanje

Paketna obdelava lahko poveča prepustnost in optimizira vaše vire, ker pomaga dokončati večje število sklepov v določenem času na račun zakasnitve. Za optimizacijo uvajanja modela za večjo prepustnost je splošno vodilo povečevati velikost serije, dokler se prepustnost ne zmanjša. To najpogosteje ustreza aplikacijam brez povezave, kjer je več vnosov združenih (kot so video okvirji, slike ali besedilo), da se pridobijo izhodi predvidevanja.

Za aplikacije v realnem času je zakasnitev pogosto glavna skrb. Obstaja kompromis med večjo prepustnostjo ter povečano velikostjo paketa in zakasnitvijo; morda boste morali prilagoditi, kot je potrebno, da boste izpolnili svojo zakasnitev SLA. Kar zadeva najboljše prakse v oblaku, je cena na določeno število sklepov koristna smernica pri sprejemanju premišljene odločitve, ki ustreza vašim poslovnim potrebam. Eden od dejavnikov, ki prispeva k obvladovanju stroškov, je izbira pravega pospeševalnika. Za več informacij glejte Izberite najboljši AI pospeševalnik in kompilacijo modela za sklepanje računalniškega vida z Amazon SageMaker.

TorchServe dinamično doziranje na SageMaker

TorchServe je izvorna knjižnica PyTorch za streženje modelov v proizvodnji v velikem obsegu. To je skupni razvoj Facebooka in AWS. TorchServe vam omogoča spremljanje, dodajanje meritev po meri, podporo več modelov, povečevanje in zmanjševanje števila delavcev prek API-jev za varno upravljanje ter zagotavljanje končnih točk sklepanja in razlage.

Za podporo paketne obdelave TorchServe ponuja funkcijo dinamičnega paketiranja. Združi prejete zahteve v določenem časovnem okviru, jih združi v pakete in pošlje paket v sklepanje. Prejete zahteve se obravnavajo preko upravljavci v TorchServe. TorchServe ima več privzetih obdelovalcev in vabljeni, da ustvarite obravnavo po meri, če vaš primer uporabe ni zajet. Pri uporabi obdelovalnika po meri se prepričajte, da je bila v obdelovalniku implementirana logika paketnega sklepanja. Primer obdelovalnika po meri s podporo za paketno sklepanje je na voljo na GitHub.

Dinamično pakiranje lahko konfigurirate z dvema nastavitvama, batch_size in max_batch_delay, bodisi prek spremenljivk okolja v SageMakerju bodisi prek config.properties datoteko v TorchServe (če uporabljate vsebnik po meri). TorchServe uporablja katero koli od nastavitev, ki so na prvem mestu, bodisi največjo velikost serije (batch_size) ali določeno časovno okno za čakanje na paket zahtev max_batch_delay.

Z integracijo TorchServe s SageMakerjem lahko zdaj izvorno uvedete modele PyTorch v SageMaker, kjer lahko definirate model SageMaker PyTorch. Dodate lahko nalaganje modela po meri, sklepanje ter logiko predobdelave in naknadne obdelave v skriptu, posredovanem kot vstopna točka v SageMaker PyTorch (glejte naslednji primer kode). Lahko pa uporabite vsebnik po meri za uvajanje svojih modelov. Za več informacij glejte Modelni strežnik SageMaker PyTorch.

Velikost paketa za modele PyTorch v SageMakerju lahko nastavite prek spremenljivk okolja. Če se odločite za uporabo vsebnika po meri, lahko združite nastavitve in config.properties z vašim modelom pri pakiranju vašega modela v TorchServe. Naslednji delček kode prikazuje primer, kako nastaviti velikost paketa z uporabo spremenljivk okolja in kako razmestiti model PyTorch na SageMaker:

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

V delčku kode model_artifact se nanaša na vse zahtevane datoteke za nalaganje nazaj izurjenega modela, ki je arhiviran v datoteki .tar in potisnjen v Preprosta storitev shranjevanja Amazon (Amazon S3) vedro. Inference.py je podoben upravljalniku po meri TorchServe; ima več funkcij, ki jih lahko preglasite, da se prilagodite inicializaciji modela, predprocesiranju in naknadni obdelavi prejetih zahtev ter logiki sklepanja.

Naslednja prenosnik prikazuje celoten primer uvajanja modela Hugging Face BERT.

Če potrebujete vsebnik po meri, lahko ustvarite sliko vsebnika po meri in jo potisnete v Registar elastičnih zabojnikov Amazon (Amazon ECR) repozitorij. Artefakt modela je v tem primeru lahko datoteka .mar TorchServe, ki združuje artefakte modela skupaj z upravljalnikom. To prikazujemo v naslednjem razdelku, kjer uporabljamo opravilo paketnega preoblikovanja SageMaker.

Opravilo paketnega preoblikovanja SageMaker

Za primere uporabe brez povezave, kjer so zahteve združene iz vira podatkov, kot je nabor podatkov, ponuja SageMaker opravila paketnega preoblikovanja. Ta opravila vam omogočajo branje podatkov iz vedra S3 in zapisovanje rezultatov v ciljno vedro S3. Za več informacij glejte Uporabite paketno pretvorbo za pridobivanje sklepov iz velikih naborov podatkov. Celoten primer paketnega sklepanja z uporabo opravil paketnega preoblikovanja je na voljo v nadaljevanju prenosnik, kjer uporabljamo model strojnega prevajanja iz tekmovanja FLORES. V tem primeru prikazujemo, kako uporabiti vsebnik po meri za ocenjevanje našega modela z uporabo SageMakerja. Uporaba vsebnika sklepanja po meri vam omogoča, da dodatno prilagodite konfiguracijo TorchServe. V tem primeru želimo spremeniti in onemogočiti dekodiranje JSON, kar lahko storimo prek TorchServe config.properties Datoteka.

Pri uporabi obdelovalnika po meri za TorchServe se moramo prepričati, da obravnavalec izvaja logiko sklepanja paketov. Vsak upravljavec ima lahko funkcije po meri za izvajanje predprocesiranja, sklepanja in naknadnega procesiranja. Primer obdelovalnika po meri s podporo za paketno sklepanje je na voljo na GitHub.

Svoj vsebnik po meri uporabljamo za povezovanje artefaktov modela z upravljalnikom, kot to počnemo v TorchServe (ustvarjanje datoteke .mar). Potrebujemo tudi vstopno točko v vsebnik Docker, ki zažene TorchServe z nastavljeno velikostjo paketa in dekodiranjem JSON config.properties. To prikazujemo na primeru prenosnik.

Opravilo paketnega preoblikovanja SageMaker zahteva dostop do vhodnih datotek iz vedra S3, kjer vhodne datoteke razdeli na mini pakete in jih pošlje v sklepanje. Pri konfiguriranju opravila paketnega preoblikovanja upoštevajte naslednje:

  • Postavite vhodne datoteke (kot je nabor podatkov) v vedro S3 in ga nastavite kot vir podatkov v nastavitvah opravila.
  • Dodelite vedro S3, v katerega želite shraniti rezultate opravila paketnega preoblikovanja.
  • Kompleti BatchStrategy do MultiRecord in SplitType do Line če potrebujete opravilo paketnega preoblikovanja za izdelavo mini paketov iz vhodne datoteke. Če nabora podatkov ne more samodejno razdeliti na mini pakete, ga lahko razdelite na mini pakete tako, da vsak paket postavite v ločeno vhodno datoteko, ki je postavljena v vedro izvora podatkov S3.
  • Prepričajte se, da se velikost serije prilega pomnilniku. SageMaker običajno to uredi samodejno; pri ročnem deljenju serij pa je treba to prilagoditi glede na pomnilnik.

Naslednja koda je primer za opravilo paketnega preoblikovanja:

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

Ko uporabimo prejšnje nastavitve in zaženemo naše opravilo preoblikovanja, prebere vhodne datoteke iz izvornega vedra S3 v paketih in jih pošlje v sklepanje. Rezultati se zapišejo nazaj v vedro S3, določeno za izhode.

Naslednji delček kode prikazuje, kako ustvariti in zagnati opravilo s prejšnjimi nastavitvami:

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)

zaključek

V tej objavi smo pregledali dva načina, ki jih SageMaker ponuja za spletno in nespletno sklepanje. Prvi uporablja dinamično združevanje, ki je na voljo v TorchServe, za združevanje zahtev iz več strank. Slednji uporablja opravilo preoblikovanja SageMaker za paketno obdelavo zahtev iz vhodnih datotek v vedru S3 in izvajanje sklepanja.

Pokazali smo tudi, kako servirati modele na SageMakerju z izvornimi slikami vsebnikov orodij za sklepanje SageMaker PyTorch in kako uporabiti vsebnike po meri za primere uporabe, ki zahtevajo napredne konfiguracijske nastavitve TorchServe.

Ker se TorchServe še naprej razvija, da bi zadovoljil potrebe skupnosti PyTorch, so v SageMaker integrirane nove funkcije, ki zagotavljajo učinkovite načine za streženje modelov v proizvodnji. Za več informacij si oglejte TorchServe GitHub repo in Primeri SageMaker.


O avtorjih

Phi Nguyen je arhitekt rešitev pri AWS, ki strankam pomaga pri njihovem potovanju v oblak s posebnim poudarkom na podatkovnem jezeru, analitiki, semantičnih tehnologijah in strojnem učenju. V prostem času ga lahko najdete s kolesom v službo, trenira sinovo nogometno ekipo ali uživa v sprehodu v naravi z družino.

Nikhil Kulkarni je razvijalec programske opreme z AWS Machine Learning, ki se osredotoča na to, da naredi delovne obremenitve strojnega učenja bolj zmogljive v oblaku in je soustvarjalec AWS Deep Learning Containers za usposabljanje in sklepanje. Navdušen je nad porazdeljenimi sistemi globokega učenja. Zunaj službe rad bere knjige, poigrava s kitaro in pripravlja pico.

Hamid Šojanazeri je partnerski inženir pri Pytorchu, ki dela na optimizaciji in strežbi visoko zmogljivih modelov OSS. Hamid ima doktorat iz računalniškega vida in je delal kot raziskovalec v multimedijskih laboratorijih v Avstraliji, Maleziji in vodi NLP v Opus.ai. Rad išče enostavnejše rešitve za težke probleme, v prostem času pa je umetniški navdušenec.

Geeta Chauhan vodi AI Partner Engineering pri Meta AI s strokovnim znanjem in izkušnjami pri gradnji prožnih, ne-lomljivih, obsežnih porazdeljenih platform za zagonska podjetja in Fortune 500s. Njena ekipa sodeluje s strateškimi partnerji, voditelji strojnega učenja v celotni panogi in vsemi večjimi ponudniki storitev v oblaku za ustvarjanje in lansiranje novih storitev in izkušenj izdelkov AI; in prenos modelov PyTorch iz raziskav v proizvodnjo. Je zmagovalka Ženske v IT – Silicijeva dolina – CTO leta 2019, priznana govornica ACM in vodja razmišljanj o temah, ki segajo od etike v AI, globokega učenja, veriženja blokov, interneta stvari. Navdušena je nad spodbujanjem uporabe AI for Good.

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

Časovni žig:

Več od Blog za strojno učenje AWS