PyTorch Model Zoo PlatoBlockchain Data Intelligence'ı kullanarak Amazon SageMaker modelleri oluşturun. Dikey Arama. Ai.

PyTorch Model Zoo kullanarak Amazon SageMaker modelleri oluşturun

Toplu veya gerçek zamanlı çıkarım gerçekleştirmek için yüksek kaliteli, eğitilmiş makine öğrenimi (ML) modellerini devreye almak, müşterilere değer katmanın kritik bir parçasıdır. Ancak makine öğrenimi deneme süreci sıkıcı olabilir; uygulanması için önemli miktarda zaman gerektiren pek çok yaklaşım vardır. Bu nedenle, burada sağlananlar gibi önceden eğitilmiş makine öğrenimi modelleri PyTorch Modeli Hayvanat Bahçesi çok yardımseverler. Amazon Adaçayı Yapıcı farklı makine öğrenimi modelleriyle denemeler yapmak için birleşik bir arabirim sağlar ve PyTorch Model Hayvanat Bahçesi, modellerimizi standart bir şekilde kolayca değiştirmemize olanak tanır.

Bu blog gönderisi, SageMaker içindeki PyTorch Model Zoo'dan bir nesne algılama modeli kullanarak makine öğrenimi çıkarımının nasıl gerçekleştirileceğini gösterir. PyTorch Model Zoo'daki önceden eğitilmiş ML modelleri hazırdır ve ML uygulamalarının bir parçası olarak kolayca kullanılabilir. Bu makine öğrenimi modellerini bir SageMaker uç noktası olarak ayarlamak veya SageMaker Toplu Dönüştürme Bu blog gönderisinde belirtilen adımlarla çevrimiçi veya çevrimdışı çıkarım yapmak kolaydır. bir kullanacağız Daha hızlı R-CNN önceden tanımlanmış nesne sınıfları için sınırlayıcı kutuları tahmin etmek için nesne algılama modeli.

Daha Hızlı R-CNN nesne algılama modeli ağırlıklarını yüklemekten bunları bir Amazon Basit Depolama Hizmeti (Amazon S3) kova ve bir giriş noktası dosyası yazmak ve PyTorchModel API'sindeki anahtar parametreleri anlamak. Son olarak, ML modelini konuşlandıracağız, SageMaker Batch Transform kullanarak onun üzerinde çıkarımlar yapacağız ve ML modeli çıktısını inceleyeceğiz ve sonuçların nasıl yorumlanacağını öğreneceğiz. Bu çözüm, PyTorch Model Zoo'da önceden eğitilmiş herhangi bir modele uygulanabilir. Mevcut modellerin listesi için bkz. PyTorch Modeli Hayvanat Bahçesi belgeleri.

Çözüme genel bakış

Bu blog gönderisi aşağıdaki adımlardan geçecektir. Tüm adımların tam çalışan versiyonu için bkz. create_pytorch_model_sagemaker.ipynb

  • Adım 1: Kurulum
  • 2. Adım: PyTorch Model Zoo'dan bir makine öğrenimi modeli yükleme
  • 3. Adım Makine öğrenimi modeli yapılarını kaydedin ve Amazon S3'e yükleyin
  • 4. Adım: ML modeli çıkarım betikleri oluşturma
  • 5. Adım: Bir SageMaker toplu dönüştürme işini başlatma
  • 6. Adım: Sonuçları görselleştirme

Mimari diyagram

Dizin yapısı

Bu blogun kodu burada bulunabilir GitHub deposu. Kod tabanı, makine öğrenimi modeli yapıları oluşturmak, dönüştürme işini başlatmak ve sonuçları görselleştirmek için ihtiyacımız olan her şeyi içerir.

Bu, kullandığımız iş akışıdır. Aşağıdaki adımların tümü bu yapıdaki modüllere atıfta bulunacaktır.

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

The sagemaker_torch_model_zoo klasör içermelidir inference.py model ağırlıklarını yüklemek ve kaydetmek, bir SageMaker model nesnesi oluşturmak ve son olarak bunu bir SageMaker toplu dönüştürme işine geçirmek için bir giriş noktası dosyası olarak ve create_pytorch_model_sagemaker.ipynb dosyası olarak. Kendi ML modellerinizi getirmek için not defterinin Adım 1: kurulum bölümündeki yolları değiştirin ve Adım 2: PyTorch Model Zoo bölümünden Adım XNUMX: Bir ML Modeli Yükleme bölümünde yeni bir model yükleyin. Aşağıdaki adımların geri kalanı aynı kalacaktır.

Adım 1: Kurulum

IAM rolleri

SageMaker, işlemleri SageMaker tarafından yönetilen altyapı üzerinde gerçekleştirir. SageMaker, yalnızca not defterinin SageMaker için eşlik eden IAM yürütme rolünde tanımlandığı şekilde izin verilen eylemleri gerçekleştirebilir. IAM rolleri oluşturma ve IAM izinlerini yönetme hakkında daha ayrıntılı belgeler için bkz. AWS SageMaker rol belgeleri. Yeni bir rol oluşturabiliriz veya SageMaker (Stüdyo) not defteriaşağıdaki kod satırlarını çalıştırarak varsayılan yürütme rolü:

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

Yukarıdaki kod, not defteri örneği için SageMaker yürütme rolünü alır. Bu, SageMaker veya SageMaker Studio not defteri örneğimiz için oluşturduğumuz IAM rolüdür.

Kullanıcı tarafından yapılandırılabilen parametreler

SageMaker toplu dönüştürme işimizi oluşturmak ve başlatmak için gereken tüm yapılandırılabilir parametreler şunlardır:

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. Adım: PyTorch Model Zoo'dan bir ML modeli yükleme

Ardından, PyTorch Model Zoo'dan bir nesne algılama modeli belirliyoruz ve ML model ağırlıklarını kaydediyoruz. Tipik olarak, bir PyTorch modelini .pt veya .pth dosya uzantılarını kullanarak kaydederiz. Aşağıdaki kod parçacığı, PyTorch Model Zoo'dan önceden eğitilmiş Faster R-CNN ResNet50 ML modelini indirir:

model = torchvision.models.detection.fasterrcnn_resnet50_fpn(önceden eğitilmiş=Doğru)

SageMaker toplu dönüşümü, girdi olarak bazı model ağırlıkları gerektirir, bu nedenle önceden eğitilmiş makine öğrenimi modelini model.pt olarak kaydedeceğiz. Özel bir model yüklemek istiyorsak, bunun yerine başka bir PyTorch modelindeki model ağırlıklarını model.pt olarak kaydedebiliriz.

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

3. Adım: Makine öğrenimi modeli yapılarını kaydedin ve Amazon S3'e yükleyin

Makine öğrenimi çıkarımı için SageMaker kullanacağımız için model ağırlıklarını bir S3 klasörüne yüklememiz gerekiyor. Bunu aşağıdaki komutları kullanarak veya indirerek ve dosyayı doğrudan S3'e sürükleyip bırakarak yapabiliriz. Aşağıdaki komutlar önce içindeki dosya grubunu sıkıştıracaktır. model.pt bir tarball'a kopyalayın ve model ağırlıklarını yerel makinemizden S3 klasörüne kopyalayın.

not: Aşağıdaki komutları çalıştırmak için, AWS Komut Satırı Arayüzü (AWS CLI) yüklü.

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

Ardından, giriş resmimizi S3'e kopyalıyoruz. Görüntü için tam S3 yolu aşağıdadır.

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

Başka bir aws s3 cp komutu ile bu imajı S3'e kopyalayabiliriz.

aws s3 cp cars.jpg $car_image_path

4. Adım: ML modeli çıkarım betikleri oluşturma

Şimdi giriş noktası dosyamızın üzerinden geçeceğiz, inference.py modül. PyTorchModel sınıfını kullanarak SageMaker dışında eğitilmiş bir PyTorch modelini konuşlandırabiliriz. İlk olarak, PyTorchModelZoo nesnesini başlatıyoruz. Ardından, Amazon S3'te barındırılan örnek veriler üzerinde SageMaker toplu dönüşümünü kullanarak makine öğrenimi çıkarımı gerçekleştirmek için bir inference.py giriş noktası dosyası oluşturacağız.

PyTorchModel nesnesini anlama

The PyTorchModeli SageMaker Python API içindeki sınıf, indirilen model yapıtımızı kullanarak makine öğrenimi çıkarımı gerçekleştirmemize izin verir.

PyTorchModel sınıfını başlatmak için aşağıdaki giriş parametrelerini anlamamız gerekir:

  • name: Model adı; benzersizlik için model adı + tarih saatini veya rastgele bir dizi + tarih saatini kullanmanızı öneririz.
  • model_data: Paketlenmiş makine öğrenimi modeli yapısının S3 URI'si.
  • entry_point: Gelen istekler için işleyicileri tanımlamak üzere çıkarım Docker görüntüsü tarafından kullanılacak kullanıcı tanımlı bir Python dosyası. Kod, model yüklemeyi, giriş ön işlemeyi, tahmin mantığını ve çıkış sonrası işlemeyi tanımlar.
  • framework_version: Otomatik PyTorch model yeniden paketlemesini etkinleştirmek için sürüm 1.2 veya üzerine ayarlanması gerekir.
  • source_dir: entry_point dosyasının dizini.
  • role: AWS hizmet istekleri yapmak için bir IAM rolü.
  • image_uri: Bu Amazon ECR Docker kapsayıcı görüntüsünü makine öğrenimi modeli bilgi işlem ortamı için bir temel olarak kullanın.
  • sagemaker_session: SageMaker oturumu.
  • py_version: Kullanılacak Python sürümü

Aşağıdaki kod parçacığı, önceden eğitilmiş PyTorch modelini kullanarak çıkarım gerçekleştirmek için PyTorchModel sınıfını başlatır:

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

Giriş noktası dosyasını anlama (inference.py)

entry_point parametresi, adlı bir Python dosyasına işaret eder. inference.py. Bu giriş noktası, model yüklemeyi, giriş ön işlemeyi, tahmin mantığını ve çıkış sonrası işlemeyi tanımlar. Önceden oluşturulmuş PyTorch'ta makine öğrenimi modeli hizmet kodunu tamamlar SageMaker Derin Öğrenme Kapsayıcısı görüntü.

Inference.py aşağıdaki işlevleri içerecektir. Örneğimizde, model_fn, input_fn, predict_fn ve output_fn geçersiz kılmak için işlevler varsayılan PyTorch çıkarım işleyicisi.

  1. model_fn: Çıkarım görüntüsündeki statik model kontrol noktalarını içeren bir dizini alır. Modeli belirtilen yoldan açar ve yükler ve bir PyTorch modeli döndürür.
  2. input_fn: Gelen isteğin yükünü (request_body) ve gelen isteğin içerik türünü (request_content_type) girdi olarak alır. Veri kod çözme işlemlerini gerçekleştirir. Bu işlevin, modelin beklediği girdiye göre ayarlanması gerekir.
  3. predict_fn: input_fn'de seri durumundan çıkarılan veriler üzerinde bir model çağırır. Yüklenen makine öğrenimi modeliyle seri durumundan çıkarılan nesne üzerinde tahmin gerçekleştirir.
  4. output_fn: Tahmin sonucunu istenen yanıt içerik türüne seri hale getirir. tahmin_fn işlevinden elde edilen tahminleri JSON, CSV veya NPY biçimlerine dönüştürür.

5. Adım: Bir SageMaker toplu dönüştürme işini başlatma

Bu örnek için, bir SageMaker toplu dönüştürme işi aracılığıyla makine öğrenimi çıkarım sonuçlarını elde edeceğiz. Toplu dönüştürme işleri, kalıcı bir uç noktaya ihtiyaç duymadan veri kümelerinden bir kez çıkarımlar elde etmek istediğimizde en çok kullanışlıdır. bir örneğini oluşturuyoruz sagemaker.transformer.transformer SageMaker toplu dönüştürme işleri oluşturmak ve bunlarla etkileşim kurmak için nesne.

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
                      )

Toplu dönüştürme işi oluşturmak için şu adresteki belgelere bakın: YaratDönüşİş.

Adım 6: Tespitleri görselleştirme

SageMaker toplu dönüştürme işi bittiğinde, Amazon S3'ten makine öğrenimi çıkarım çıktılarını yükleyebiliriz. Bunun için şuraya gidin: AWS Yönetim Konsolu ve Amazon SageMaker'ı arayın. Sol panelde, altında sonuçBakın Toplu dönüştürme işleri.

PyTorch Model Zoo PlatoBlockchain Data Intelligence'ı kullanarak Amazon SageMaker modelleri oluşturun. Dikey Arama. Ai.

Seçtikten sonra Toplu dönüştürme, tüm SageMaker toplu dönüştürme işlerini listeleyen web sayfasına bakın. En son iş uygulamamızın ilerlemesini görebiliriz.

PyTorch Model Zoo PlatoBlockchain Data Intelligence'ı kullanarak Amazon SageMaker modelleri oluşturun. Dikey Arama. Ai.

İlk olarak, iş "Devam Ediyor" durumuna sahip olacaktır. Tamamlandığında, durumun Tamamlandı olarak değiştiğini görün.

PyTorch Model Zoo PlatoBlockchain Data Intelligence'ı kullanarak Amazon SageMaker modelleri oluşturun. Dikey Arama. Ai.

Durum tamamlandı olarak işaretlendikten sonra, sonuçları görüntülemek için işi tıklayabiliriz. Bu web sayfası, yürüttüğümüz işin yapılandırmaları da dahil olmak üzere iş özetini içerir.

PyTorch Model Zoo PlatoBlockchain Data Intelligence'ı kullanarak Amazon SageMaker modelleri oluşturun. Dikey Arama. Ai.

Altında Çıkış verileri yapılandırması, bir S3 çıkış yolu göreceğiz. ML çıkarım çıktımızı bulacağımız yer burasıdır.

PyTorch Model Zoo PlatoBlockchain Data Intelligence'ı kullanarak Amazon SageMaker modelleri oluşturun. Dikey Arama. Ai.

S3 çıktı yolunu seçin ve çıktı verilerimizi içeren bir [image_name].[file_type].out dosyasına bakın. Çıktı dosyamız bir eşleme listesi içerecektir. Örnek çıktı:

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

Bu tahminleri görselleştirmek için öncelikle transformatör nesnemizden çıkış yolunu okuyoruz.

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

Ardından, bu çıktı dosyasını işliyoruz ve tahminlerimizi görselleştiriyoruz. Aşağıda güven eşiğimizi belirtiyoruz. Sınıfların listesini şu adresten alıyoruz: COCO veri kümesi nesne eşlemesi. Çıkarım sırasında, model yalnızca giriş tensörlerini gerektirir ve sonradan işlenmiş tahminleri, her giriş görüntüsü için bir Liste[Dict[Tensor]] olarak döndürür. Dikte alanları aşağıdaki gibidir; burada N, algılama sayısıdır:

  1. kutuları (FloatTensor[N, 4]): tahmin edilen kutular [x1, y1, x2, y2] biçiminde 0 <= x1 < x2 <= W and 0 <= y1 < y2 <= H, Burada W görüntünün genişliği ve H görüntünün yüksekliği
  2. etiketler (Int64Tensor[N]): her tespit için tahmin edilen etiketler
  3. puanlar (Tensor[N]): her tespit için tahmin puanları

Çıktı hakkında daha fazla ayrıntı için bkz. PyTorch Daha Hızlı R-CNN FPN Belgeleri.

Model çıktısı, ilgili güven puanlarına sahip sınırlayıcı kutular içerir. Modelin emin olmadığı sınırlayıcı kutuları kaldırarak yanlış pozitiflerin görüntülenmesini optimize edebiliriz. Aşağıdaki kod parçacıkları, çıktı dosyasındaki tahminleri işler ve puanın güven eşiğimizin üzerinde olduğu tahminlerde sınırlayıcı kutular çizer. Olasılık eşiğini belirledik, CONF_THRESH, bu örnek için .75'e.

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)

Son olarak, çıktımızı anlamak için bu eşlemeleri görselleştiririz.

PyTorch Model Zoo PlatoBlockchain Data Intelligence'ı kullanarak Amazon SageMaker modelleri oluşturun. Dikey Arama. Ai.

not: Resim not defterinizde görünmüyorsa, lütfen onu JupyterLab'in sol tarafındaki dizin ağacında bulun ve oradan açın.

Örnek kodu çalıştırma

Tam çalışan bir örnek için, kodu kopyalayın. amazon-sagemaker-örnekler GitHub ve içindeki hücreleri çalıştır create_pytorch_model_sagemaker.ipynb not defteri.

Sonuç

Bu blog gönderisinde, SageMaker toplu dönüşümü kullanan PyTorch Model Zoo'dan bir nesne algılama modeli kullanarak makine öğrenimi çıkarımı gerçekleştirmenin uçtan uca bir örneğini sergiledik. Daha Hızlı R-CNN nesne algılama modeli ağırlıklarını yüklemeyi, bunları bir S3 klasörüne kaydetmeyi, bir giriş noktası dosyası yazmayı ve PyTorchModel API'sindeki temel parametreleri anlamayı ele aldık. Son olarak, modeli dağıttık ve makine öğrenimi modeli çıkarımı gerçekleştirdik, model çıktısını görselleştirdik ve sonuçları nasıl yorumlayacağımızı öğrendik.


Yazarlar Hakkında

PyTorch Model Zoo PlatoBlockchain Data Intelligence'ı kullanarak Amazon SageMaker modelleri oluşturun. Dikey Arama. Ai.Dipika Khullar makine öğrenimi mühendisi Amazon ML Çözümleri Laboratuvarı. Müşterilerin iş sorunlarını çözmeleri için makine öğrenimi çözümlerini entegre etmelerine yardımcı olur. En son olarak, medya müşterileri için eğitim ve çıkarım hatları ve pazarlama için tahmine dayalı modeller oluşturmuştur.

PyTorch Model Zoo PlatoBlockchain Data Intelligence'ı kullanarak Amazon SageMaker modelleri oluşturun. Dikey Arama. Ai.Marcelo Aberle AWS AI organizasyonunda bir Makine Öğrenimi Mühendisidir. Şurada MLOps çalışmalarına liderlik ediyor: Amazon ML Çözümleri Laboratuvarı, müşterilerin ölçeklenebilir makine öğrenimi sistemleri tasarlamasına ve uygulamasına yardımcı olur. Misyonu, müşterilere kurumsal makine öğrenimi yolculuklarında rehberlik etmek ve üretime giden makine öğrenimi yollarını hızlandırmaktır.

PyTorch Model Zoo PlatoBlockchain Data Intelligence'ı kullanarak Amazon SageMaker modelleri oluşturun. Dikey Arama. Ai.Ninad Kulkarni Uygulamalı Bilim Adamı Amazon ML Çözümleri Laboratuvarı. İş sorunlarını çözmek için çözümler geliştirerek müşterilerin makine öğrenimi ve yapay zekayı benimsemesine yardımcı olur. Son zamanlarda spor, otomotiv ve medya müşterileri için tahmine dayalı modeller geliştirmiştir.

PyTorch Model Zoo PlatoBlockchain Data Intelligence'ı kullanarak Amazon SageMaker modelleri oluşturun. Dikey Arama. Ai.Yash Shah şirketinde bir Bilim Yöneticisidir. Amazon ML Çözümleri Laboratuvarı. O ve uygulamalı bilim adamları ve makine öğrenimi mühendislerinden oluşan ekibi, sağlık, spor, otomotiv ve üretimden çeşitli makine öğrenimi kullanım durumları üzerinde çalışıyor.

Zaman Damgası:

Den fazla AWS Makine Öğrenimi