Implementarea modelelor la scară poate fi o sarcină greoaie pentru mulți oameni de știință de date și ingineri de învățare automată. Cu toate acestea, punctele finale Amazon SageMaker oferă o soluție simplă pentru implementarea și scalarea inferențelor modelului de învățare automată (ML). Ultimul nostru blog și GitHub repo la găzduirea a YOLOv5 TensorFlowModel
on Amazon SageMaker Puncte finale a stârnit mult interes din partea cititorilor noștri. Mulți cititori au fost, de asemenea, interesați să învețe cum să găzduiască modelul YOLOv5 folosind PyTorch
. Pentru a aborda această problemă și cu lansarea recentă a fișierului YOLOv8 model din Ultralitice, vă prezentăm această postare despre cum să găzduiți un YOLOv8 PyTorchModel
pe punctele finale SageMaker. Modelul YOLOv8, distribuit sub licența GNU GPL3, este un model popular de detectare a obiectelor cunoscut pentru eficiența sa de rulare, precum și pentru acuratețea detectării. Punctele finale Amazon SageMaker oferă o soluție ușor scalabilă și optimizată din punct de vedere al costurilor pentru implementarea modelului.
Prezentare generală a soluțiilor
Următoarea imagine prezintă serviciile AWS utilizate pentru a găzdui modelul YOLOv8 folosind un punct final SageMaker și pentru a invoca punctul final ca utilizator. Soluția folosește Formarea AWS Cloud pentru a automatiza crearea unei instanțe SageMaker și a clona GitHub depozitul la instanță. Notebook-ul SageMaker accesează și descarcă un model YOLOv8 PyTorch și stochează codul de inferență personalizat împreună cu modelul într-un Serviciul Amazon de stocare simplă (Amazon S3) găleată. Pașii din bloc-notes evidențiază crearea punctului final SageMaker care găzduiește modelul YOLOv8 PyTorch și codul de inferență personalizat. Notebook-ul demonstrează, de asemenea, cum să testați punctul final și să trasați rezultatele. Soluția constă din următorii pași:
- Am creat un depozit GitHub cu două notebook-uri
1_DeployEndpoint.ipynb
și2_TestEndpoint.ipynb
, Subsm-notebook/
director. - Șablonul AWS CloudFormation rulează, creează o instanță SageMaker Notebook și apoi clonează depozitul GitHub.
- Caietul
1_DeployEndpoint.ipynb
este folosit pentru a descărca modelul YOLOv8. - Modelul YOLOv8 și codul de inferență sunt stocate ca
model.tar.gz
în Amazon S3. - Un punct final SageMaker este creat prin găzduirea
model.tar.gz
. - Caietul
2_TestEndpoint.ipynb
este utilizat pentru a testa punctul final și pentru a colecta rezultate.
Cerințe preliminare
Cont AWS cu Roluri AWS Identity and Access Management (IAM). care oferă acces la:
- Formarea AWS Cloud
- Amazon SageMaker
- Amazon S3
1. Găzduiți YOLOv8 pe un punct final SageMaker
Ultralytics are mai multe modele YOLOv8 cu capacități diferite. Ele sunt împărțite în următoarele:
- Detectarea obiectelor (
yolov8l.pt, yolov8m.pt, yolov8n.pt, yolov8s.pt, yolov8x.pt, yolov8x6.pt
) - Segmentarea (
yolov8l-seg.pt, yolov8m-seg.pt, yolov8n-seg.pt, yolov8s-seg.pt, yolov8x-seg.pt
) - Clasificare (
yolov8l-cls.pt, yolov8m-cls.pt, yolov8n-cls.pt, yolov8s-cls.pt, yolov8x-cls.pt
)
În acest blog, ne concentrăm pe detectarea obiectelor folosind yolov8l.pt
Modelul PyTorch. Pentru a găzdui modelul YOLOv8 și codul de inferență personalizat pe punctul final SageMaker, acestea trebuie să fie comprimate împreună într-un singur model.tar.gz
cu următoarea structură:
model.tar.gz ├─ code/ │ ├── inference.py │ └── requirements.txt └── yolov8l.pt
Greutățile modelului yolov8l.pt
fișierul trebuie să fie în afara code/
directorul și scriptul principal python de inferență inference.py
, care conține funcțiile necesare pentru încărcarea modelului, analizarea intrării, rularea inferenței și post-procesarea ieșirii, ar trebui să se afle sub code/
director. Mai multe detalii pe inference.py
sunt prezentate în secțiunea următoare.
1.1. Cod de inferență personalizat
În funcție de fluxul de lucru și de cod, intrările și ieșirile de la punctele finale SageMaker pot varia. În această postare, vă prezentăm un flux de lucru pentru promovarea unui numpy
matrice la punctul final și procesare. Cu toate acestea, intrările la punctul final pot fi json
sau text, de asemenea. În funcție de fluxul de lucru, trebuie să modificați funcțiile în inference.py
pentru a găzdui diferite intrări și ieșiri. În plus, odată cu lansarea recentă a YOLOv8, echipa Ultralytics și-a lansat API-ul Python, care ne permite să instalăm biblioteca YOLO direct prin requirements.txt
și importați modelul în inference.py
.
1.1.1. Conținutul 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. Conținutul code/requirements.txt
:
Odată ce tot conținutul fișierului pentru model.tar.gz
sunt finalizate, rulați următoarea comandă pentru a crea o minge tar:
$ tar -czvf model.tar.gz code/ yolov8l.pt
1.2. Gazdă model.tar.gz
către punctul final SageMaker:
Aceasta implică câțiva pași în care model.tar.gz
este mai întâi încărcat în bucket-ul S3. Artefactul încărcat este folosit pentru a crea un SageMaker PyTorchModel. Și, în sfârșit, acest PyTorchModel este folosit pentru a implementa modelul într-un punct final SageMaker.
1.2.1. Încărcați modelul și codul de inferență în 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. Creați 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. Compilați și găzduiți modelul la un punct final:
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. Testați punctul final SageMaker
Odată ce punctul final este găzduit cu succes, acesta poate fi folosit pentru a rula inferența. În acest pas, vom citi mai întâi o imagine, o vom converti în octeți și vom rula inferențe trecând octeții ca intrare la punctul final. Rezultatele generate ar avea fie căsuțe de delimitare, fie măști, fie scoruri de încredere bazate pe tipul de model YOLOv8 utilizat pentru găzduire. Ieșirea poate fi reprezentată în consecință.
2.1.1. Generați rezultate de inferență și trasați rezultatul:
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. Rezultate:
Ieșirea modelelor YOLOv8 de detectare și segmentare a obiectelor este prezentată în următoarele imagini:
3. Curățați
Ștergerea stivei CloudFormation ar elimina toate resursele care au fost create inițial. Cu toate acestea, CloudFormation nu este configurat în prezent pentru a elimina automat punctul final, configurația punctului final și modelul. Dacă punctul final găzduit nu este utilizat, este o bună practică să îl eliminați pentru a economisi costuri. Se poate face astfel:
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)
Concluzie
În această postare, am demonstrat cum să găzduim un YOLOv8 pre-antrenat PyTorchModel
pe un punct final SageMaker și testați rezultatele inferenței invocând punctul final. Codul detaliat este disponibil pe GitHub, iar șablonul CloudFormation este disponibil și pe GitHub.
Pentru a afla mai multe despre punctele finale SageMaker, consultați Creați punctul final și implementați modelul și Utilizați PyTorch cu Amazon SageMaker, care evidențiază utilizarea PyTorchModel
pe SageMaker. Procesul poate fi automatizat folosind Suport CloudFormation pentru SageMaker.
Despre autori
Kevin Song este Data Scientist la AWS Professional Services. El deține un doctorat în biofizică și are mai mult de cinci ani de experiență în industrie în construirea de soluții de viziune computerizată și de învățare automată.
Romil Shah este IoT Edge Data Scientist la AWS Professional Services. Romil are peste șase ani de experiență în industrie în viziune computerizată, învățare automată și dispozitive de vârf IoT. El este implicat în a ajuta clienții să-și optimizeze și să-și implementeze modelele de învățare automată pentru dispozitivele de vârf într-o configurație industrială.
- Distribuție de conținut bazat pe SEO și PR. Amplifică-te astăzi.
- Platoblockchain. Web3 Metaverse Intelligence. Cunoștințe amplificate. Accesați Aici.
- Sursa: https://aws.amazon.com/blogs/machine-learning/hosting-yolov8-pytorch-model-on-amazon-sagemaker-endpoints/
- :este
- 1
- 10
- 100
- 7
- a
- Despre Noi
- acces
- găzdui
- în consecință
- Cont
- precizie
- plus
- adresa
- TOATE
- permite
- Amazon
- Amazon SageMaker
- și
- api
- SUNT
- Mulțime
- AS
- At
- automatizarea
- Automata
- în mod automat
- disponibil
- AWS
- Servicii profesionale AWS
- bilă
- bazat
- BE
- fiind
- Biofizică
- Blog
- Dulapuri
- Clădire
- luați autobuzul
- by
- CAN
- capacități
- verifica
- clasă
- cod
- culoare
- COM
- calculator
- Computer Vision
- încredere
- Configuraţie
- conține
- conţinut
- conținut
- converti
- Cheltuieli
- crea
- a creat
- creează
- creaţie
- În prezent
- personalizat
- clienţii care
- de date
- om de știință de date
- datetime
- demonstrat
- demonstrează
- În funcție
- implementa
- Implementarea
- desfășurarea
- detaliat
- detalii
- Detectare
- dispozitiv
- Dispozitive
- diferit
- direct
- distribuite
- Descarca
- download-uri
- a desena
- cu ușurință
- Margine
- eficiență
- oricare
- Punct final
- inginerii
- executând
- experienţă
- puțini
- Fișier
- finalizat
- În cele din urmă
- Găsi
- First
- Concentra
- următor
- urmează
- Pentru
- din
- funcții
- mai mult
- genera
- generată
- GitHub
- bine
- Avea
- ajutor
- Evidențiați
- highlights-uri
- deține
- gazdă
- găzduit
- găzduire
- Gazdele
- Cum
- Cum Pentru a
- Totuși
- HTML
- HTTPS
- Identitate
- idx
- imagine
- imagini
- import
- in
- industrial
- industrie
- intrare
- instala
- instanță
- interes
- interesat
- implicat
- IoT
- problema
- IT
- ESTE
- jpg
- JSON
- cunoscut
- Nume
- AFLAȚI
- învăţare
- Bibliotecă
- Licență
- încărcare
- Lot
- maşină
- masina de învățare
- Principal
- administrare
- multe
- masca
- Măști
- matplotlib
- ML
- model
- Modele
- modifica
- mai mult
- multiplu
- Nevoie
- caiet
- NumPy
- obiect
- Detectarea obiectelor
- of
- on
- Optimizați
- comandă
- iniţial
- OS
- contururi
- producție
- exterior
- Care trece
- conducte
- Plato
- Informații despre date Platon
- PlatoData
- "vă rog"
- Popular
- Post
- practică
- Predictor
- prezenta
- prezentat
- proces
- prelucrare
- profesional
- furniza
- furnizează
- Piton
- pirtorh
- ridica
- aleator
- Citeste
- cititori
- recent
- eliberaţi
- eliberat
- scoate
- depozit
- Cerinţe
- Resurse
- răspuns
- rezultat
- REZULTATE
- reveni
- Alerga
- funcţionare
- sagemaker
- Economisiți
- scalabil
- Scară
- scalare
- Om de stiinta
- oamenii de stiinta
- născut în mare
- Secțiune
- segmentarea
- Servicii
- configurarea
- Modela
- să
- indicat
- simplu
- singur
- SIX
- soluţie
- soluţii
- stivui
- Pas
- paşi
- depozitare
- stocate
- magazine
- structura
- Reușit
- a sustine
- Sarcină
- echipă
- șablon
- test
- acea
- lor
- timp
- la
- împreună
- lanternă
- Torchvision
- în
- încărcat
- us
- Utilizator
- viziune
- BINE
- care
- voi
- cu
- în
- ar
- ani
- Yolo
- Tu
- Ta
- zephyrnet