Ustvarite modele Amazon SageMaker z uporabo PyTorch Model Zoo PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Ustvarite modele Amazon SageMaker z uporabo PyTorch Model Zoo

Uvajanje visokokakovostnih, usposobljenih modelov strojnega učenja (ML) za izvajanje paketnega ali sprotnega sklepanja je ključnega pomena za zagotavljanje vrednosti strankam. Vendar pa je postopek eksperimentiranja z ML lahko dolgočasen – obstaja veliko pristopov, ki zahtevajo veliko časa za izvedbo. Zato vnaprej usposobljeni modeli ML, kot so tisti, ki so na voljo v PyTorch Model Zoo so tako koristne. Amazon SageMaker zagotavlja poenoten vmesnik za eksperimentiranje z različnimi modeli ML, PyTorch Model Zoo pa nam omogoča preprosto zamenjavo naših modelov na standardiziran način.

Ta objava v spletnem dnevniku prikazuje, kako izvajati sklepanje ML z uporabo modela zaznavanja objektov iz PyTorch Model Zoo znotraj SageMakerja. Vnaprej usposobljeni modeli ML iz PyTorch Model Zoo so že pripravljeni in jih je mogoče preprosto uporabiti kot del aplikacij ML. Nastavitev teh modelov ML kot končne točke SageMaker oz Paketno preoblikovanje SageMaker delo za spletno ali nespletno sklepanje je enostavno s koraki, opisanimi v tej objavi v spletnem dnevniku. Uporabili bomo a Hitrejši R-CNN model zaznavanja objektov za predvidevanje mejnih okvirjev za vnaprej določene razrede objektov.

Sprehodimo se skozi primer od konca do konca, od nalaganja uteži modela za zaznavanje objektov Faster R-CNN do njihovega shranjevanja v Preprosta storitev shranjevanja Amazon (Amazon S3) vedro ter za pisanje datoteke vstopne točke in razumevanje ključnih parametrov v API-ju PyTorchModel. Nazadnje bomo uvedli model ML, izvedli sklepanje o njem z uporabo SageMaker Batch Transform ter pregledali izhod modela ML in se naučili interpretirati rezultate. To rešitev je mogoče uporabiti za kateri koli drug vnaprej usposobljen model v PyTorch Model Zoo. Za seznam razpoložljivih modelov glejte Dokumentacija PyTorch Model Zoo.

Pregled rešitev

Ta objava v spletnem dnevniku bo vodila skozi naslednje korake. Za celotno delovno različico vseh korakov glejte create_pytorch_model_sagemaker.ipynb

  • 1. korak: Nastavitev
  • 2. korak: Nalaganje modela ML iz PyTorch Model Zoo
  • 3. korak Shranite in naložite artefakte modela ML v Amazon S3
  • 4. korak: Izdelava skriptov za sklepanje modela ML
  • 5. korak: Zagon opravila paketnega preoblikovanja SageMaker
  • 6. korak: Vizualizacija rezultatov

Diagram arhitekture

Struktura imenika

Kodo za ta blog lahko najdete tukaj GitHub repozitorij. Baza kode vsebuje vse, kar potrebujemo za izdelavo artefaktov modela ML, zagon transformacijskega opravila in vizualizacijo rezultatov.

To je potek dela, ki ga uporabljamo. Vsi naslednji koraki se nanašajo na module v tej strukturi.

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

O sagemaker_torch_model_zoo mapa mora vsebovati inference.py kot datoteko vstopne točke in create_pytorch_model_sagemaker.ipynb za nalaganje in shranjevanje uteži modela, ustvarjanje objekta modela SageMaker in na koncu to posredovanje v opravilo paketnega preoblikovanja SageMaker. Če želite prenesti svoje lastne modele ML, spremenite poti v razdelku Korak 1: nastavitev v prenosnem računalniku in naložite nov model v razdelku Korak 2: Nalaganje modela ML iz razdelka PyTorch Model Zoo. Ostali naslednji koraki spodaj bi ostali enaki.

1. korak: Nastavitev

Vloge IAM

SageMaker izvaja operacije na infrastrukturi, ki jo upravlja SageMaker. SageMaker lahko izvaja samo dejanja, ki so dovoljena, kot je opredeljeno v priloženi vlogi izvajanja IAM prenosnika za SageMaker. Za podrobnejšo dokumentacijo o ustvarjanju vlog IAM in upravljanju dovoljenj IAM glejte Dokumentacija o vlogah AWS SageMaker. Lahko ustvarimo novo vlogo ali pa dobimo SageMaker (Studio) prenosnikprivzeta izvajalska vloga z izvajanjem naslednjih vrstic kode:

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

Zgornja koda dobi izvršilno vlogo SageMaker za primerek prenosnega računalnika. To je vloga IAM, ki smo jo ustvarili za naš primerek prenosnika SageMaker ali SageMaker Studio.

Parametri, ki jih lahko konfigurira uporabnik

Tukaj so vsi konfigurabilni parametri, ki so potrebni za gradnjo in zagon našega posla paketnega preoblikovanja SageMaker:

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. korak: Nalaganje modela ML iz PyTorch Model Zoo

Nato podamo model zaznavanja objektov iz PyTorch Model Zoo in shranimo njegove uteži modela ML. Običajno shranimo model PyTorch s končnico datoteke .pt ali .pth. Spodnji delček kode prenese vnaprej pripravljen model Faster R-CNN ResNet50 ML iz PyTorch Model Zoo:

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

Paketno preoblikovanje SageMaker kot vhod zahteva nekaj uteži modela, zato bomo predhodno usposobljeni model ML shranili kot model.pt. Če želimo naložiti model po meri, lahko namesto tega shranimo uteži modela iz drugega modela PyTorch kot model.pt.

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

3. korak: Shranite in naložite artefakte modela ML v Amazon S3

Ker bomo za sklepanje ML uporabljali SageMaker, moramo uteži modela naložiti v vedro S3. To lahko storimo z naslednjimi ukazi ali s prenosom in preprostim vlečenjem in spuščanjem datoteke neposredno v S3. Naslednji ukazi bodo najprej stisnili skupino datotek znotraj model.pt v arhiv in kopirajte uteži modela iz našega lokalnega stroja v vedro S3.

Opombe: Če želite zagnati naslednje ukaze, morate imeti AWS vmesnik ukazne vrstice (AWS CLI) nameščen.

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

Nato kopiramo našo vhodno sliko v S3. Spodaj je celotna pot S3 za sliko.

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

To sliko lahko kopiramo v S3 z drugim ukazom aws s3 cp.

aws s3 cp cars.jpg $car_image_path

4. korak: Izdelava skriptov za sklepanje modela ML

Zdaj bomo pregledali našo datoteko vstopne točke, inference.py modul. Z razredom PyTorchModel lahko razmestimo model PyTorch, usposobljen zunaj SageMakerja. Najprej instanciramo objekt PyTorchModelZoo. Nato bomo izdelali datoteko vstopne točke inference.py za izvajanje sklepanja ML z uporabo paketne transformacije SageMaker na vzorčnih podatkih, ki gostujejo v Amazon S3.

Razumevanje predmeta PyTorchModel

O PyTorchModel znotraj API-ja SageMaker Python nam omogoča izvajanje sklepanja ML z uporabo našega prenesenega artefakta modela.

Za zagon razreda PyTorchModel moramo razumeti naslednje vhodne parametre:

  • name: ime modela; priporočamo uporabo imena modela + datuma in časa ali naključnega niza + datuma in časa za edinstvenost.
  • model_data: URI S3 pakiranega artefakta modela ML.
  • entry_point: Uporabniško definirana datoteka Python, ki jo uporablja slika Docker sklepanja za definiranje obdelovalcev za dohodne zahteve. Koda definira nalaganje modela, predprocesiranje vnosa, logiko napovedovanja in naknadno obdelavo izhoda.
  • framework_version: mora biti nastavljen na različico 1.2 ali višjo, da se omogoči samodejno ponovno pakiranje modela PyTorch.
  • source_dir: Imenik datoteke entry_point.
  • role: Vloga IAM za pošiljanje zahtev storitev AWS.
  • image_uri: uporabite to sliko vsebnika Amazon ECR Docker kot osnovo za računalniško okolje modela ML.
  • sagemaker_session: Seja SageMaker.
  • py_version: uporabljena različica Python

Naslednji delček kode instancira razred PyTorchModel za izvajanje sklepanja z uporabo predhodno usposobljenega modela PyTorch:

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

Razumevanje datoteke vstopne točke (inference.py)

Parameter entry_point kaže na datoteko Python z imenom inference.py. Ta vstopna točka definira nalaganje modela, predprocesiranje vnosa, logiko predvidevanja in naknadno obdelavo izhoda. Dopolnjuje kodo za serviranje modela ML v vnaprej pripravljenem PyTorchu Vsebnik za globoko učenje SageMaker sliko.

Inference.py bo vseboval naslednje funkcije. V našem primeru izvajamo model_fn, input_fn, predict_fn in output_fn funkcije za preglasitev privzeti upravljalnik sklepanja PyTorch.

  1. model_fn: Prevzame imenik, ki vsebuje statične kontrolne točke modela v sklepni sliki. Odpre in naloži model z določene poti ter vrne model PyTorch.
  2. input_fn: kot vhod sprejme vsebino dohodne zahteve (request_body) in vrsto vsebine dohodne zahteve (request_content_type). Upravlja dekodiranje podatkov. To funkcijo je treba prilagoditi vhodu, ki ga pričakuje model.
  3. predict_fn: pokliče model na podatkih, deserializiranih v input_fn. Izvaja predvidevanje deserializiranega objekta z naloženim modelom ML.
  4. output_fn: Serializira rezultat predvidevanja v želeno vrsto vsebine odgovora. Pretvori predvidevanja, pridobljena iz funkcije predict_fn, v formate JSON, CSV ali NPY.

5. korak: Zagon opravila paketnega preoblikovanja SageMaker

Za ta primer bomo pridobili rezultate sklepanja ML prek opravila paketnega preoblikovanja SageMaker. Opravila paketnega preoblikovanja so najbolj uporabna, kadar želimo enkrat pridobiti sklepe iz naborov podatkov, ne da bi bila potrebna trajna končna točka. Instanciramo a sagemaker.transformer.Transformer objekt za ustvarjanje in interakcijo s opravili paketnega preoblikovanja SageMaker.

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
                      )

Oglejte si dokumentacijo za ustvarjanje opravila paketnega preoblikovanja na CreateTransformJob.

6. korak: Vizualizacija rezultatov

Ko se opravilo paketnega preoblikovanja SageMaker konča, lahko naložimo izhode sklepanja ML iz Amazon S3. Za to se pomaknite do Konzola za upravljanje AWS in poiščite Amazon SageMaker. Na levi plošči pod Sklepanje, Glej Opravila paketnega preoblikovanja.

Ustvarite modele Amazon SageMaker z uporabo PyTorch Model Zoo PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Po izbiri Paketno preoblikovanje, si oglejte spletno stran s seznamom vseh opravil paketnega preoblikovanja SageMaker. Ogledamo si lahko napredek našega zadnjega izvajanja opravila.

Ustvarite modele Amazon SageMaker z uporabo PyTorch Model Zoo PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Prvič, opravilo bo imelo status »V teku«. Ko je končano, si oglejte spremembo stanja v Dokončano.

Ustvarite modele Amazon SageMaker z uporabo PyTorch Model Zoo PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Ko je stanje označeno kot dokončano, lahko kliknemo opravilo in si ogledamo rezultate. Ta spletna stran vsebuje povzetek opravila, vključno s konfiguracijami opravila, ki smo ga pravkar izvedli.

Ustvarite modele Amazon SageMaker z uporabo PyTorch Model Zoo PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Pod Konfiguracija izhodnih podatkov, bomo videli izhodno pot S3. Tukaj bomo našli naše rezultate sklepanja ML.

Ustvarite modele Amazon SageMaker z uporabo PyTorch Model Zoo PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Izberite izhodno pot S3 in si oglejte datoteko [image_name].[file_type].out z našimi izhodnimi podatki. Naša izhodna datoteka bo vsebovala seznam preslikav. Primer izhoda:

[
  {
    "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,
    ]
  }
]

Da bi vizualizirali te napovedi, najprej preberemo izhodno pot iz našega objekta transformatorja.

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

Nato obdelamo to izhodno datoteko in vizualiziramo naše napovedi. Spodaj navajamo naš prag zaupanja. Seznam razredov dobimo od Preslikava objektov nabora podatkov COCO. Med sklepanjem model zahteva samo vhodne tenzorje in vrne naknadno obdelane napovedi kot Seznam[Dikt[Tenzor]], enega za vsako vhodno sliko. Polja Dict so naslednja, kjer je N število zaznav:

  1. polja (FloatTensor[N, 4]): predvidena polja v [x1, y1, x2, y2] format, z 0 <= x1 < x2 <= W and 0 <= y1 < y2 <= H, Kjer W je širina slike in H je višina slike
  2. oznake (Int64Tensor[N]): predvidene oznake za vsako zaznavo
  3. rezultati (Tensor[N]): rezultati napovedi za vsako zaznavo

Za več podrobnosti o izhodu glejte Dokumentacija PyTorch Faster R-CNN FPN.

Izhod modela vsebuje omejevalne okvire z ustreznimi ocenami zaupanja. Optimiziramo lahko prikaz lažno pozitivnih rezultatov tako, da odstranimo omejevalne okvire, za katere model ni prepričan. Naslednji delčki kode obdelajo napovedi v izhodni datoteki in narišejo omejevalne okvire na napovedih, kjer je rezultat nad našim pragom zaupanja. Postavili smo verjetnostni prag, CONF_THRESH, na 75 za ta primer.

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)

Na koncu vizualiziramo te preslikave, da razumemo naš rezultat.

Ustvarite modele Amazon SageMaker z uporabo PyTorch Model Zoo PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Opombe: če se slika ne prikaže v vašem zvezku, jo poiščite v drevesu imenikov na levi strani JupyterLaba in jo odprite tam.

Izvajanje vzorčne kode

Za popoln delujoč primer klonirajte kodo v amazon-sagemaker-primeri GitHub in zaženite celice v create_pytorch_model_sagemaker.ipynb zvezek.

zaključek

V tej objavi v spletnem dnevniku smo predstavili primer izvajanja sklepanja ML od konca do konca z uporabo modela zaznavanja objektov iz PyTorch Model Zoo z uporabo paketne transformacije SageMaker. Pokrivali smo nalaganje uteži modela Faster R-CNN za odkrivanje objektov, njihovo shranjevanje v vedro S3, pisanje datoteke vstopne točke in razumevanje ključnih parametrov v API-ju PyTorchModel. Nazadnje smo razmestili model in izvedli sklepanje o modelu ML, vizualizirali izhod modela in se naučili interpretirati rezultate.


O avtorjih

Ustvarite modele Amazon SageMaker z uporabo PyTorch Model Zoo PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Dipika Khullar je inženir ML v Amazon ML Solutions Lab. Strankam pomaga pri integraciji rešitev ML za reševanje njihovih poslovnih težav. Pred kratkim je zgradila cevovode za usposabljanje in sklepanje za medijske stranke ter napovedne modele za trženje.

Ustvarite modele Amazon SageMaker z uporabo PyTorch Model Zoo PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Marcelo Aberle je inženir ML v organizaciji AWS AI. Vodi prizadevanja MLOps pri Amazon ML Solutions Lab, ki strankam pomaga oblikovati in izvajati razširljive sisteme ML. Njegovo poslanstvo je usmerjati stranke na njihovi poti ML v podjetju in pospešiti njihovo pot ML do proizvodnje.

Ustvarite modele Amazon SageMaker z uporabo PyTorch Model Zoo PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Ninad Kulkarni je uporabni znanstvenik v Amazon ML Solutions Lab. Strankam pomaga pri sprejemanju ML in AI z gradnjo rešitev za reševanje njihovih poslovnih težav. Pred kratkim je izdelal napovedne modele za športne, avtomobilske in medijske stranke.

Ustvarite modele Amazon SageMaker z uporabo PyTorch Model Zoo PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Jaš šah je vodja znanosti v Amazon ML Solutions Lab. On in njegova ekipa uporabnih znanstvenikov in inženirjev ML delajo na različnih primerih uporabe ML iz zdravstva, športa, avtomobilizma in proizvodnje.

Časovni žig:

Več od Strojno učenje AWS