A modellek nagyarányú üzembe helyezése nehézkes feladat lehet sok adattudós és gépi tanulási mérnök számára. Az Amazon SageMaker végpontjai azonban egyszerű megoldást kínálnak a gépi tanulási (ML) modellkövetkeztetések üzembe helyezésére és skálázására. Az utolsónk blogbejegyzés és a GitHub repo a fogadásról a YOLOv5 TensorFlowModel
on Amazon SageMaker Végpontok nagy érdeklődést váltott ki olvasóink körében. Sok olvasó érdeklődött a YOLOv5 modell hosztolásának megtanulása iránt is PyTorch
. A probléma megoldásához és a közelmúltban megjelent a YOLOv8 modelltől Ultralytics, bemutatjuk ezt a bejegyzést a YOLOv8 fogadásáról PyTorchModel
a SageMaker végpontokon. A GNU GPL8 licenc alatt terjesztett YOLOv3 modell egy népszerű objektumészlelési modell, amely futásidejű hatékonyságáról és észlelési pontosságáról ismert. Az Amazon SageMaker végpontjai könnyen méretezhető és költségoptimalizált megoldást kínálnak a modellek telepítéséhez.
Megoldás áttekintése
A következő kép felvázolja a YOLOv8-modell SageMaker-végpont használatával történő üzemeltetéséhez és a végpont felhasználóként történő meghívásához használt AWS-szolgáltatásokat. A megoldás használ AWS felhőképződés hogy automatizáljuk a SageMaker példány létrehozását és klónozzuk a mi GitHub adattár a példányhoz. A SageMaker notebook eléri és letölti a YOLOv8 PyTorch modellt, és eltárolja az egyéni következtetési kódot a modellel együtt egy Amazon egyszerű tárolási szolgáltatás (Amazon S3) vödör. A jegyzetfüzetben található lépések kiemelik a SageMaker végpont létrehozását, amely a YOLOv8 PyTorch modellt és az egyéni következtetési kódot tartalmazza. A notebook bemutatja a végpont tesztelésének és az eredmények ábrázolásának módját is. A megoldás a következő lépésekből áll:
- Létrehoztunk egy GitHub adattárat két notebookból
1_DeployEndpoint.ipynb
és a2_TestEndpoint.ipynb
, Alatt asm-notebook/
könyvtárban. - Az AWS CloudFormation sablon lefut, létrehoz egy SageMaker Notebook-példányt, majd klónozza a GitHub-tárat.
- A jegyzetfüzet
1_DeployEndpoint.ipynb
a YOLOv8 modell letöltésére szolgál. - A YOLOv8 modellt és a következtetési kódot a rendszer a következőként tárolja
model.tar.gz
az Amazon S3-ban. - A SageMaker végpont létrehozása a
model.tar.gz
. - A jegyzetfüzet
2_TestEndpoint.ipynb
a végpont tesztelésére és az eredmények összegyűjtésére szolgál.
Előfeltételek
AWS-fiók a következővel: AWS Identity and Access Management (IAM) szerepkörök amely hozzáférést biztosít:
- AWS felhőképződés
- Amazon SageMaker
- Amazon S3
1. Hozd a YOLOv8-at egy SageMaker-végponton
Az Ultralytics több YOLOv8 modellel rendelkezik különböző képességekkel. Ezek a következőkre oszlanak:
- Objektumfelismerés (
yolov8l.pt, yolov8m.pt, yolov8n.pt, yolov8s.pt, yolov8x.pt, yolov8x6.pt
) - szegmentálás (
yolov8l-seg.pt, yolov8m-seg.pt, yolov8n-seg.pt, yolov8s-seg.pt, yolov8x-seg.pt
) - Osztályozás (
yolov8l-cls.pt, yolov8m-cls.pt, yolov8n-cls.pt, yolov8s-cls.pt, yolov8x-cls.pt
)
Ebben a blogban a tárgyfelismerésre összpontosítunk yolov8l.pt
PyTorch modell. Annak érdekében, hogy a YOLOv8 modellt és az egyéni következtetési kódot a SageMaker végponton tárolhassák, ezeket együtt kell tömöríteni model.tar.gz
a következő szerkezettel:
model.tar.gz ├─ code/ │ ├── inference.py │ └── requirements.txt └── yolov8l.pt
A modell súlyai yolov8l.pt
fájlnak kívül kell lennie code/
könyvtárat és a fő következtetési python szkriptet inference.py
alatt kell lennie, amely a modell betöltéséhez, a bemenet elemzéséhez, a következtetés futtatásához és a kimenet utófeldolgozásához szükséges függvényeket tartalmazza. code/
Könyvtár. További részletek a inference.py
a következő részben mutatjuk be.
1.1. Egyedi következtetési kód
A folyamattól és a kód munkafolyamatától függően a SageMaker végpontok bemenetei és kimenetei változhatnak. Ebben a bejegyzésben egy munkafolyamatot mutatunk be az a numpy
tömb a végpontig és a feldolgozás. A végpont bemenetei azonban lehetnek json
vagy szöveget is. A munkafolyamattól függően módosítania kell a funkciókat inference.py
különböző bemenetek és kimenetek elhelyezésére. Ezenkívül a YOLOv8 legutóbbi kiadásával az Ultralytics csapata kiadta Python API-ját, amely lehetővé teszi a YOLO könyvtár közvetlen telepítését requirements.txt
és importálja a modellt inference.py
.
1.1.1. Tartalom a 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. Tartalom a code/requirements.txt
:
Miután az összes fájl tartalmát model.tar.gz
befejeződött, futtassa a következő parancsot egy tar-labda létrehozásához:
$ tar -czvf model.tar.gz code/ yolov8l.pt
1.2. Házigazda model.tar.gz
a SageMaker végponthoz:
Ez néhány lépést foglal magában, ahol a model.tar.gz
először töltik fel az S3 vödörbe. A feltöltött műterméket egy SageMaker PyTorchModel létrehozására használják. És végül, ez a PyTorchModel használható a modell SageMaker végponton való üzembe helyezésére.
1.2.1. Töltse fel a modellt és a következtetési kódot az S3-ba:
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. A SageMaker PyTorchModel létrehozása:
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. Fordítsa le és tárolja a modellt egy végponton:
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. Tesztelje a SageMaker végpontot
Miután a végpont sikeresen hosztolt, használható következtetések futtatására. Ebben a lépésben először beolvasunk egy képet, átalakítjuk bájtokká, és lefuttatjuk a következtetést úgy, hogy a bájtokat bemenetként adjuk át a végpontnak. A generált eredmények határolókeretekkel vagy maszkokkal vagy megbízhatósági pontszámokkal rendelkeznének a tárhelyszolgáltatáshoz használt YOLOv8 modell típusa alapján. A kimenet ennek megfelelően ábrázolható.
2.1.1. Következtetési eredmények generálása és kimeneti ábrázolás:
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. Eredmények:
Az objektumészlelési és szegmentálási YOLOv8 modellek kimenete a következő képeken látható:
3. Tisztítsa meg
A CloudFormation verem törlése eltávolítja az összes eredetileg létrehozott erőforrást. A CloudFormation azonban jelenleg nincs úgy konfigurálva, hogy automatikusan eltávolítsa a végpontot, a végpont-konfigurációt és a modellt. Ha a hosztolt végpont nincs használatban, a költségek megtakarítása érdekében célszerű eltávolítani. Ezt a következőképpen lehet megtenni:
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)
Következtetés
Ebben a bejegyzésben bemutattuk, hogyan lehet előképzett YOLOv8-at fogadni PyTorchModel
egy SageMaker végponton, és tesztelje a következtetés eredményeit a végpont meghívásával. A részletes kód elérhető a GitHub, és a sablon CloudFormation verem a GitHubon is elérhető.
Ha többet szeretne megtudni a SageMaker végpontjairól, kérjük, nézze meg Hozza létre a végpontot, és helyezze üzembe a modellt és a Használja a PyTorch-ot az Amazon SageMakerrel, amely kiemeli segítségével PyTorchModel
a SageMakeren. A folyamat segítségével automatizálható CloudFormation támogatás a SageMaker számára.
A szerzőkről
Kevin Song az AWS Professional Services adattudósa. PhD fokozattal rendelkezik biofizikából, és több mint öt éves iparági tapasztalattal rendelkezik a számítógépes látás és a gépi tanulási megoldások építésében.
Romil Shah az IoT Edge Data Scientist az AWS Professional Servicesnél. A Romil több mint hat éves iparági tapasztalattal rendelkezik a számítógépes látás, a gépi tanulás és az IoT éleszközök terén. Részt vesz abban, hogy segítsen az ügyfeleknek gépi tanulási modelljeik optimalizálásában és üzembe helyezésében az élvonalbeli eszközökhöz ipari környezetben.
- SEO által támogatott tartalom és PR terjesztés. Erősödjön még ma.
- Platoblockchain. Web3 metaverzum intelligencia. Felerősített tudás. Hozzáférés itt.
- Forrás: https://aws.amazon.com/blogs/machine-learning/hosting-yolov8-pytorch-model-on-amazon-sagemaker-endpoints/
- :is
- 1
- 10
- 100
- 7
- a
- Rólunk
- hozzáférés
- elhelyezésére
- Eszerint
- Fiók
- pontosság
- mellett
- cím
- Minden termék
- lehetővé teszi, hogy
- amazon
- Amazon SageMaker
- és a
- api
- VANNAK
- Sor
- AS
- At
- automatizált
- Automatizált
- automatikusan
- elérhető
- AWS
- AWS professzionális szolgáltatások
- labda
- alapján
- BE
- hogy
- Biofizika
- Blog
- dobozok
- Épület
- busz
- by
- TUD
- képességek
- ellenőrizze
- osztály
- kód
- szín
- COM
- számítógép
- Számítógépes látás
- bizalom
- Configuration
- tartalmaz
- tartalom
- tartalom
- megtérít
- kiadások
- teremt
- készítette
- teremt
- teremtés
- Jelenleg
- szokás
- Ügyfelek
- dátum
- adattudós
- dátum idő
- igazolták
- mutatja
- attól
- telepíteni
- bevezetéséhez
- bevetés
- részletes
- részletek
- Érzékelés
- eszköz
- Eszközök
- különböző
- közvetlenül
- megosztott
- letöltés
- letöltések
- húz
- könnyen
- él
- hatékonyság
- bármelyik
- Endpoint
- Mérnökök
- végrehajtó
- tapasztalat
- kevés
- filé
- véglegesített
- Végül
- Találjon
- vezetéknév
- Összpontosít
- következő
- következik
- A
- ból ből
- funkciók
- további
- generál
- generált
- GitHub
- jó
- Legyen
- segít
- Kiemel
- kiemeli
- tart
- vendéglátó
- házigazdája
- tárhely
- hosts
- Hogyan
- How To
- azonban
- HTML
- HTTPS
- Identitás
- IDX
- kép
- képek
- importál
- in
- ipari
- ipar
- bemenet
- telepíteni
- példa
- kamat
- érdekelt
- részt
- tárgyak internete
- kérdés
- IT
- ITS
- jpg
- json
- ismert
- keresztnév
- TANUL
- tanulás
- könyvtár
- Engedély
- betöltés
- Sok
- gép
- gépi tanulás
- Fő
- vezetés
- sok
- maszk
- maszkok
- matplotlib
- ML
- modell
- modellek
- módosítása
- több
- többszörös
- Szükség
- jegyzetfüzet
- számtalan
- tárgy
- Objektumfelismerés
- of
- on
- Optimalizálja
- érdekében
- eredetileg
- OS
- körvonalak
- teljesítmény
- kívül
- Múló
- csővezeték
- Plató
- Platón adatintelligencia
- PlatoData
- kérem
- Népszerű
- állás
- gyakorlat
- Predictor
- be
- bemutatott
- folyamat
- feldolgozás
- szakmai
- ad
- biztosít
- Piton
- pytorch
- emel
- véletlen
- Olvass
- olvasók
- új
- engedje
- felszabaduló
- eltávolítása
- raktár
- követelmények
- Tudástár
- válasz
- eredményez
- Eredmények
- visszatérés
- futás
- futás
- sagemaker
- Megtakarítás
- skálázható
- Skála
- skálázás
- Tudós
- tudósok
- tengeren született
- Rész
- szegmentáció
- Szolgáltatások
- felépítés
- Alak
- kellene
- mutatott
- Egyszerű
- egyetlen
- SIX
- megoldások
- Megoldások
- verem
- Lépés
- Lépései
- tárolás
- memorizált
- árnyékolók
- struktúra
- sikeresen
- támogatás
- Feladat
- csapat
- sablon
- teszt
- hogy
- A
- azok
- idő
- nak nek
- együtt
- fáklya
- Torchvision
- alatt
- feltöltve
- us
- használó
- látomás
- JÓL
- ami
- lesz
- val vel
- belül
- lenne
- év
- Yolo
- te
- A te
- zephyrnet