Looge PyTorch Model Zoo abil Amazon SageMakeri mudeleid

Looge PyTorch Model Zoo abil Amazon SageMakeri mudeleid

Allikasõlm: 1778255

Kvaliteetsete, koolitatud masinõppe (ML) mudelite juurutamine kas pakett- või reaalajas järelduste tegemiseks on klientidele väärtuse loomisel kriitilise tähtsusega. ML-i katsetamise protsess võib aga olla tüütu – on palju lähenemisviise, mille rakendamiseks on vaja palju aega. Seetõttu on eelkoolitatud ML-mudelid, nagu need, mis on esitatud dokumendis PyTorchi mudeliloomaaed on nii abivalmid. Amazon SageMaker pakub ühtset liidest erinevate ML-mudelitega katsetamiseks ja PyTorchi mudeliloomaaed võimaldab meil mudeleid lihtsalt standardsel viisil vahetada.

See ajaveebi postitus näitab, kuidas teha ML-i järeldusi, kasutades SageMakeris PyTorch Model Zoo objektide tuvastamise mudelit. PyTorch Model Zoo eelkoolitatud ML-mudelid on valmis ja neid saab hõlpsasti kasutada ML-rakenduste osana. Nende ML-mudelite seadistamine SageMakeri lõpp-punktina või SageMakeri partii teisendus Internetis või võrguühenduseta järelduste tegemine on selles ajaveebi postituses kirjeldatud sammude abil lihtne. Me kasutame a Kiirem R-CNN objektituvastusmudel eelmääratletud objektiklasside piirdekastide ennustamiseks.

Läbime täieliku näite, alates Faster R-CNN objekti tuvastamise mudeli kaalude laadimisest kuni nende salvestamiseni Amazon Simple Storage Service (Amazon S3) ämber ja sisenemispunkti faili kirjutamine ja PyTorchModel API põhiparameetrite mõistmine. Lõpuks juurutame ML-mudeli, teeme selle kohta järeldused, kasutades SageMaker Batch Transformi, kontrollime ML-mudeli väljundit ja õpime tulemusi tõlgendama. Seda lahendust saab rakendada kõikidele teistele PyTorch Model Zoo eelkoolitatud mudelitele. Saadaolevate mudelite loendi leiate veebisaidilt PyTorch Model Zoo dokumentatsioon.

Lahenduse ülevaade

See ajaveebi postitus läbib järgmised sammud. Kõigi etappide täieliku tööversiooni vaatamiseks vaadake create_pytorch_model_sagemaker.ipynb

  • Samm: seadistamine
  • 2. samm: ML-mudeli laadimine PyTorch Model Zoo'st
  • 3. samm Salvestage ja laadige ML-mudeli artefaktid Amazon S3-sse
  • 4. samm: looge ML-mudeli järeldusskriptid
  • 5. samm: SageMakeri partii teisendustöö käivitamine
  • 6. samm: tulemuste visualiseerimine

Arhitektuuriskeem

Kataloogi struktuur

Selle ajaveebi koodi leiate siit GitHubi hoidla. Koodibaas sisaldab kõike, mida vajame ML-mudeli artefaktide loomiseks, teisendustöö käivitamiseks ja tulemuste visualiseerimiseks.

See on töövoog, mida me kasutame. Kõik järgmised sammud viitavad selle struktuuri moodulitele.

sagemaker_pytorch_model_zoo --> root directory |- inference.py --> entry point file |- create_pytorch_model_sagemaker.ipynb --> walks through all steps in this blog post |- cars.jpg --> input image

. sagemaker_torch_model_zoo kaust peaks sisaldama inference.py sisenemispunktifailina ja create_pytorch_model_sagemaker.ipynb, et laadida ja salvestada mudeli kaalud, luua SageMakeri mudeliobjekt ja edastada see lõpuks SageMakeri pakkteisendustööle. Oma ML-mudelite toomiseks muutke märkmiku jaotises Samm 1: seadistamise teed ja laadige uus mudel jaotises 2. samm: ML-mudeli laadimine PyTorchi mudeli loomaaiast. Ülejäänud alltoodud sammud jäävad samaks.

Samm: seadistamine

IAM-i rollid

SageMaker teostab toiminguid infrastruktuuriga, mida haldab SageMaker. SageMaker saab teha ainult neid toiminguid, mis on lubatud märkmikuga kaasnevas SageMakeri IAM-i täitmisrollis. Üksikasjalikumat dokumentatsiooni IAM-rollide loomise ja IAM-õiguste haldamise kohta leiate jaotisest AWS SageMaker rollide dokumentatsioon. Võime luua uue rolli või saada selle SageMaker (Stuudio) märkmikvaikimisi täitmisrolli, käivitades järgmised koodiread:

import sagemaker session = sagemaker.Session() # Set a default S3 bucket
default_bucket = session.default_bucket() # Get the region
region = boto3.Session().region_name # Get the SageMaker Execution Role
role_arn = sagemaker.get_execution_role()

Ülaltoodud kood saab sülearvuti eksemplari SageMakeri täitmisrolli. See on IAM-i roll, mille lõime oma SageMakeri või SageMaker Studio sülearvuti eksemplari jaoks.

Kasutaja seadistatavad parameetrid

Siin on kõik konfigureeritavad parameetrid, mis on vajalikud meie SageMakeri partii teisendustöö koostamiseks ja käivitamiseks:

INSTANCE_TYPE= "ml.m5.xlarge"
INSTANCE_COUNT= 1
BUCKET = os.path.join("s3://", default_bucket) DATA_PATH= os.path.join(BUCKET, "images")
IMAGE_NAME = "cars.jpg"
RANDOM_STRING_LENGTH= 16
MODEL_NAME= "FasterRCNNResnet50" # Needs to be set to version 1.2 or higher to enable automatic PyTorch model repackaging
FRAMEWORK_VERSION= "1.2"
ENTRY_POINT_FILE_NAME= "inference.py" SAGEMAKER_EXECUTION_ROLE_ARN= role_arn
MODEL_ARTIFACTS_FILE_NAME= os.path.join(BUCKET, "modelzoo/fasterrcnn_resnet50_fpn/model.tar.gz")
IMAGE_URI= sagemaker.image_uris.retrieve(framework="pytorch",
region=region,
version="1.9.1",
py_version="py38",
image_scope='inference',
instance_type=INSTANCE_TYPE)

2. samm: ML-mudeli laadimine PyTorchi mudeliloomaaiast

Järgmisena määrame PyTorch Model Zoo objektide tuvastamise mudeli ja salvestame selle ML-mudeli kaalud. Tavaliselt salvestame PyTorchi mudeli faililaienditega .pt või .pth. Allolev koodilõik laadib PyTorchi mudeliloomaaiast alla eelkoolitatud Faster R-CNN ResNet50 ML mudeli:

model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)

SageMakeri partii teisendus nõuab sisendiks mõningaid mudeli kaalusid, seega salvestame eelkoolitatud ML-mudeli kui model.pt. Kui tahame laadida kohandatud mudelit, võiksime mõne teise PyTorchi mudeli mudeli kaalud selle asemel model.pt-na salvestada.

H = 1080
W = 1920
scripted_fn = torch.jit.script(model, torch.randn(1, 3, H, W))
scripted_fn.save("model.pt")

3. samm: salvestage ja laadige ML-mudeli artefaktid Amazon S3-sse

Kuna me kasutame ML-i järelduste tegemiseks SageMakerit, peame mudeli kaalud üles laadima S3 ämbrisse. Seda saame teha järgmiste käskude abil või faili alla laadides ja lihtsalt S3-sse pukseerides. Järgmised käsud tihendavad kõigepealt failide rühma model.pt tarballi ja kopeerige mudeli kaalud meie kohalikust masinast S3 ämbrisse.

märkused: järgmiste käskude käivitamiseks peab teil olema AWS-i käsurealiides (AWS-i CLI) paigaldatud.

tar -czvf model.tar.gz model.pt
aws s3 cp model.tar.gz $MODEL_ARTIFACTS_FILE_NAME

Järgmisena kopeerime oma sisendpildi S3-sse. Allpool on pildi täielik S3 tee.

car_image_path = os.path.join(DATA_PATH, IMAGE_NAME)

Saame selle pildi kopeerida S3-sse teise aws s3 cp käsuga.

aws s3 cp cars.jpg $car_image_path

4. samm: looge ML-mudeli järeldusskriptid

Nüüd vaatame üle oma sisenemispunkti faili, inference.py moodul. Saame juurutada PyTorch mudeli, mis on koolitatud väljaspool SageMakerit, kasutades PyTorchModel klassi. Esiteks instantseerime PyTorchModelZoo objekti. Seejärel koostame sisestuspunkti faili inference.py, et teha ML-i järeldusi, kasutades Amazon S3-s hostitud näidisandmetel SageMakeri partii teisendust.

PyTorchModeli objekti mõistmine

. PyTorchModel klass SageMaker Python API-s võimaldab meil teha ML-i järeldusi, kasutades meie allalaaditud mudeliartefakti.

PyTorchModel klassi käivitamiseks peame mõistma järgmisi sisendparameetreid:

  • name: Mudeli nimi; ainulaadsuse huvides soovitame kasutada kas mudeli nime + kuupäeva kellaaega või juhuslikku stringi + kuupäeva kellaaeg.
  • model_data: pakitud ML-mudeli artefakti S3 URI.
  • entry_point: kasutaja määratud Pythoni fail, mida järeldus Dockeri kujutis kasutab sissetulevate päringute töötlejate määratlemiseks. Kood määratleb mudeli laadimise, sisendi eeltöötluse, ennustusloogika ja väljundi järeltöötluse.
  • framework_version: PyTorchi mudeli automaatse ümberpakendamise lubamiseks peab olema seadistatud versioon 1.2 või uuem.
  • source_dir: sisestuspunkti faili kataloog.
  • role: IAM-i roll AWS-i teenusepäringute tegemiseks.
  • image_uri: kasutage seda Amazon ECR Dockeri konteineri pilti ML-mudeli arvutuskeskkonna alusena.
  • sagemaker_session: SageMakeri seanss.
  • py_version: kasutatav Pythoni versioon

Järgmine koodilõik loob PyTorchModel klassi, et teha järeldusi, kasutades eelkoolitatud PyTorchi mudelit:

model = PyTorchModel( name=RANDOM_STRING, model_data=MODEL_ARTIFACTS_FILE_NAME, entry_point=ENTRY_POINT_FILE_NAME, framework_version=FRAMEWORK_VERSION, role=SAGEMAKER_EXECUTION_ROLE_ARN, sagemaker_session=sagemaker_session, image_uri=IMAGE_URI, )

Sisendpunkti faili (inference.py) mõistmine

Parameeter enter_point osutab Pythoni failile nimega inference.py. See sisestuspunkt määratleb mudeli laadimise, sisendi eeltöötluse, ennustusloogika ja väljundi järeltöötluse. See täiendab ML-mudeli teeninduskoodi eelehitatud PyTorchis SageMakeri süvaõppe konteiner pilt.

Inference.py sisaldab järgmisi funktsioone. Meie näites rakendame model_fn, input_fn, predict_fn ja output_fn funktsioonid alistada Vaikimisi PyTorchi järelduste töötleja.

  1. model_fn: võtab kataloogi, mis sisaldab järelduskujutises staatilisi mudeli kontrollpunkte. Avab ja laadib mudeli määratud teelt ning tagastab PyTorchi mudeli.
  2. input_fn: võtab sisendiks sissetuleva päringu kasuliku koormuse (request_body) ja sissetuleva päringu sisutüübi (päringu_sisu tüüp). Tegeleb andmete dekodeerimisega. Seda funktsiooni tuleb kohandada vastavalt sellele, millist sisendit mudel ootab.
  3. predict_fn: kutsub välja mudeli input_fn deserialiseeritud andmetel. Teostab laaditud ML-mudeliga deserialiseeritud objekti ennustuse.
  4. output_fn: seriaaliseerib ennustuse tulemuse soovitud vastuse sisutüübiks. Teisendab funktsioonist expect_fn saadud ennustused JSON-, CSV- või NPY-vormingusse.

5. samm: SageMakeri partii teisendustöö käivitamine

Selle näite puhul saame ML-i järelduste tulemused SageMakeri partii teisendustöö kaudu. Pakettteisendustööd on kõige kasulikumad siis, kui tahame andmehulkadest ühe korra järeldusi saada, ilma et oleks vaja püsivat lõpp-punkti. Me instantseerime a sagemaker.transformer.Transformer objekt SageMakeri partii teisendustööde loomiseks ja nendega suhtlemiseks.

transformer = model.transformer(instance_type=INSTANCE_TYPE, instance_count=INSTANCE_COUNT )
transformer.transform(data=DATA_PATH, data_type="S3Prefix", content_type="application/x-image", wait=True )

Vaadake dokumentatsiooni partii teisendustöö loomise kohta aadressil LooTransformJob.

6. samm: testitulemuste visualiseerimine

Kui SageMakeri partii teisendustöö on lõppenud, saame laadida ML-i järelduste väljundid Amazon S3-st. Selleks navigeerige lehele AWS-i juhtimiskonsool ja otsige Amazon SageMaker. Vasakul paneelil all JäreldusVt Partei teisendamise tööd.

Pärast valimist Partii teisendus, vaadake veebilehte, kus on loetletud kõik SageMakeri pakkteisendustööd. Saame vaadata oma viimase töö edenemist.

Esiteks on töö olek „Inprogress”. Kui see on tehtud, vaadake oleku muutmist olekuks Lõpetatud.

Kui olek on märgitud lõpetatuks, saame tulemuste vaatamiseks klõpsata tööl. See veebileht sisaldab töö kokkuvõtet, sealhulgas just teostatud töö konfiguratsioone.

alla Väljundandmete konfiguratsioon, näeme S3 väljundteed. Siit leiame oma ML-i järelduse väljundi.

Valige S3 väljundtee ja vaadake meie väljundandmetega faili [image_name].[file_type].out. Meie väljundfail sisaldab vastenduste loendit. Näidisväljund:

[ { "boxes": [ [ 214.32322692871094, 192.18418884277344, 830.3932495117188, 521.6996459960938 ], [ 235.6244354248047, 301.3315734863281, 253.6448516845703, 312.3525695800781 ], [ 183.92031860351562, 291.7759704589844, 207.28196716308594, 312.1448669433594 ], ], "labels": [ 3, 3, 9, ], "scores": [ 0.8823906183242798, 0.7710548639297485, 0.4969744384288788, ] }
]

Nende ennustuste visualiseerimiseks lugesime esmalt oma trafo objekti väljundtee.

def get_output_from_s3(s3uri, file_name): parsed_url = urlparse(s3uri) bucket_name = parsed_url.netloc prefix = parsed_url.path[1:] s3 = boto3.resource('s3') obj = s3.Object(bucket_name, '{}/{}'.format(prefix, file_name)) return obj.get()["Body"].read().decode('utf-8') # Output path from Batch Transform job
output_path = transformer.output_path # Get the output file from S3
predictions = get_output_from_s3(output_path, "car.jpg.out")

Järgmisena töötleme seda väljundfaili ja visualiseerime oma ennustused. Allpool täpsustame oma usaldusläve. Klasside nimekirja saame aadressilt COCO andmestiku objektide kaardistamine. Järeldamise ajal nõuab mudel ainult sisendtensoreid ja tagastab järeltöödeldud ennustused loendina [Dikt[tensor]], üks iga sisendpildi jaoks. Dicti väljad on järgmised, kus N on tuvastamiste arv:

  1. kastid (FloatTensor[N, 4]): prognoositud kastid [x1, y1, x2, y2] formaadis, koos 0 <= x1 < x2 <= W and 0 <= y1 < y2 <= H, Kus W on pildi laius ja H on pildi kõrgus
  2. sildid (Int64Tensor[N]): iga tuvastamise ennustatud sildid
  3. hinded (Tensor[N]): iga tuvastamise ennustusskoorid

Väljundi kohta lisateabe saamiseks vaadake PyTorchi kiirem R-CNN FPN dokumentatsioon.

Mudeli väljund sisaldab vastavate usaldusskooridega piirdekaste. Saame optimeerida valepositiivsete kuvamist, eemaldades piirdekastid, mille puhul mudel pole kindel. Järgmised koodilõigud töötlevad ennustusi väljundfailis ja joonistavad ennustustele piirdekastid, kus skoor on üle meie usaldusläve. Seadsime tõenäosusläve, CONF_THRESH, kuni 75 selle näite puhul.

def procress_batch_transform_output(predictions): predictions = eval(predictions) for pred in predictions[1:]: pred = pred[0] boxes = np.array(pred["boxes"]) labels = np.array(pred["labels"]) scores = np.array(pred["scores"]) scores_idx = scores >= CONF_THRESH boxes_meet = boxes[scores_idx, :] labels_meet = labels[scores_idx] scores_meet = scores[scores_idx] labels_str = [CLASSES[i] for i in labels_meet] # Return a tuple containing labels, label index, score, and bounding box processed_predictions = list(zip(labels_str, labels_meet, scores_meet, boxes_meet)) return processed_predictions def visualize_batch_transform_output(input_image, processed_predictions): # read input image from computer img = read_image(input_image) for label, label_index, score, box in processed_predictions: label = label + ", score: " + str(round(score, 2)) # draw bounding box and fill color box = torch.tensor(box) box = box.unsqueeze(0) img = draw_bounding_boxes(img, box, width=5,labels=[label], font_size=16) # transform this image to PIL image img = torchvision.transforms.ToPILImage()(img) # display output img.show() # Process the predictions in the output file
processed_predictions = procress_batch_transform_output(predictions)
visualize_batch_transform_output("car.jpg", processed_predictions)

Lõpuks visualiseerime need kaardistused, et mõista oma väljundit.

märkused: kui pilti teie märkmikus ei kuvata, leidke see JupyterLabi vasakus servas olevast kataloogipuust ja avage see sealt.

Näidiskoodi käivitamine

Täieliku töönäite saamiseks kloonige kood faili amazon-sagemaker-examples GitHub ja käivitage rakud create_pytorch_model_sagemaker.ipynb märkmik.

Järeldus

Selles ajaveebi postituses tutvustasime täielikku näidet ML-i järelduste tegemisest PyTorch Model Zoo objektituvastusmudeli abil, kasutades SageMakeri partii teisendust. Käsitlesime Faster R-CNN objektide tuvastamise mudeli kaalude laadimist, nende salvestamist S3 ämbrisse, sisestuspunkti faili kirjutamist ja PyTorchModel API põhiparameetrite mõistmist. Lõpuks juurutasime mudeli ja tegime ML-mudeli järelduse, visualiseerisime mudeli väljundit ja õppisime tulemusi tõlgendama.


Autoritest

Dipika Khullar on ML-i insener Amazon ML Solutions Lab. Ta aitab klientidel integreerida ML-lahendusi nende äriprobleemide lahendamiseks. Viimasel ajal on ta loonud meediaklientidele koolitus- ja järeldustorusid ning turunduse ennustavaid mudeleid.

Marcelo Aberle on AWS AI organisatsioonis ML insener. Ta juhib MLOpsi jõupingutusi Amazon ML Solutions Lab, aidates klientidel kavandada ja juurutada skaleeritavaid ML-süsteeme. Tema missiooniks on suunata kliente nende ettevõtte ML-teekonnal ja kiirendada nende ML-teed tootmiseni.

Ninad Kulkarni on rakendusteadlane Amazon ML Solutions Lab. Ta aitab klientidel kasutusele võtta ML ja AI, luues lahendusi nende äriprobleemide lahendamiseks. Viimasel ajal on ta loonud ennustavaid mudeleid spordi-, autotööstuse ja meedia klientidele.

Yash Shah on teadusjuht Amazon ML Solutions Lab. Tema ja tema rakendusteadlastest ja ML-i inseneridest koosnev meeskond töötavad mitmesuguste ML-i kasutusjuhtudega tervishoiust, spordist, autotööstusest ja tootmisest.

Ajatempel:

Veel alates AWS-i masinõpe