Buat model Amazon SageMaker menggunakan PyTorch Model Zoo PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Buat model Amazon SageMaker menggunakan PyTorch Model Zoo

Menerapkan model machine learning (ML) terlatih berkualitas tinggi untuk melakukan inferensi batch atau real-time adalah bagian penting dalam memberikan nilai kepada pelanggan. Namun, proses eksperimentasi ML bisa jadi membosankanโ€”ada banyak pendekatan yang membutuhkan banyak waktu untuk diterapkan. Itu sebabnya model ML terlatih seperti yang disediakan di Kebun Binatang Model PyTorch sangat membantu. Amazon SageMaker menyediakan antarmuka terpadu untuk bereksperimen dengan model ML yang berbeda, dan Kebun Binatang Model PyTorch memungkinkan kita untuk dengan mudah menukar model kita dengan cara standar.

Posting blog ini menunjukkan cara melakukan inferensi ML menggunakan model deteksi objek dari Kebun Binatang Model PyTorch di dalam SageMaker. Model ML terlatih dari PyTorch Model Zoo siap pakai dan dapat dengan mudah digunakan sebagai bagian dari aplikasi ML. Menyiapkan model ML ini sebagai titik akhir SageMaker atau Transformasi Batch SageMaker pekerjaan untuk inferensi online atau offline mudah dengan langkah-langkah yang diuraikan dalam posting blog ini. Kami akan menggunakan a Lebih cepat R-CNN model deteksi objek untuk memprediksi kotak pembatas untuk kelas objek yang telah ditentukan sebelumnya.

Kami menelusuri contoh ujung ke ujung, mulai dari memuat bobot model deteksi objek R-CNN yang Lebih Cepat, hingga menyimpannya ke Layanan Penyimpanan Sederhana Amazon (Amazon S3) bucket, dan untuk menulis file entrypoint dan memahami parameter kunci di API PyTorchModel. Terakhir, kita akan menerapkan model ML, melakukan inferensi menggunakan SageMaker Batch Transform, dan memeriksa output model ML serta mempelajari cara menginterpretasikan hasilnya. Solusi ini dapat diterapkan ke model terlatih lainnya di Kebun Binatang Model PyTorch. Untuk daftar model yang tersedia, lihat Dokumentasi Kebun Binatang Model PyTorch.

Ikhtisar solusi

Posting blog ini akan berjalan melalui langkah-langkah berikut. Untuk versi kerja penuh dari semua langkah, lihat create_pytorch_model_sagemaker.ipynb

  • Langkah 1: Pengaturan
  • Langkah 2: Memuat model ML dari PyTorch Model Zoo
  • Langkah 3 Simpan dan unggah artefak model ML ke Amazon S3
  • Langkah 4: Membuat skrip inferensi model ML
  • Langkah 5: Meluncurkan tugas transformasi batch SageMaker
  • Langkah 6: Memvisualisasikan hasil

Diagram arsitektur

Struktur direktori

Kode untuk blog ini dapat ditemukan di sini Repositori GitHub. Codebase berisi semua yang kami perlukan untuk membuat artefak model ML, meluncurkan tugas transformasi, dan memvisualisasikan hasil.

Ini adalah alur kerja yang kami gunakan. Semua langkah berikut akan mengacu pada modul dalam struktur ini.

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

Grafik sagemaker_torch_model_zoo folder harus berisi inference.py sebagai file entrypoint, dan create_pytorch_model_sagemaker.ipynb untuk memuat dan menyimpan bobot model, membuat objek model SageMaker, dan terakhir meneruskannya ke tugas transformasi batch SageMaker. Untuk menghadirkan model ML Anda sendiri, ubah jalur di Langkah 1: bagian penyiapan notebook dan muat model baru di Langkah 2: Memuat Model ML dari bagian Kebun Binatang Model PyTorch. Langkah-langkah selanjutnya di bawah ini akan tetap sama.

Langkah 1: Pengaturan

Peran IAM

SageMaker menjalankan operasi pada infrastruktur yang dikelola oleh SageMaker. SageMaker hanya dapat melakukan tindakan yang diizinkan sebagaimana ditentukan dalam peran eksekusi IAM yang menyertai notebook untuk SageMaker. Untuk dokumentasi yang lebih mendetail tentang cara membuat peran IAM dan mengelola izin IAM, lihat Dokumentasi peran AWS SageMaker. Kita bisa membuat peran baru, atau kita bisa mendapatkan Buku catatan SageMaker (Studio).peran eksekusi default dengan menjalankan baris kode berikut:

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

Kode di atas mendapatkan peran eksekusi SageMaker untuk instans notebook. Ini adalah peran IAM yang kami buat untuk instans notebook SageMaker atau SageMaker Studio.

Parameter yang dapat dikonfigurasi pengguna

Berikut adalah semua parameter yang dapat dikonfigurasi yang diperlukan untuk membangun dan meluncurkan tugas transformasi batch SageMaker kami:

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)

Langkah 2: Memuat model ML dari PyTorch Model Zoo

Selanjutnya, kita menentukan model deteksi objek dari PyTorch Model Zoo dan menyimpan bobot model ML-nya. Biasanya, kami menyimpan model PyTorch menggunakan ekstensi file .pt atau .pth. Cuplikan kode di bawah mengunduh model Faster R-CNN ResNet50 ML pra-pelatihan dari PyTorch Model Zoo:

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

Transformasi batch SageMaker memerlukan beberapa bobot model sebagai input, jadi kami akan menyimpan model ML yang telah dilatih sebelumnya sebagai model.pt. Jika kami ingin memuat model khusus, kami dapat menyimpan bobot model dari model PyTorch lain sebagai model.pt.

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

Langkah 3: Simpan dan unggah artefak model ML ke Amazon S3

Karena kita akan menggunakan SageMaker untuk inferensi ML, kita perlu mengunggah bobot model ke bucket S3. Kita dapat melakukannya dengan menggunakan perintah berikut atau dengan mengunduh dan cukup menyeret dan menjatuhkan file langsung ke S3. Perintah berikut pertama-tama akan memampatkan grup file di dalamnya model.pt ke tarball dan salin bobot model dari mesin lokal kami ke bucket S3.

Note: Untuk menjalankan perintah berikut, Anda harus memiliki Antarmuka Baris Perintah AWS (AWS CLI) diinstal.

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

Selanjutnya, kami menyalin gambar masukan kami ke S3. Di bawah ini adalah jalur S3 lengkap untuk gambar tersebut.

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

Kami dapat menyalin gambar ini ke S3 dengan perintah aws s3 cp lainnya.

aws s3 cp cars.jpg $car_image_path

Langkah 4: Membuat skrip inferensi model ML

Sekarang kita akan membahas file entrypoint kita, inference.py modul. Kita bisa menerapkan model PyTorch yang dilatih di luar SageMaker menggunakan kelas PyTorchModel. Pertama, kita membuat instance objek PyTorchModelZoo. Kemudian kita akan membuat file entrypoint inference.py untuk melakukan inferensi ML menggunakan transformasi batch SageMaker pada data sampel yang dihosting di Amazon S3.

Memahami objek PyTorchModel

Grafik Model PyTorch kelas dalam SageMaker Python API memungkinkan kita melakukan inferensi ML menggunakan artefak model yang diunduh.

Untuk memulai kelas PyTorchModel, kita perlu memahami parameter input berikut:

  • name: Nama model; sebaiknya gunakan nama model + waktu tanggal, atau string acak + waktu tanggal untuk keunikan.
  • model_data: URI S3 artefak model ML terpaket.
  • entry_point: File Python yang ditentukan pengguna untuk digunakan oleh gambar Docker inferensi untuk menentukan penangan untuk permintaan yang masuk. Kode mendefinisikan pemuatan model, prapemrosesan masukan, logika prediksi, dan pascapemrosesan keluaran.
  • framework_version: Perlu disetel ke versi 1.2 atau lebih tinggi untuk mengaktifkan pengemasan ulang model PyTorch otomatis.
  • source_dir: Direktori file entry_point.
  • role: Peran IAM untuk membuat permintaan layanan AWS.
  • image_uri: Gunakan gambar kontainer Amazon ECR Docker ini sebagai dasar untuk lingkungan komputasi model ML.
  • sagemaker_session: Sesi SageMaker.
  • py_version: Versi Python yang akan digunakan

Cuplikan kode berikut memberi contoh kelas PyTorchModel untuk melakukan inferensi menggunakan model PyTorch yang telah dilatih sebelumnya:

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

Memahami file entrypoint (inference.py)

Parameter entry_point menunjuk ke file Python bernama inference.py. Titik masuk ini menentukan pemuatan model, prapemrosesan masukan, logika prediksi, dan pascapemrosesan keluaran. Ini melengkapi kode penyajian model ML di PyTorch prebuilt Wadah Pembelajaran Mendalam SageMaker gambar.

Inference.py akan berisi fungsi-fungsi berikut. Dalam contoh kami, kami menerapkan model_fn, input_fn, predict_fn dan output_fn fungsi untuk menimpa penangan inferensi PyTorch default.

  1. model_fn: Mengambil direktori yang berisi pos pemeriksaan model statis dalam gambar inferensi. Membuka dan memuat model dari jalur yang ditentukan dan mengembalikan model PyTorch.
  2. input_fn: Mengambil payload dari permintaan masuk (request_body) dan tipe konten dari permintaan masuk (request_content_type) sebagai input. Menangani decoding data. Fungsi ini perlu disesuaikan dengan input yang diharapkan model.
  3. predict_fn: Memanggil model pada data yang dideserialisasi di input_fn. Melakukan prediksi pada objek deserialized dengan model ML yang dimuat.
  4. output_fn: Membuat serial hasil prediksi ke dalam jenis konten respons yang diinginkan. Mengonversi prediksi yang diperoleh dari fungsi predict_fn ke format JSON, CSV, atau NPY.

Langkah 5: Meluncurkan tugas transformasi batch SageMaker

Untuk contoh ini, kita akan mendapatkan hasil inferensi ML melalui tugas transformasi batch SageMaker. Pekerjaan transformasi batch paling berguna saat kita ingin mendapatkan inferensi dari kumpulan data satu kali, tanpa memerlukan titik akhir yang persisten. Kami instantiate a sagemaker.transformer.Transformer untuk membuat dan berinteraksi dengan tugas transformasi batch 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
                      )

Lihat dokumentasi untuk membuat tugas transformasi batch di BuatTransformJob.

Langkah 6: Memvisualisasikan hasil

Setelah tugas transformasi batch SageMaker selesai, kita dapat memuat output inferensi ML dari Amazon S3. Untuk ini, navigasikan ke Konsol Manajemen AWS dan cari Amazon SageMaker. Di panel kiri, di bawah Kesimpulan, Lihat Pekerjaan transformasi batch.

Buat model Amazon SageMaker menggunakan PyTorch Model Zoo PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Setelah memilih Transformasi batch, lihat halaman web yang mencantumkan semua pekerjaan transformasi batch SageMaker. Kami dapat melihat kemajuan pelaksanaan pekerjaan terbaru kami.

Buat model Amazon SageMaker menggunakan PyTorch Model Zoo PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Pertama, pekerjaan akan berstatus "InProgress". Setelah selesai, lihat perubahan status menjadi Selesai.

Buat model Amazon SageMaker menggunakan PyTorch Model Zoo PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Setelah status ditandai sebagai selesai, kita dapat mengklik pekerjaan untuk melihat hasilnya. Halaman web ini berisi ringkasan pekerjaan, termasuk konfigurasi pekerjaan yang baru saja kami jalankan.

Buat model Amazon SageMaker menggunakan PyTorch Model Zoo PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Bawah Konfigurasi data keluaran, kita akan melihat jalur keluaran S3. Di sinilah kita akan menemukan output inferensi ML kita.

Buat model Amazon SageMaker menggunakan PyTorch Model Zoo PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Pilih jalur keluaran S3 dan lihat file [image_name].[file_type].out dengan data keluaran kami. File keluaran kami akan berisi daftar pemetaan. Contoh keluaran:

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

Untuk memvisualisasikan prediksi ini, pertama-tama kita membaca jalur keluaran dari objek transformator kita.

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

Selanjutnya, kami memproses file keluaran ini dan memvisualisasikan prediksi kami. Di bawah ini kami menentukan ambang kepercayaan kami. Kami mendapatkan daftar kelas dari Pemetaan objek set data COCO. Selama inferensi, model hanya memerlukan tensor input dan menampilkan prediksi pasca-proses sebagai List[Dict[Tensor]], satu untuk setiap gambar input. Bidang Dict adalah sebagai berikut, di mana N adalah jumlah deteksi:

  1. kotak (FloatTensor[N, 4]): kotak yang diprediksi masuk [x1, y1, x2, y2] format, dengan 0 <= x1 < x2 <= W and 0 <= y1 < y2 <= H, Di mana W adalah lebar gambar dan H adalah tinggi bayangan
  2. label (Int64Tensor[N]): label yang diprediksi untuk setiap deteksi
  3. skor (Tensor[N]): skor prediksi untuk setiap deteksi

Untuk detail lebih lanjut tentang output, lihat Dokumentasi FPN R-CNN PyTorch Lebih Cepat.

Keluaran model berisi kotak pembatas dengan skor kepercayaan masing-masing. Kami dapat mengoptimalkan tampilan positif palsu dengan menghapus kotak pembatas yang modelnya tidak percaya diri. Cuplikan kode berikut memproses prediksi dalam file keluaran dan menggambar kotak pembatas pada prediksi yang skornya di atas ambang keyakinan kami. Kami menetapkan ambang probabilitas, CONF_THRESH, hingga 75 untuk contoh ini.

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)

Terakhir, kami memvisualisasikan pemetaan ini untuk memahami keluaran kami.

Buat model Amazon SageMaker menggunakan PyTorch Model Zoo PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Note: jika gambar tidak ditampilkan di buku catatan Anda, harap cari di pohon direktori di sisi kiri JupyterLab dan buka dari sana.

Menjalankan kode contoh

Untuk contoh yang berfungsi penuh, tiru kode di amazon-sagemaker-contoh GitHub dan menjalankan sel di create_pytorch_model_sagemaker.ipynb buku catatan.

Kesimpulan

Dalam postingan blog ini, kami memamerkan contoh end-to-end melakukan inferensi ML menggunakan model deteksi objek dari PyTorch Model Zoo menggunakan transformasi batch SageMaker. Kita membahas pemuatan bobot model deteksi objek R-CNN yang Lebih Cepat, menyimpannya ke bucket S3, menulis file entrypoint, dan memahami parameter kunci di API PyTorchModel. Terakhir, kami menerapkan model dan melakukan inferensi model ML, memvisualisasikan output model, dan mempelajari cara menginterpretasikan hasilnya.


Tentang Penulis

Buat model Amazon SageMaker menggunakan PyTorch Model Zoo PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.Dipika Khular adalah Insinyur ML di Lab Solusi Amazon ML. Dia membantu pelanggan mengintegrasikan solusi ML untuk menyelesaikan masalah bisnis mereka. Baru-baru ini, dia telah membangun jalur pelatihan dan inferensi untuk pelanggan media dan model prediktif untuk pemasaran.

Buat model Amazon SageMaker menggunakan PyTorch Model Zoo PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.Marcelo Aberle adalah Insinyur ML di organisasi AWS AI. Dia memimpin upaya MLOps di Lab Solusi Amazon ML, membantu pelanggan merancang dan mengimplementasikan sistem ML yang dapat diskalakan. Misinya adalah memandu pelanggan dalam perjalanan ML perusahaan mereka dan mempercepat jalur ML mereka menuju produksi.

Buat model Amazon SageMaker menggunakan PyTorch Model Zoo PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.Ninad Kulkarni adalah Ilmuwan Terapan di Lab Solusi Amazon ML. Dia membantu pelanggan mengadopsi ML dan AI dengan membangun solusi untuk mengatasi masalah bisnis mereka. Baru-baru ini, dia telah membuat model prediktif untuk pelanggan olahraga, otomotif, dan media.

Buat model Amazon SageMaker menggunakan PyTorch Model Zoo PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.Yash Shah adalah Manajer Sains di Lab Solusi Amazon ML. Dia dan timnya yang terdiri dari ilmuwan terapan dan teknisi ML mengerjakan berbagai kasus penggunaan ML mulai dari perawatan kesehatan, olahraga, otomotif, dan manufaktur.

Stempel Waktu:

Lebih dari Pembelajaran Mesin AWS