Modelleri geniş ölçekte dağıtmak, birçok veri bilimcisi ve makine öğrenimi mühendisi için külfetli bir görev olabilir. Ancak Amazon SageMaker uç noktaları, makine öğrenimi (ML) modeli çıkarımlarınızı dağıtmak ve ölçeklendirmek için basit bir çözüm sunar. bizim sonumuz blog yazısı ve GitHub repo barındırma konusunda YOLOv5 TensorFlowModel
on Amazon Adaçayı Yapıcı Uç noktalar okuyucularımızdan yoğun ilgi gördü. Birçok okuyucu, YOLOv5 modelini kullanarak nasıl barındırılacağını öğrenmekle de ilgilendi. PyTorch
. Bu sorunu çözmek için ve en son yayınlanan YOLOv8 modeli Ultralitik, bir YOLOv8'in nasıl barındırılacağına ilişkin bu gönderiyi sunuyoruz PyTorchModel
SageMaker uç noktalarında. GNU GPL8 lisansı altında dağıtılan YOLOv3 modeli, çalışma zamanı verimliliği ve algılama doğruluğu ile tanınan popüler bir nesne algılama modelidir. Amazon SageMaker uç noktaları, model dağıtımı için kolayca ölçeklenebilir ve maliyeti optimize edilmiş bir çözüm sunar.
Çözüme genel bakış
Aşağıdaki görüntü, bir SageMaker uç noktası kullanarak YOLOv8 modelini barındırmak ve uç noktayı bir kullanıcı olarak çağırmak için kullanılan AWS hizmetlerini özetlemektedir. Çözüm kullanır AWS CloudFormation bir SageMaker örneğinin oluşturulmasını otomatikleştirmek ve GitHub örneğin deposu. SageMaker not defteri, bir YOLOv8 PyTorch modeline erişir ve onu indirir ve modelle birlikte özel çıkarım kodunu bir Amazon Basit Depolama Hizmeti (Amazon S3) paketi. Not defterindeki adımlar, YOLOv8 PyTorch modelini ve özel çıkarım kodunu barındıran SageMaker uç noktasının oluşturulmasını vurgular. Not defteri ayrıca uç noktanın nasıl test edileceğini ve sonuçların nasıl çizileceğini gösterir. Çözüm aşağıdaki adımlardan oluşur:
- İki not defteri ile bir GitHub deposu oluşturduk
1_DeployEndpoint.ipynb
ve2_TestEndpoint.ipynb
Altındasm-notebook/
dizin. - AWS CloudFormation şablonu çalışır, bir SageMaker Notebook örneği oluşturur ve ardından GitHub deposunu klonlar.
- Defter
1_DeployEndpoint.ipynb
YOLOv8 modelini indirmek için kullanılır. - YOLOv8 modeli ve çıkarım kodu şu şekilde saklanır:
model.tar.gz
Amazon S3'te. - Barındırılarak bir SageMaker uç noktası oluşturulur.
model.tar.gz
. - Defter
2_TestEndpoint.ipynb
uç noktayı test etmek ve sonuçları toplamak için kullanılır.
Önkoşullar
ile AWS Hesabı AWS Kimlik ve Erişim Yönetimi (IAM) rolleri erişim sağlayan:
- AWS CloudFormation
- Amazon Adaçayı Yapıcı
- Amazon S3
1. YOLOv8'i bir SageMaker uç noktasında barındırın
Ultralytics, farklı yeteneklere sahip birden fazla YOLOv8 modeline sahiptir. Aşağıdakilere ayrılırlar:
- Nesne algılama (
yolov8l.pt, yolov8m.pt, yolov8n.pt, yolov8s.pt, yolov8x.pt, yolov8x6.pt
) - Bölünme (
yolov8l-seg.pt, yolov8m-seg.pt, yolov8n-seg.pt, yolov8s-seg.pt, yolov8x-seg.pt
) - Sınıflandırma (
yolov8l-cls.pt, yolov8m-cls.pt, yolov8n-cls.pt, yolov8s-cls.pt, yolov8x-cls.pt
)
Bu blogda, kullanarak nesne algılamaya odaklanıyoruz. yolov8l.pt
PyTorch modeli. YOLOv8 modelini ve özel çıkarım kodunu SageMaker uç noktasında barındırmak için bunların tek bir yerde sıkıştırılması gerekir. model.tar.gz
aşağıdaki yapı ile:
model.tar.gz ├─ code/ │ ├── inference.py │ └── requirements.txt └── yolov8l.pt
model ağırlıkları yolov8l.pt
dosya dışında olmalıdır code/
dizin ve ana çıkarım python betiği inference.py
modeli yüklemek, girişi ayrıştırmak, çıkarımı çalıştırmak ve çıktıyı sonradan işlemek için gerekli işlevleri içeren , altında bulunmalıdır. code/
dizin. hakkında daha fazla ayrıntı inference.py
aşağıdaki bölümde sunulmaktadır.
1.1. Özel çıkarım kodu
İşlem hattınıza ve kod iş akışınıza bağlı olarak, SageMaker uç noktalarına girişler ve çıkışlar değişebilir. Bu gönderide, geçiş için bir iş akışı sunuyoruz. numpy
uç noktaya dizi ve işleme. Ancak, uç noktanın girdileri şu şekilde olabilir: json
veya metin de. İş akışınıza bağlı olarak, içindeki işlevleri değiştirmelisiniz. inference.py
Farklı girdi ve çıktıları barındırmak için. Ek olarak, YOLOv8'in son sürümüyle birlikte Ultralytics ekibi, YOLO kitaplığını doğrudan requirements.txt
ve modeli içeri aktarın inference.py
.
1.1.1. içindekiler 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. içindekiler code/requirements.txt
:
için tüm dosya içeriğini bir kez model.tar.gz
sonlandırıldıysa, bir tar topu oluşturmak için aşağıdaki komutu çalıştırın:
$ tar -czvf model.tar.gz code/ yolov8l.pt
1.2. Ev sahibi model.tar.gz
SageMaker uç noktasına:
Bu, birkaç adımı içerir; burada model.tar.gz
önce S3 klasörüne yüklenir. Yüklenen yapı, bir SageMaker PyTorchModel oluşturmak için kullanılır. Son olarak, bu PyTorchModel, modeli bir SageMaker Uç Noktasına dağıtmak için kullanılır.
1.2.1. Modeli ve çıkarım kodunu S3'e yükleyin:
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. SageMaker PyTorchModel'i oluşturun:
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. Modeli derleyin ve bir uç noktada barındırın:
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. SageMaker uç noktasını test edin
Uç nokta başarıyla barındırıldıktan sonra, çıkarımı çalıştırmak için kullanılabilir. Bu adımda, önce bir görüntüyü okuyacağız, baytlara dönüştüreceğiz ve baytları uç noktaya bir girdi olarak ileterek çıkarım yapacağız. Oluşturulan sonuçlar, barındırma için kullanılan YOLOv8 modelinin türüne göre sınırlayıcı kutulara veya maskelere veya güven puanlarına sahip olacaktır. Çıktı buna göre çizilebilir.
2.1.1. Çıkarım sonuçları oluşturun ve çıktıyı çizin:
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. Sonuçlar:
Nesne algılama ve segmentasyon YOLOv8 modellerinin çıktısı aşağıdaki görsellerde gösterilmektedir:
3. temizlemek
CloudFormation yığınını silme başlangıçta oluşturulan tüm kaynakları kaldırırdı. Ancak CloudFormation şu anda uç noktayı, uç nokta yapılandırmasını ve modeli otomatik olarak kaldıracak şekilde yapılandırılmamıştır. Barındırılan uç nokta kullanılmıyorsa maliyetten tasarruf etmek için onu kaldırmak iyi bir uygulamadır. Aşağıdaki gibi yapılabilir:
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)
Sonuç
Bu gönderide, önceden eğitilmiş bir YOLOv8'in nasıl barındırılacağını gösterdik. PyTorchModel
bir SageMaker uç noktasında ve uç noktayı çağırarak çıkarım sonuçlarını test edin. Ayrıntılı kod şu adreste mevcuttur: GitHubve CloudFormation yığını şablonu GitHub'da da mevcuttur.
SageMaker uç noktaları hakkında daha fazla bilgi edinmek için lütfen kontrol edin Uç noktanızı oluşturun ve modelinizi dağıtın ve PyTorch'u Amazon SageMaker ile kullanınkullanarak vurgulanan PyTorchModel
SageMaker'da. İşlem kullanılarak otomatikleştirilebilir SageMaker için CloudFormation desteği.
yazarlar hakkında
kevin şarkı AWS Profesyonel Hizmetler'de Veri Bilimcisidir. Biyofizik alanında doktora derecesine sahiptir ve bilgisayarlı görü ve makine öğrenimi çözümleri oluşturma konusunda beş yıldan fazla endüstri deneyimine sahiptir.
Romil Şah AWS Profesyonel Hizmetler'de IoT Uç Veri Bilimcisidir. Romil, bilgisayar görüşü, makine öğrenimi ve IoT uç cihazlarında altı yıldan fazla endüstri deneyimine sahiptir. Müşterilerin endüstriyel bir kurulumdaki uç cihazlar için makine öğrenimi modellerini optimize etmelerine ve devreye almalarına yardımcı oluyor.
- SEO Destekli İçerik ve Halkla İlişkiler Dağıtımı. Bugün Gücünüzü Artırın.
- Plato blok zinciri. Web3 Metaverse Zekası. Bilgi Güçlendirildi. Buradan Erişin.
- Kaynak: https://aws.amazon.com/blogs/machine-learning/hosting-yolov8-pytorch-model-on-amazon-sagemaker-endpoints/
- :dır-dir
- 1
- 10
- 100
- 7
- a
- Hakkımızda
- erişim
- Karşılamak
- göre
- Hesap
- doğruluk
- ilave
- adres
- Türkiye
- veriyor
- Amazon
- Amazon Adaçayı Yapıcı
- ve
- api
- ARE
- Dizi
- AS
- At
- otomatikleştirmek
- Otomatik
- otomatik olarak
- mevcut
- AWS
- AWS Profesyonel Hizmetleri
- top
- merkezli
- BE
- olmak
- Biyofizik
- Blog
- kutular
- bina
- otobüs
- by
- CAN
- yetenekleri
- Kontrol
- sınıf
- kod
- renk
- COM
- bilgisayar
- Bilgisayar görüşü
- güven
- yapılandırma
- içeren
- içerik
- içindekiler
- dönüştürmek
- maliyetler
- yaratmak
- çevrimiçi kurslar düzenliyorlar.
- oluşturur
- oluşturma
- Şu anda
- görenek
- Müşteriler
- veri
- veri bilimcisi
- datetime
- gösterdi
- gösteriyor
- bağlı
- dağıtmak
- dağıtma
- açılma
- detaylı
- ayrıntılar
- Bulma
- cihaz
- Cihaz
- farklı
- direkt olarak
- dağıtıldı
- indir
- indirme
- çekmek
- kolayca
- kenar
- verim
- ya
- Son nokta
- Mühendisler
- yürütme
- deneyim
- az
- fileto
- kesinleşmiş
- Nihayet
- bulmak
- Ad
- odak
- takip etme
- şu
- İçin
- itibaren
- fonksiyonlar
- daha fazla
- oluşturmak
- oluşturulan
- GitHub
- Tercih Etmenizin
- Var
- yardım
- Vurgulamak
- özeti
- tutar
- ev sahibi
- ev sahipliği yaptı
- hosting
- ana
- Ne kadar
- Nasıl Yapılır
- Ancak
- HTML
- HTTPS
- Kimlik
- idx
- görüntü
- görüntüleri
- ithalat
- in
- Sanayi
- sanayi
- giriş
- kurmak
- örnek
- faiz
- ilgili
- ilgili
- IOT
- konu
- IT
- ONUN
- jpg
- json
- bilinen
- Soyad
- ÖĞRENİN
- öğrenme
- Kütüphane
- Lisans
- yükleme
- Çok
- makine
- makine öğrenme
- Ana
- yönetim
- çok
- maske
- Maskeler
- matplotlib
- ML
- model
- modelleri
- değiştirmek
- Daha
- çoklu
- gerek
- defter
- dizi
- nesne
- Nesne algılama
- of
- on
- optimize
- sipariş
- aslında
- OS
- ana hatlar
- çıktı
- dışında
- Geçen
- boru hattı
- Platon
- Plato Veri Zekası
- PlatoVeri
- Lütfen
- Popüler
- Çivi
- uygulama
- Predictor
- mevcut
- sundu
- süreç
- işleme
- profesyonel
- sağlamak
- sağlar
- Python
- pytorch
- yükseltmek
- rasgele
- Okumak
- okuyucular
- son
- serbest
- serbest
- Kaldır
- Depo
- Yer Alan Kurallar
- Kaynaklar
- yanıt
- sonuç
- Sonuçlar
- dönüş
- koşmak
- koşu
- sagemaker
- İndirim
- ölçeklenebilir
- ölçek
- ölçekleme
- bilim adamı
- bilim adamları
- Seaborn
- Bölüm
- bölünme
- Hizmetler
- kurulum
- Shape
- meli
- gösterilen
- Basit
- tek
- ALTINCI
- çözüm
- Çözümler
- yığın
- adım
- Basamaklar
- hafızası
- saklı
- mağaza
- yapı
- Başarılı olarak
- destek
- Görev
- takım
- şablon
- test
- o
- The
- ve bazı Asya
- zaman
- için
- birlikte
- meşale
- Torchvizyon
- altında
- Yüklenen
- us
- kullanıcı
- vizyonumuz
- İYİ
- hangi
- irade
- ile
- içinde
- olur
- yıl
- Yolo
- Sen
- zefirnet