Uvajanje modelov v velikem obsegu je lahko za mnoge podatkovne znanstvenike in inženirje strojnega učenja okorna naloga. Vendar pa končne točke Amazon SageMaker zagotavljajo preprosto rešitev za uvajanje in prilagajanje sklepov o modelu strojnega učenja (ML). Naš zadnji blog post in GitHub repo na gostovanju a YOLOv5 TensorFlowModel
on Amazon SageMaker Končne točke vzbudil veliko zanimanja naših bralcev. Številne bralce je zanimalo tudi, kako gostiti model YOLOv5 z uporabo PyTorch
. Za obravnavo te težave in z nedavno izdajo YOLOv8 model iz Ultralitiki, predstavljamo to objavo o tem, kako gostiti YOLOv8 PyTorchModel
na končnih točkah SageMaker. Model YOLOv8, distribuiran pod licenco GNU GPL3, je priljubljen model za odkrivanje objektov, znan po učinkovitosti izvajanja in natančnosti zaznavanja. Končne točke Amazon SageMaker zagotavljajo enostavno razširljivo in stroškovno optimizirano rešitev za uvajanje modela.
Pregled rešitev
Naslednja slika opisuje storitve AWS, ki se uporabljajo za gostovanje modela YOLOv8 z uporabo končne točke SageMaker in priklic končne točke kot uporabnik. Rešitev uporablja Oblikovanje oblaka AWS za avtomatizacijo ustvarjanja primerka SageMaker in kloniranje našega GitHub repozitorij v instanco. Beležnica SageMaker dostopa do modela YOLOv8 PyTorch in ga prenese ter shrani sklepno kodo po meri skupaj z modelom v Preprosta storitev shranjevanja Amazon (Amazon S3) vedro. Koraki v zvezku poudarjajo ustvarjanje končne točke SageMaker, ki gosti model YOLOv8 PyTorch in kodo sklepanja po meri. Beležnica tudi prikazuje, kako preizkusiti končno točko in narisati rezultate. Rešitev je sestavljena iz naslednjih korakov:
- Ustvarili smo repozitorij GitHub z dvema zvezkoma
1_DeployEndpoint.ipynb
in2_TestEndpoint.ipynb
Podsm-notebook/
imenik. - Predloga AWS CloudFormation se zažene, ustvari primerek SageMaker Notebook in nato klonira repozitorij GitHub.
- Zvezek
1_DeployEndpoint.ipynb
se uporablja za prenos modela YOLOv8. - Model YOLOv8 in koda sklepanja sta shranjena kot
model.tar.gz
v Amazon S3. - Končna točka SageMaker se ustvari z gostovanjem
model.tar.gz
. - Zvezek
2_TestEndpoint.ipynb
se uporablja za testiranje končne točke in zbiranje rezultatov.
Predpogoji
Račun AWS z Vloge AWS Identity and Access Management (IAM). ki omogoča dostop do:
- Oblikovanje oblaka AWS
- Amazon SageMaker
- Amazon S3
1. Gostite YOLOv8 na končni točki SageMaker
Ultralytics ima več modelov YOLOv8 z različnimi zmogljivostmi. Razdeljeni so na naslednje:
- Zaznavanje objektov (
yolov8l.pt, yolov8m.pt, yolov8n.pt, yolov8s.pt, yolov8x.pt, yolov8x6.pt
) - Segmentacija (
yolov8l-seg.pt, yolov8m-seg.pt, yolov8n-seg.pt, yolov8s-seg.pt, yolov8x-seg.pt
) - Razvrstitev (
yolov8l-cls.pt, yolov8m-cls.pt, yolov8n-cls.pt, yolov8s-cls.pt, yolov8x-cls.pt
)
V tem spletnem dnevniku se osredotočamo na uporabo zaznavanja predmetov yolov8l.pt
Model PyTorch. Če želite gostiti model YOLOv8 in kodo sklepanja po meri na končni točki SageMaker, ju je treba stisniti skupaj v eno model.tar.gz
z naslednjo strukturo:
model.tar.gz ├─ code/ │ ├── inference.py │ └── requirements.txt └── yolov8l.pt
Teža modela yolov8l.pt
datoteka mora biti zunaj code/
imenik in glavni sklepni skript python inference.py
, ki vsebuje funkcije, potrebne za nalaganje modela, razčlenjevanje vnosa, izvajanje sklepanja in naknadno obdelavo izhoda, mora biti pod code/
imenik. Dodatne podrobnosti na inference.py
so predstavljeni v naslednjem razdelku.
1.1. Koda sklepanja po meri
Odvisno od vašega cevovoda in delovnega toka kode se lahko vhodi in izhodi iz končnih točk SageMaker razlikujejo. V tej objavi predstavljamo potek dela za posredovanje a numpy
matriko do končne točke in obdelavo. Vendar pa so lahko vhodi v končno točko json
ali tudi besedilo. Glede na vaš potek dela morate spremeniti funkcije v inference.py
za prilagajanje različnih vhodov in izhodov. Poleg tega je z nedavno izdajo YOLOv8 ekipa Ultralytics izdala svoj Python API, ki nam omogoča namestitev knjižnice YOLO neposredno prek requirements.txt
in uvozite model inference.py
.
1.1.1. Vsebina 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. Vsebina code/requirements.txt
:
Ko je vsa vsebina datoteke za model.tar.gz
so dokončani, zaženite naslednji ukaz, da ustvarite tar žogo:
$ tar -czvf model.tar.gz code/ yolov8l.pt
1.2. Gostitelj model.tar.gz
do končne točke SageMaker:
To vključuje nekaj korakov, v katerih model.tar.gz
se najprej naloži v vedro S3. Naložen artefakt se uporabi za ustvarjanje SageMaker PyTorchModel. In končno, ta PyTorchModel se uporablja za uvajanje modela v končno točko SageMaker.
1.2.1. Naloži model in kodo sklepanja v 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. Ustvari 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. Prevedite in gostite model na končni točki:
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. Preizkusite končno točko SageMaker
Ko je končna točka uspešno gostovana, jo je mogoče uporabiti za izvajanje sklepanja. V tem koraku bomo najprej prebrali sliko, jo pretvorili v bajte in zagnali sklepanje tako, da bomo bajte posredovali kot vhod v končno točko. Ustvarjeni rezultati bi imeli bodisi omejevalne okvirje ali maske ali rezultate zaupanja glede na vrsto modela YOLOv8, uporabljenega za gostovanje. Rezultat se lahko ustrezno nariše.
2.1.1. Ustvarite rezultate sklepanja in narišite rezultate:
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. Rezultati:
Rezultat modelov YOLOv8 za odkrivanje in segmentacijo objektov je prikazan na naslednjih slikah:
3. Očistite
Brisanje sklada CloudFormation bi odstranil vse vire, ki so bili prvotno ustvarjeni. Vendar pa CloudFormation trenutno ni konfiguriran za samodejno odstranjevanje končne točke, konfiguracije končne točke in modela. Če se gostujoča končna točka ne uporablja, je dobro, da jo odstranite, da prihranite stroške. To je mogoče storiti na naslednji način:
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)
zaključek
V tej objavi smo pokazali, kako gostiti vnaprej usposobljen YOLOv8 PyTorchModel
na končni točki SageMaker in preizkusite rezultate sklepanja s priklicem končne točke. Podrobna koda je na voljo na GitHub, na GitHubu pa je na voljo tudi sklad predlog CloudFormation.
Če želite izvedeti več o končnih točkah SageMaker, si oglejte Ustvarite svojo končno točko in uvedite svoj model in Uporabite PyTorch z Amazon SageMaker, ki izpostavlja uporabo PyTorchModel
na SageMaker. Postopek je mogoče avtomatizirati z uporabo Podpora CloudFormation za SageMaker.
O avtorjih
Kevin Song je podatkovni znanstvenik pri AWS Professional Services. Ima doktorat iz biofizike in ima več kot pet let izkušenj v industriji pri gradnji rešitev računalniškega vida in strojnega učenja.
Romil Šah je IoT Edge Data Scientist pri AWS Professional Services. Romil ima več kot šest let izkušenj v industriji na področju računalniškega vida, strojnega učenja in robnih naprav IoT. Strankam pomaga pri optimizaciji in uvajanju njihovih modelov strojnega učenja za robne naprave v industrijski postavitvi.
- Distribucija vsebine in PR s pomočjo SEO. Okrepite se še danes.
- Platoblockchain. Web3 Metaverse Intelligence. Razširjeno znanje. Dostopite tukaj.
- vir: https://aws.amazon.com/blogs/machine-learning/hosting-yolov8-pytorch-model-on-amazon-sagemaker-endpoints/
- : je
- 1
- 10
- 100
- 7
- a
- O meni
- dostop
- prilagoditi
- ustrezno
- Račun
- natančnost
- Poleg tega
- Naslov
- vsi
- omogoča
- Amazon
- Amazon SageMaker
- in
- API
- SE
- Array
- AS
- At
- avtomatizirati
- Avtomatizirano
- samodejno
- Na voljo
- AWS
- Strokovne storitve AWS
- žoga
- temeljijo
- BE
- počutje
- Biofizika
- Blog
- škatle
- Building
- avtobus
- by
- CAN
- Zmogljivosti
- preveriti
- razred
- Koda
- barva
- COM
- računalnik
- Računalniška vizija
- zaupanje
- konfiguracija
- Vsebuje
- vsebina
- Vsebina
- pretvorbo
- stroški
- ustvarjajo
- ustvaril
- ustvari
- Oblikovanje
- Trenutno
- po meri
- Stranke, ki so
- datum
- podatkovni znanstvenik
- Datum čas
- Dokazano
- dokazuje,
- Odvisno
- razporedi
- uvajanja
- uvajanje
- podrobno
- Podrobnosti
- Odkrivanje
- naprava
- naprave
- drugačen
- neposredno
- porazdeljena
- prenesi
- prenosov
- pripravi
- enostavno
- Edge
- učinkovitosti
- bodisi
- Končna točka
- Inženirji
- izvršitve
- izkušnje
- Nekaj
- file
- dokončano
- končno
- Najdi
- prva
- Osredotočite
- po
- sledi
- za
- iz
- funkcije
- nadalje
- ustvarjajo
- ustvarila
- GitHub
- dobro
- Imajo
- pomoč
- Označite
- Poudarki
- drži
- gostitelj
- gostila
- gostovanje
- Gostitelji
- Kako
- Kako
- Vendar
- HTML
- HTTPS
- identiteta
- idx
- slika
- slike
- uvoz
- in
- industrijske
- Industrija
- vhod
- namestitev
- primer
- obresti
- zainteresirani
- vključeni
- Internet stvari
- vprašanje
- IT
- ITS
- jpg
- json
- znano
- Zadnja
- UČITE
- učenje
- Knjižnica
- Licenca
- nalaganje
- Sklop
- stroj
- strojno učenje
- Glavne
- upravljanje
- več
- Maska
- Maske
- matplotlib
- ML
- Model
- modeli
- spremenite
- več
- več
- Nimate
- prenosnik
- otopeli
- predmet
- Zaznavanje objektov
- of
- on
- Optimizirajte
- Da
- originalno
- OS
- obrisi
- izhod
- zunaj
- Podaje
- plinovod
- platon
- Platonova podatkovna inteligenca
- PlatoData
- prosim
- Popular
- Prispevek
- praksa
- Predictor
- predstaviti
- predstavljeni
- Postopek
- obravnavati
- strokovni
- zagotavljajo
- zagotavlja
- Python
- pitorha
- dvigniti
- naključno
- Preberi
- bralci
- nedavno
- sprostitev
- sprosti
- odstrani
- Skladišče
- Zahteve
- viri
- Odgovor
- povzroči
- Rezultati
- vrnitev
- Run
- tek
- sagemaker
- Shrani
- razširljive
- Lestvica
- skaliranje
- Znanstvenik
- Znanstveniki
- morski rojen
- Oddelek
- segmentacija
- Storitve
- nastavitev
- Oblikujte
- shouldnt
- pokazale
- Enostavno
- sam
- SIX
- Rešitev
- rešitve
- sveženj
- Korak
- Koraki
- shranjevanje
- shranjeni
- trgovine
- Struktura
- Uspešno
- podpora
- Naloga
- skupina
- Predloga
- Test
- da
- O
- njihove
- čas
- do
- skupaj
- baklo
- Torchvision
- pod
- naložili
- us
- uporabnik
- Vizija
- Dobro
- ki
- bo
- z
- v
- bi
- let
- Yolo
- Vi
- Vaša rutina za
- zefirnet