Hozzon létre Amazon SageMaker modelleket a PyTorch Model Zoo PlatoBlockchain Data Intelligence segítségével. Függőleges keresés. Ai.

Hozzon létre Amazon SageMaker modelleket a PyTorch Model Zoo segítségével

A kiváló minőségű, betanított gépi tanulási (ML) modellek üzembe helyezése kötegelt vagy valós idejű következtetés végrehajtásához kritikus eleme az ügyfeleknek való értékteremtésnek. Az ML kísérletezési folyamat azonban fárasztó lehet – sok olyan megközelítés létezik, amelyek megvalósítása jelentős időt igényel. Ez az oka annak, hogy az előképzett ML modellek, mint amilyeneket a PyTorch Modell Állatkert olyan segítőkészek. Amazon SageMaker egységes felületet biztosít a különböző ML modellekkel való kísérletezéshez, a PyTorch Model Zoo pedig lehetővé teszi modelljeink egyszerű, szabványosított cseréjét.

Ez a blogbejegyzés bemutatja, hogyan lehet ML következtetést levonni a SageMaker PyTorch Model Zoo objektumészlelési modelljével. A PyTorch Model Zoo előre betanított ML modelljei készen állnak, és könnyen használhatók az ML alkalmazások részeként. Ezen ML modellek beállítása SageMaker végpontként ill SageMaker Batch Transform Az ebben a blogbejegyzésben ismertetett lépésekkel egyszerű az online vagy offline következtetések elkészítése. Használjuk a Gyorsabb R-CNN objektumészlelési modell az előre meghatározott objektumosztályok határolókereteinek előrejelzésére.

Végig járunk egy példán, a Faster R-CNN objektumészlelési modell súlyainak betöltésétől egészen a mentésükig. Amazon Simple Storage Service (Amazon S3) vödör, valamint egy belépési pont fájl írása és a PyTorchModel API kulcsparamétereinek megértése. Végül telepítjük az ML-modellt, következtetéseket vonunk le rá a SageMaker Batch Transform segítségével, megvizsgáljuk az ML-modell kimenetét, és megtanuljuk az eredmények értelmezését. Ez a megoldás a PyTorch Model Zoo bármely más előre betanított modelljére alkalmazható. Az elérhető modellek listáját lásd a PyTorch Model Zoo dokumentáció.

Megoldás áttekintése

Ez a blogbejegyzés a következő lépéseket mutatja be. Az összes lépés teljes működő verzióját lásd create_pytorch_model_sagemaker.ipynb

  • 1. lépés: Beállítás
  • 2. lépés: ML-modell betöltése a PyTorch Model Zoo-ból
  • 3. lépés Mentse el és töltse fel az ML modell műtermékeit az Amazon S3-ra
  • 4. lépés: ML-modell-következtetési szkriptek létrehozása
  • 5. lépés: SageMaker kötegelt átalakítási feladat indítása
  • 6. lépés: Az eredmények megjelenítése

Építészeti ábra

Könyvtárstruktúra

A blog kódja itt található GitHub tárház. A kódbázis mindent tartalmaz, amire szükségünk van az ML modell melléktermékeinek felépítéséhez, az átalakítási feladat elindításához és az eredmények megjelenítéséhez.

Ez az általunk használt munkafolyamat. A következő lépések mindegyike ennek a szerkezetnek a moduljaira vonatkozik.

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

A sagemaker_torch_model_zoo mappának tartalmaznia kell inference.py belépési pont fájlként, és a create_pytorch_model_sagemaker.ipynb a modellsúlyok betöltéséhez és mentéséhez, egy SageMaker modellobjektum létrehozásához, és végül átadja azt egy SageMaker kötegelt átalakítási feladatnak. Saját ML-modellek létrehozásához módosítsa az útvonalakat a notebook 1. lépés: beállítás szakaszában, és töltsön be egy új modellt a 2. lépés: ML-modell betöltése a PyTorch Model Zoo szakaszból. Az alábbi lépések többi része változatlan marad.

1. lépés: Beállítás

IAM szerepek

A SageMaker műveleteket hajt végre a SageMaker által kezelt infrastruktúrán. A SageMaker csak a jegyzetfüzethez tartozó SageMaker IAM-végrehajtási szerepkörében meghatározott műveleteket tudja végrehajtani. Az IAM-szerepkörök létrehozásával és az IAM-engedélyek kezelésével kapcsolatos részletesebb dokumentációért tekintse meg a AWS SageMaker szerepek dokumentációja. Létrehozhatunk új szerepet, vagy megszerezhetjük a SageMaker (Stúdió) notebookalapértelmezett végrehajtási szerepköre a következő kódsorok futtatásával:

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

A fenti kód megkapja a SageMaker végrehajtási szerepet a notebook példányhoz. Ez az IAM szerepkör, amelyet a SageMaker vagy a SageMaker Studio notebook példányunkhoz hoztunk létre.

Felhasználó által konfigurálható paraméterek

Itt található az összes konfigurálható paraméter, amely a SageMaker kötegelt átalakítási munkánk felépítéséhez és elindításához szükséges:

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. lépés: ML-modell betöltése a PyTorch Model Zoo-ból

Ezután megadunk egy objektumészlelési modellt a PyTorch Model Zoo-ból, és mentjük az ML modell súlyait. A PyTorch-modellt általában .pt vagy .pth fájlkiterjesztéssel mentjük el. Az alábbi kódrészlet letölt egy előre betanított Faster R-CNN ResNet50 ML modellt a PyTorch Model Zoo-ból:

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

A SageMaker kötegelt transzformációja bemenetként igényel néhány modellsúlyt, ezért az előre betanított ML modellt model.pt néven mentjük el. Ha egyéni modellt szeretnénk betölteni, akkor a modell súlyait egy másik PyTorch modellből modell.pt néven menthetjük el.

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

3. lépés: Mentse el és töltse fel az ML modell műtermékeit az Amazon S3-ba

Mivel a SageMaker-t fogjuk használni az ML-következtetéshez, fel kell töltenünk a modell súlyait egy S3 tárolóba. Ezt megtehetjük a következő parancsokkal, vagy a fájl letöltésével és egyszerűen húzásával közvetlenül az S3-ba. A következő parancsok először tömörítik a fájlok csoportját model.pt egy tarballba, és másold át a modellsúlyokat a helyi gépünkről az S3 vödörbe.

Megjegyzések: A következő parancsok futtatásához rendelkeznie kell a AWS parancssori interfész (AWS CLI) telepítve.

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

Ezután átmásoljuk a bemeneti képünket az S3-ba. Alább látható a kép teljes S3 elérési útja.

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

Ezt a képet átmásolhatjuk S3-ba egy másik aws s3 cp paranccsal.

aws s3 cp cars.jpg $car_image_path

4. lépés: ML-modell-következtetési szkriptek létrehozása

Most átnézzük a belépési pont fájlunkat, inference.py modul. A SageMakeren kívül betanított PyTorch-modellt a PyTorchModel osztály használatával telepíthetünk. Először is példányosítjuk a PyTorchModelZoo objektumot. Ezután létrehozunk egy inference.py belépési pont fájlt, amely ML következtetést hajt végre a SageMaker kötegelt transzformációjával az Amazon S3-ban tárolt mintaadatokon.

A PyTorchModel objektum megértése

A PyTorchModel osztály a SageMaker Python API-n belül lehetővé teszi számunkra, hogy ML következtetést hajtsunk végre a letöltött modelltermékünk segítségével.

A PyTorchModel osztály elindításához meg kell értenünk a következő bemeneti paramétereket:

  • name: Modell név; az egyediség érdekében javasoljuk a modellnév + dátum és idő, vagy egy véletlenszerű karakterlánc + dátum és időpont használatát.
  • model_data: A csomagolt ML modell melléktermékének S3 URI-ja.
  • entry_point: Felhasználó által definiált Python-fájl, amelyet a következtetés Docker-képfájlja használ a bejövő kérések kezelőinek meghatározásához. A kód meghatározza a modell betöltését, a bemeneti előfeldolgozást, az előrejelzési logikát és a kimeneti utófeldolgozást.
  • framework_version: Az automatikus PyTorch-modell-újracsomagolás engedélyezéséhez 1.2-es vagy újabb verzióra kell állítani.
  • source_dir: A belépési_pont fájl könyvtára.
  • role: IAM-szerep az AWS-szolgáltatáskérésekhez.
  • image_uri: Használja ezt az Amazon ECR Docker tárolóképet az ML modell számítási környezetének alapjaként.
  • sagemaker_session: A SageMaker munkamenet.
  • py_version: A használandó Python verzió

A következő kódrészlet példányosítja a PyTorchModel osztályt, hogy következtetéseket hajtson végre az előre betanított PyTorch modell segítségével:

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

A belépési pont fájl (inference.py) értelmezése

Az entry_point paraméter egy nevű Python-fájlra mutat inference.py. Ez a belépési pont határozza meg a modell betöltését, a bemeneti előfeldolgozást, az előrejelzési logikát és a kimeneti utófeldolgozást. Kiegészíti az ML modell kiszolgáló kódját az előre beépített PyTorch-ban SageMaker Deep Learning Container kép.

Inference.py a következő funkciókat fogja tartalmazni. Példánkban megvalósítjuk a model_fn, input_fn, predict_fn és a output_fn funkciók felülbírálásához alapértelmezett PyTorch következtetéskezelő.

  1. model_fn: Bevesz egy könyvtárat, amely statikus modellellenőrző pontokat tartalmaz a következtetési képben. Megnyitja és betölti a modellt egy megadott útvonalról, és visszaad egy PyTorch-modellt.
  2. input_fn: Bemenetként veszi a bejövő kérés hasznos terhét (request_body) és a bejövő kérés tartalomtípusát (request_content_type). Kezeli az adatok dekódolását. Ezt a funkciót a modell által elvárt bemenethez kell igazítani.
  3. predict_fn: Modellt hív meg az input_fn paraméterben deszerializált adatokon. Előrejelzést hajt végre a deszerializált objektumon a betöltött ML-modellel.
  4. output_fn: Az előrejelzés eredményét a kívánt választartalom-típusba rendezi. Apredit_fn függvényből kapott előrejelzéseket JSON, CSV vagy NPY formátumokká alakítja.

5. lépés: SageMaker kötegelt átalakítási feladat indítása

Ebben a példában ML következtetési eredményeket kapunk egy SageMaker kötegelt átalakítási feladaton keresztül. A kötegelt átalakítási feladatok akkor a leghasznosabbak, ha egyszer szeretnénk következtetéseket levonni az adatkészletekből anélkül, hogy állandó végpontra lenne szükség. Példányosítjuk a sagemaker.transformer.Transformer objektum a SageMaker kötegelt átalakítási feladatok létrehozásához és interakciójához.

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
                      )

Tekintse meg a kötegelt átalakítási feladat létrehozásának dokumentációját a címen CreateTransformJob.

6. lépés: A teszteredmények megjelenítése

Miután a SageMaker kötegelt átalakítási feladat befejeződött, betölthetjük az ML következtetés kimeneteit az Amazon S3-ból. Ehhez navigáljon a AWS felügyeleti konzol és keresse meg az Amazon SageMaker kifejezést. A bal oldali panelen, alatta KövetkeztetésLásd: Kötegelt átalakítási feladatok.

Hozzon létre Amazon SageMaker modelleket a PyTorch Model Zoo PlatoBlockchain Data Intelligence segítségével. Függőleges keresés. Ai.

A kiválasztás után Kötegelt átalakítás, tekintse meg az összes SageMaker kötegelt átalakítási feladatot felsoroló weboldalt. Megtekinthetjük a legutóbbi munkánk előrehaladását.

Hozzon létre Amazon SageMaker modelleket a PyTorch Model Zoo PlatoBlockchain Data Intelligence segítségével. Függőleges keresés. Ai.

Először is, a munka állapota „Folyamatban van”. Ha ez megtörtént, tekintse meg az állapotot Befejezve.

Hozzon létre Amazon SageMaker modelleket a PyTorch Model Zoo PlatoBlockchain Data Intelligence segítségével. Függőleges keresés. Ai.

Ha az állapotot befejezettnek jelöljük, a munkára kattintva megtekinthetjük az eredményeket. Ez a weboldal a munka összefoglalóját tartalmazza, beleértve az éppen végrehajtott munka konfigurációit.

Hozzon létre Amazon SageMaker modelleket a PyTorch Model Zoo PlatoBlockchain Data Intelligence segítségével. Függőleges keresés. Ai.

Alatt Kimeneti adatok konfigurációja, egy S3 kimeneti útvonalat fogunk látni. Itt találjuk az ML következtetés kimenetünket.

Hozzon létre Amazon SageMaker modelleket a PyTorch Model Zoo PlatoBlockchain Data Intelligence segítségével. Függőleges keresés. Ai.

Válassza ki az S3 kimeneti útvonalát, és nézzen meg egy [image_name].[file_type].out fájlt a kimeneti adatainkkal. A kimeneti fájlunk a leképezések listáját fogja tartalmazni. Példa kimenet:

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

Az előrejelzések megjelenítéséhez először leolvassuk a transzformátor objektumunk kimeneti útvonalát.

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

Ezután feldolgozzuk ezt a kimeneti fájlt, és megjelenítjük előrejelzéseinket. Az alábbiakban megadjuk a bizalmi küszöbünket. Az osztályok listáját a COCO adatkészlet objektum leképezés. A következtetés során a modell csak a bemeneti tenzorokat igényli, és az utólagos feldolgozású előrejelzéseket List[Dict[tenzor]] formájában adja vissza, minden bemeneti képhez egyet. A Dict mezői a következők, ahol N az észlelések száma:

  1. dobozok (FloatTensor[N, 4]): az előre jelzett dobozok [x1, y1, x2, y2] formátumban, azzal 0 <= x1 < x2 <= W and 0 <= y1 < y2 <= H, Ahol W a kép szélessége és H a kép magassága
  2. címkék (Int64Tensor[N]): az egyes észlelések várható címkéi
  3. pontszámok (Tensor[N]): az egyes észlelések előrejelzési pontszámai

A kimenettel kapcsolatos további részletekért lásd a PyTorch gyorsabb R-CNN FPN dokumentáció.

A modell kimenete határoló dobozokat tartalmaz a megfelelő megbízhatósági pontszámokkal. Optimalizálhatjuk a hamis pozitív üzenetek megjelenítését, ha eltávolítjuk azokat a határolókereteket, amelyekben a modell nem biztos. A következő kódrészletek feldolgozzák a kimeneti fájlban lévő előrejelzéseket, és határolókereteket rajzolnak azokra az előrejelzésekre, ahol a pontszám meghaladja a megbízhatósági küszöbünket. Beállítjuk a valószínűségi küszöböt, CONF_THRESH, 75-re ebben a példában.

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)

Végül vizualizáljuk ezeket a leképezéseket, hogy megértsük a kimenetünket.

Hozzon létre Amazon SageMaker modelleket a PyTorch Model Zoo PlatoBlockchain Data Intelligence segítségével. Függőleges keresés. Ai.

Megjegyzések: ha a kép nem jelenik meg a jegyzetfüzetében, keresse meg a JupyterLab bal oldalán található könyvtárfában, és nyissa meg onnan.

A példakód futtatása

A teljes működő példa érdekében klónozza a kódot a amazon-sagemaker-examples GitHub és futtassa a cellákat a create_pytorch_model_sagemaker.ipynb jegyzetfüzet.

Következtetés

Ebben a blogbejegyzésben egy végponttól végpontig terjedő példát mutattunk be az ML következtetés végrehajtására a PyTorch Model Zoo objektumészlelési modelljével a SageMaker kötegelt transzformációjával. Kitértünk a Faster R-CNN objektumészlelési modell súlyainak betöltésére, S3 tárolóba való mentésére, belépési pont fájl írására és a PyTorchModel API kulcsparamétereinek megértésére. Végül telepítettük a modellt és végrehajtottuk az ML-modell-következtetést, megjelenítettük a modell kimenetét, és megtanultuk az eredmények értelmezését.


A szerzőkről

Hozzon létre Amazon SageMaker modelleket a PyTorch Model Zoo PlatoBlockchain Data Intelligence segítségével. Függőleges keresés. Ai.Dipika Khullar ML mérnök a Amazon ML Solutions Lab. Segít az ügyfeleknek az ML megoldások integrálásában üzleti problémáik megoldása érdekében. Legutóbb képzési és következtetési folyamatokat épített ki a médiaügyfelek számára, valamint prediktív modelleket a marketing számára.

Hozzon létre Amazon SageMaker modelleket a PyTorch Model Zoo PlatoBlockchain Data Intelligence segítségével. Függőleges keresés. Ai.Marcelo Aberle ML mérnök az AWS AI szervezetben. Ő vezeti az MLOps erőfeszítéseit Amazon ML Solutions Lab, segítve az ügyfeleket a méretezhető ML rendszerek tervezésében és megvalósításában. Küldetése, hogy eligazítsa az ügyfeleket a vállalati ML útjukon, és felgyorsítsa az ML termelési folyamatot.

Hozzon létre Amazon SageMaker modelleket a PyTorch Model Zoo PlatoBlockchain Data Intelligence segítségével. Függőleges keresés. Ai.Ninad Kulkarni alkalmazott tudós a Amazon ML Solutions Lab. Segít az ügyfeleknek az ML és a mesterséges intelligencia alkalmazásában azáltal, hogy megoldásokat készít üzleti problémáik megoldására. Legutóbb a sport, az autóipar és a média ügyfelei számára épített prediktív modelleket.

Hozzon létre Amazon SageMaker modelleket a PyTorch Model Zoo PlatoBlockchain Data Intelligence segítségével. Függőleges keresés. Ai.Yash Shah tudományos menedzser a Amazon ML Solutions Lab. Alkalmazott tudósokból és ML mérnökökből álló csapatával számos ML felhasználási eseten dolgozik az egészségügyben, a sportban, az autóiparban és a gyártásban.

Időbélyeg:

Még több AWS gépi tanulás