Menerapkan model dalam skala besar dapat menjadi tugas yang rumit bagi banyak ilmuwan data dan insinyur pembelajaran mesin. Namun, titik akhir Amazon SageMaker menyediakan solusi sederhana untuk menerapkan dan menskalakan inferensi model machine learning (ML) Anda. terakhir kami posting blog dan GitHub repo pada hosting a YOLOv5 TensorFlowModel
on Amazon SageMaker Titik akhir memicu banyak minat dari pembaca kami. Banyak pembaca juga tertarik mempelajari cara menghosting model YOLOv5 menggunakan PyTorch
. Untuk mengatasi masalah ini dan dengan rilis terbaru dari YOLOv8 model dari Ultralitik, kami sajikan postingan ini tentang cara menghosting YOLOv8 PyTorchModel
pada titik akhir SageMaker. Model YOLOv8, didistribusikan di bawah lisensi GNU GPL3, adalah model deteksi objek populer yang dikenal dengan efisiensi runtime serta akurasi deteksi. Titik akhir Amazon SageMaker menyediakan solusi yang mudah diskalakan dan hemat biaya untuk penerapan model.
Ikhtisar solusi
Gambar berikut menguraikan layanan AWS yang digunakan untuk menghosting model YOLOv8 menggunakan titik akhir SageMaker dan memanggil titik akhir sebagai pengguna. Solusinya menggunakan Formasi AWS Cloud untuk mengotomatiskan pembuatan instance SageMaker dan mengkloning kami GitHub repositori ke instance. Notebook SageMaker mengakses dan mengunduh model YOLOv8 PyTorch dan menyimpan kode inferensi khusus bersama dengan model di Layanan Penyimpanan Sederhana Amazon (Amazon S3) ember. Langkah-langkah dalam notebook menyoroti pembuatan titik akhir SageMaker yang menampung model YOLOv8 PyTorch dan kode inferensi khusus. Notebook ini juga mendemonstrasikan cara menguji titik akhir dan memplot hasilnya. Solusinya terdiri dari langkah-langkah berikut:
- Kami telah membuat repositori GitHub dengan dua notebook
1_DeployEndpoint.ipynb
dan2_TestEndpoint.ipynb
, Di bawahsm-notebook/
direktori. - Template AWS CloudFormation berjalan, membuat instans Notebook SageMaker, lalu menggandakan repositori GitHub.
- Buku catatan
1_DeployEndpoint.ipynb
digunakan untuk mengunduh model YOLOv8. - Model YOLOv8 dan kode inferensi disimpan sebagai
model.tar.gz
di Amazon S3. - Titik akhir SageMaker dibuat dengan menghosting
model.tar.gz
. - Buku catatan
2_TestEndpoint.ipynb
digunakan untuk menguji titik akhir dan mengumpulkan hasil.
Prasyarat
Akun AWS dengan Peran AWS Identity and Access Management (IAM). yang menyediakan akses ke:
- Formasi AWS Cloud
- Amazon SageMaker
- Amazon S3
1. Host YOLOv8 di titik akhir SageMaker
Ultralytics memiliki beberapa model YOLOv8 dengan kemampuan berbeda. Mereka dibagi menjadi berikut ini:
- Deteksi Objek (
yolov8l.pt, yolov8m.pt, yolov8n.pt, yolov8s.pt, yolov8x.pt, yolov8x6.pt
) - Segmentasi (
yolov8l-seg.pt, yolov8m-seg.pt, yolov8n-seg.pt, yolov8s-seg.pt, yolov8x-seg.pt
) - Klasifikasi (
yolov8l-cls.pt, yolov8m-cls.pt, yolov8n-cls.pt, yolov8s-cls.pt, yolov8x-cls.pt
)
Di blog ini, kami fokus pada deteksi objek menggunakan yolov8l.pt
Model PyTorch. Untuk menghosting model YOLOv8 dan kode inferensi khusus pada titik akhir SageMaker, keduanya harus dikompresi menjadi satu model.tar.gz
dengan struktur sebagai berikut:
model.tar.gz โโ code/ โ โโโ inference.py โ โโโ requirements.txt โโโ yolov8l.pt
Berat model yolov8l.pt
file harus berada di luar code/
direktori dan skrip python inferensi utama inference.py
, yang berisi fungsi-fungsi yang diperlukan untuk memuat model, mem-parsing input, menjalankan inferensi, dan pasca-pemrosesan output, harus berada di bawah code/
direktori. Rincian lebih lanjut tentang inference.py
disajikan pada bagian berikut.
1.1. Kode inferensi khusus
Bergantung pada jalur pipa dan alur kerja kode Anda, masukan ke dan keluaran dari titik akhir SageMaker dapat bervariasi. Dalam posting ini, kami menyajikan alur kerja untuk melewati a numpy
array ke titik akhir dan pemrosesan. Namun, input ke titik akhir bisa json
atau teks juga. Bergantung pada alur kerja Anda, Anda harus mengubah fungsi di inference.py
mengakomodasi input dan output yang berbeda. Selain itu, dengan rilis terbaru YOLOv8, tim Ultralytics merilis API Python mereka, yang memungkinkan kami menginstal pustaka YOLO secara langsung melalui requirements.txt
dan impor modelnya inference.py
.
1.1.1. Isi dari code/inference.py
:
import numpy as np
import torch, os, json, io, cv2, time
from ultralytics import YOLO def model_fn(model_dir): print("Executing model_fn from inference.py ...") env = os.environ model = YOLO("/opt/ml/model/code/" + env['YOLOV8_MODEL']) return model def input_fn(request_body, request_content_type): print("Executing input_fn from inference.py ...") if request_content_type: jpg_original = np.load(io.BytesIO(request_body), allow_pickle=True) jpg_as_np = np.frombuffer(jpg_original, dtype=np.uint8) img = cv2.imdecode(jpg_as_np, flags=-1) else: raise Exception("Unsupported content type: " + request_content_type) return img def predict_fn(input_data, model): print("Executing predict_fn from inference.py ...") device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model.to(device) with torch.no_grad(): result = model(input_data) return result def output_fn(prediction_output, content_type): print("Executing output_fn from inference.py ...") infer = {} for result in prediction_output: if result.boxes: infer['boxes'] = result.boxes.numpy().data.tolist() if result.masks: infer['masks'] = result.masks.numpy().data.tolist() if result.probs: infer['probs'] = result.probs.numpy().data.tolist() return json.dumps(infer)
1.1.2. Isi dari code/requirements.txt
:
Setelah semua isi file untuk model.tar.gz
diselesaikan, jalankan perintah berikut untuk membuat bola tar:
$ tar -czvf model.tar.gz code/ yolov8l.pt
1.2. Tuan rumah model.tar.gz
ke titik akhir SageMaker:
Ini melibatkan beberapa langkah di mana model.tar.gz
pertama kali diunggah ke bucket S3. Artefak yang diunggah digunakan untuk membuat SageMaker PyTorchModel. Dan terakhir, PyTorchModel ini digunakan untuk menerapkan model ke Titik Akhir SageMaker.
1.2.1. Unggah model dan kode inferensi ke S3:
from sagemaker import s3 bucket = "s3://NAME_OF_BUCKET"
prefix = "yolov8/demo-custom-endpoint"
model_data = s3.S3Uploader.upload("model.tar.gz", bucket + "/" + prefix)
1.2.2. Buat SageMaker PyTorchModel:
from sagemaker.pytorch import PyTorchModel model_name = 'yolov8l.pt' model = PyTorchModel(entry_point='inference.py', model_data=model_data, framework_version='1.12', py_version='py38', role=role, env={'TS_MAX_RESPONSE_SIZE':'20000000', 'YOLOV8_MODEL': model_name}, sagemaker_session=sess)
1.2.3. Kompilasi dan host model ke titik akhir:
from sagemaker.deserializers import JSONDeserializer INSTANCE_TYPE = 'ml.m5.4xlarge'
ENDPOINT_NAME = 'yolov8-pytorch-' + str(datetime.utcnow().strftime('%Y-%m-%d-%H-%M-%S-%f')) predictor = model.deploy(initial_instance_count=1, instance_type=INSTANCE_TYPE, deserializer=JSONDeserializer(), endpoint_name=ENDPOINT_NAME)
2. Uji titik akhir SageMaker
Setelah titik akhir berhasil dihosting, itu dapat digunakan untuk menjalankan inferensi. Pada langkah ini, pertama-tama kita akan membaca gambar, mengonversinya menjadi byte, dan menjalankan inferensi dengan meneruskan byte sebagai input ke titik akhir. Hasil yang dihasilkan akan memiliki kotak pembatas atau topeng atau skor kepercayaan berdasarkan jenis model YOLOv8 yang digunakan untuk hosting. Output dapat diplot sesuai.
2.1.1. Hasilkan hasil inferensi dan output plot:
import cv2, random
import numpy as np
import matplotlib.pyplot as plt orig_image = cv2.imread('bus.jpg') image_height, image_width, _ = orig_image.shape
model_height, model_width = 300, 300
x_ratio = image_width/model_width
y_ratio = image_height/model_height resized_image = cv2.resize(orig_image, (model_height, model_width))
payload = cv2.imencode('.jpg', resized_image)[1].tobytes()
result = predictor.predict(payload) if 'boxes' in result: for idx,(x1,y1,x2,y2,conf,lbl) in enumerate(result['boxes']): # Draw Bounding Boxes x1, x2 = int(x_ratio*x1), int(x_ratio*x2) y1, y2 = int(y_ratio*y1), int(y_ratio*y2) color = (random.randint(10,255), random.randint(10,255), random.randint(10,255)) cv2.rectangle(orig_image, (x1,y1), (x2,y2), color, 4) cv2.putText(orig_image, f"Class: {int(lbl)}", (x1,y1-40), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2, cv2.LINE_AA) cv2.putText(orig_image, f"Conf: {int(conf*100)}", (x1,y1-10), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2, cv2.LINE_AA) if 'masks' in result: # Draw Masks mask = cv2.resize(np.asarray(result['masks'][idx]), dsize=(image_width, image_height), interpolation=cv2.INTER_CUBIC) for c in range(3): orig_image[:,:,c] = np.where(mask>0.5, orig_image[:,:,c]*(0.5)+0.5*color[c], orig_image[:,:,c]) if 'probs' in result: # Find Class lbl = result['probs'].index(max(result['probs'])) color = (random.randint(10,255), random.randint(10,255), random.randint(10,255)) cv2.putText(orig_image, f"Class: {int(lbl)}", (20,20), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2, cv2.LINE_AA) plt.imshow(cv2.cvtColor(orig_image, cv2.COLOR_BGR2RGB))
plt.show()
2.1.2. Hasil:
Keluaran dari deteksi objek dan segmentasi model YOLOv8 ditunjukkan pada gambar berikut:
3. Bersihkan
Menghapus tumpukan CloudFormation akan menghapus semua sumber daya yang awalnya dibuat. Namun, CloudFormation saat ini tidak dikonfigurasi untuk menghapus titik akhir, konfigurasi titik akhir, dan model secara otomatis. Jika titik akhir yang dihosting tidak digunakan, sebaiknya hapus titik akhir tersebut untuk menghemat biaya. Ini dapat dilakukan sebagai berikut:
import boto3 sm_client = boto3.client(service_name="sagemaker") response = sm_client.describe_endpoint_config(EndpointConfigName=endpoint_name)
print(response)
endpoint_config_name = response['EndpointConfigName'] # Delete Endpoint
sm_client.delete_endpoint(EndpointName=endpoint_name) # Delete Endpoint Configuration
sm_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name) # Delete Model
for prod_var in response['ProductionVariants']: model_name = prod_var['ModelName'] sm_client.delete_model(ModelName=model_name)
Kesimpulan
Dalam postingan ini, kami mendemonstrasikan cara menghosting YOLOv8 pra-pelatihan PyTorchModel
pada titik akhir SageMaker dan uji hasil inferensi dengan memanggil titik akhir. Kode terperinci tersedia di GitHub, dan tumpukan template CloudFormation juga tersedia di GitHub.
Untuk mempelajari lebih lanjut tentang titik akhir SageMaker, silakan lihat Buat titik akhir Anda dan terapkan model Anda dan Gunakan PyTorch dengan Amazon SageMaker, yang menyoroti menggunakan PyTorchModel
di SageMaker. Prosesnya bisa otomatis menggunakan Dukungan CloudFormation untuk SageMaker.
Tentang penulis
Lagu Kevin adalah Ilmuwan Data di Layanan Profesional AWS. Dia memegang gelar PhD di bidang Biofisika dan memiliki lebih dari lima tahun pengalaman industri dalam membangun visi komputer dan solusi pembelajaran mesin.
Romil Syah adalah Ilmuwan Data Edge IoT di AWS Professional Services. Romil memiliki lebih dari enam tahun pengalaman industri dalam visi komputer, pembelajaran mesin, dan perangkat tepi IoT. Dia terlibat dalam membantu pelanggan mengoptimalkan dan menerapkan model pembelajaran mesin mereka untuk perangkat edge dalam penyiapan industri.
- Konten Bertenaga SEO & Distribusi PR. Dapatkan Amplifikasi Hari Ini.
- Platoblockchain. Intelijen Metaverse Web3. Pengetahuan Diperkuat. Akses Di Sini.
- Sumber: https://aws.amazon.com/blogs/machine-learning/hosting-yolov8-pytorch-model-on-amazon-sagemaker-endpoints/
- :adalah
- 1
- 10
- 100
- 7
- a
- Tentang Kami
- mengakses
- menampung
- demikian
- Akun
- ketepatan
- tambahan
- alamat
- Semua
- memungkinkan
- Amazon
- Amazon SageMaker
- dan
- api
- ADALAH
- susunan
- AS
- At
- mengotomatisasikan
- Otomatis
- secara otomatis
- tersedia
- AWS
- Layanan Profesional AWS
- bola
- berdasarkan
- BE
- makhluk
- Biofisika
- Blog
- kotak
- Bangunan
- bis
- by
- CAN
- kemampuan
- memeriksa
- kelas
- kode
- warna
- COM
- komputer
- Visi Komputer
- kepercayaan
- konfigurasi
- mengandung
- Konten
- isi
- mengubah
- Biaya
- membuat
- dibuat
- menciptakan
- penciptaan
- Sekarang
- adat
- pelanggan
- data
- ilmuwan data
- tanggal Waktu
- menunjukkan
- menunjukkan
- Tergantung
- menyebarkan
- penggelaran
- penyebaran
- terperinci
- rincian
- Deteksi
- alat
- Devices
- berbeda
- langsung
- didistribusikan
- Download
- download
- seri
- mudah
- Tepi
- efisiensi
- antara
- Titik akhir
- Insinyur
- mengeksekusi
- pengalaman
- beberapa
- File
- selesai
- Akhirnya
- Menemukan
- Pertama
- Fokus
- berikut
- berikut
- Untuk
- dari
- fungsi
- lebih lanjut
- menghasilkan
- dihasilkan
- GitHub
- baik
- Memiliki
- membantu
- Menyoroti
- highlight
- memegang
- tuan rumah
- host
- tuan
- host
- Seterpercayaapakah Olymp Trade? Kesimpulan
- How To
- Namun
- HTML
- HTTPS
- identitas
- BEI
- gambar
- gambar
- mengimpor
- in
- industri
- industri
- memasukkan
- install
- contoh
- bunga
- tertarik
- terlibat
- idiot
- isu
- IT
- NYA
- jpg
- json
- dikenal
- Terakhir
- BELAJAR
- pengetahuan
- Perpustakaan
- Lisensi
- pemuatan
- Lot
- mesin
- Mesin belajar
- Utama
- pengelolaan
- banyak
- masker
- masker
- matplotlib.dll
- ML
- model
- model
- memodifikasi
- lebih
- beberapa
- Perlu
- buku catatan
- mati rasa
- obyek
- Deteksi Objek
- of
- on
- Optimize
- urutan
- semula
- OS
- menguraikan
- keluaran
- di luar
- Lewat
- pipa saluran
- plato
- Kecerdasan Data Plato
- Data Plato
- silahkan
- Populer
- Pos
- praktek
- Predictor
- menyajikan
- disajikan
- proses
- pengolahan
- profesional
- memberikan
- menyediakan
- Ular sanca
- pytorch
- menaikkan
- acak
- Baca
- pembaca
- baru
- melepaskan
- dirilis
- menghapus
- gudang
- Persyaratan
- Sumber
- tanggapan
- mengakibatkan
- Hasil
- kembali
- Run
- berjalan
- pembuat bijak
- Save
- terukur
- Skala
- skala
- ilmuwan
- ilmuwan
- yg keturunan dr laut
- Bagian
- segmentasi
- Layanan
- penyiapan
- Bentuknya
- harus
- ditunjukkan
- Sederhana
- tunggal
- ENAM
- larutan
- Solusi
- tumpukan
- Langkah
- Tangga
- penyimpanan
- tersimpan
- toko
- struktur
- berhasil
- mendukung
- tugas
- tim
- Template
- uji
- bahwa
- Grafik
- mereka
- waktu
- untuk
- bersama
- obor
- Penglihatan obor
- bawah
- upload
- us
- Pengguna
- penglihatan
- BAIK
- yang
- akan
- dengan
- dalam
- akan
- tahun
- Yolo
- Kamu
- Anda
- zephyrnet.dll