Wdrażanie modeli na dużą skalę może być kłopotliwym zadaniem dla wielu analityków danych i inżynierów uczenia maszynowego. Jednak punkty końcowe Amazon SageMaker zapewniają proste rozwiązanie do wdrażania i skalowania wnioskowania modelu uczenia maszynowego (ML). Nasz ostatni blogu i GitHub repo na hostingu a YLOv5 TensorFlowModel
on Amazon Sage Maker Punkty końcowe wzbudził duże zainteresowanie naszych Czytelników. Wielu czytelników było również zainteresowanych poznaniem sposobu hostowania modelu YOLOv5 za pomocą PyTorch
. Aby rozwiązać ten problem i wraz z niedawnym wydaniem pakietu YLOv8 model z Ultralityki, przedstawiamy ten post na temat hostowania YOLOv8 PyTorchModel
na punktach końcowych SageMaker. Model YOLOv8, rozpowszechniany na licencji GNU GPL3, jest popularnym modelem wykrywania obiektów, znanym ze swojej wydajności w czasie wykonywania oraz dokładności wykrywania. Punkty końcowe Amazon SageMaker zapewniają łatwo skalowalne i zoptymalizowane pod względem kosztów rozwiązanie do wdrażania modeli.
Omówienie rozwiązania
Poniższy obraz przedstawia usługi AWS używane do hostowania modelu YOLOv8 przy użyciu punktu końcowego SageMaker i wywoływania punktu końcowego jako użytkownik. Rozwiązanie wykorzystuje Tworzenie chmury AWS aby zautomatyzować tworzenie instancji SageMaker i sklonować naszą GitHub repozytorium do instancji. Notebook SageMaker uzyskuje dostęp i pobiera model YOLOv8 PyTorch oraz przechowuje niestandardowy kod wnioskowania wraz z modelem w Usługa Amazon Simple Storage (Amazon S3) wiadro. Kroki w notatniku podkreślają tworzenie punktu końcowego SageMaker, który obsługuje model YOLOv8 PyTorch i niestandardowy kod wnioskowania. Notatnik pokazuje również, jak przetestować punkt końcowy i wykreślić wyniki. Rozwiązanie składa się z następujących kroków:
- Stworzyliśmy repozytorium GitHub z dwoma notatnikami
1_DeployEndpoint.ipynb
i2_TestEndpoint.ipynb
Podsm-notebook/
katalogiem. - Szablon AWS CloudFormation jest uruchamiany, tworzy instancję SageMaker Notebook, a następnie klonuje repozytorium GitHub.
- Notatnik
1_DeployEndpoint.ipynb
służy do pobierania modelu YOLOv8. - Model YOLOv8 i kod wnioskowania są przechowywane jako
model.tar.gz
w Amazonie S3. - Punkt końcowy SageMaker jest tworzony przez hostowanie pliku
model.tar.gz
. - Notatnik
2_TestEndpoint.ipynb
służy do testowania punktu końcowego i zbierania wyników.
Wymagania wstępne
Konto AWS z Role AWS Identity and Access Management (IAM). który zapewnia dostęp do:
- Tworzenie chmury AWS
- Amazon Sage Maker
- Amazon S3
1. Hostuj YOLOv8 na punkcie końcowym SageMaker
Ultralytics ma wiele modeli YOLOv8 o różnych możliwościach. Dzielą się one na następujące:
- Wykrywanie obiektów (
yolov8l.pt, yolov8m.pt, yolov8n.pt, yolov8s.pt, yolov8x.pt, yolov8x6.pt
) - Segmentacja (
yolov8l-seg.pt, yolov8m-seg.pt, yolov8n-seg.pt, yolov8s-seg.pt, yolov8x-seg.pt
) - Klasyfikacja (
yolov8l-cls.pt, yolov8m-cls.pt, yolov8n-cls.pt, yolov8s-cls.pt, yolov8x-cls.pt
)
W tym blogu skupiamy się na wykrywaniu obiektów za pomocą yolov8l.pt
modelu PyTorcha. Aby hostować model YOLOv8 i niestandardowy kod wnioskowania w punkcie końcowym SageMaker, należy je skompresować w jeden model.tar.gz
o następującej strukturze:
model.tar.gz ├─ code/ │ ├── inference.py │ └── requirements.txt └── yolov8l.pt
Modele ważą yolov8l.pt
plik musi znajdować się poza code/
katalog i główny skrypt Pythona wnioskowania inference.py
, który zawiera funkcje potrzebne do ładowania modelu, analizowania danych wejściowych, uruchamiania wnioskowania i przetwarzania końcowego danych wyjściowych, powinien znajdować się w code/
informator. Dalsze szczegóły dot inference.py
przedstawiono w poniższym rozdziale.
1.1. Niestandardowy kod wnioskowania
W zależności od potoku i przepływu pracy kodu, dane wejściowe i wyjściowe z punktów końcowych SageMaker mogą się różnić. W tym poście przedstawiamy przepływ pracy dotyczący zaliczenia a numpy
array do punktu końcowego i przetwarzania. Jednak dane wejściowe do punktu końcowego mogą być json
lub tekst też. W zależności od przepływu pracy należy zmodyfikować funkcje w inference.py
aby pomieścić różne wejścia i wyjścia. Ponadto, wraz z niedawnym wydaniem YOLOv8, zespół Ultralytics udostępnił API Pythona, które pozwala nam zainstalować bibliotekę YOLO bezpośrednio przez requirements.txt
i zaimportuj model do inference.py
.
1.1.1. Zawartość 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. Zawartość code/requirements.txt
:
Gdy cała zawartość pliku dla model.tar.gz
są sfinalizowane, uruchom następujące polecenie, aby utworzyć kulę tar:
$ tar -czvf model.tar.gz code/ yolov8l.pt
1.2. Gospodarz model.tar.gz
do punktu końcowego SageMaker:
Obejmuje to kilka kroków, w których model.tar.gz
jest najpierw ładowany do zasobnika S3. Przesłany artefakt jest używany do tworzenia SageMaker PyTorchModel. I wreszcie, ten PyTorchModel jest używany do wdrażania modelu w punkcie końcowym SageMaker.
1.2.1. Prześlij model i kod wnioskowania do 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. Utwórz 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. Skompiluj i hostuj model w punkcie końcowym:
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. Przetestuj punkt końcowy SageMaker
Po pomyślnym hostowaniu punktu końcowego można go użyć do uruchomienia wnioskowania. W tym kroku najpierw odczytamy obraz, przekonwertujemy go na bajty i uruchomimy wnioskowanie, przekazując bajty jako dane wejściowe do punktu końcowego. Wygenerowane wyniki miałyby albo obwiednie, albo maski, albo wyniki ufności oparte na typie modelu YOLOv8 używanego do hostingu. Dane wyjściowe można odpowiednio wykreślić.
2.1.1. Wygeneruj wyniki wnioskowania i wykreśl dane wyjściowe:
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. Wyniki:
Dane wyjściowe modeli wykrywania i segmentacji obiektów YOLOv8 pokazano na następujących obrazach:
3. Sprzątać
Usuwanie stosu CloudFormation usunie wszystkie pierwotnie utworzone zasoby. Jednak CloudFormation nie jest obecnie skonfigurowany do automatycznego usuwania punktu końcowego, konfiguracji punktu końcowego i modelu. Jeśli hostowany punkt końcowy nie jest używany, dobrą praktyką jest usunięcie go w celu zaoszczędzenia kosztów. Można to zrobić w następujący sposób:
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)
Wnioski
W tym poście pokazaliśmy, jak hostować wstępnie przeszkoloną aplikację YOLOv8 PyTorchModel
na punkcie końcowym SageMaker i przetestuj wyniki wnioskowania, wywołując punkt końcowy. Szczegółowy kod jest dostępny na GitHub, a stos szablonów CloudFormation jest również dostępny w serwisie GitHub.
Aby dowiedzieć się więcej o punktach końcowych SageMaker, sprawdź Stwórz swój punkt końcowy i wdróż swój model i Użyj PyTorch z Amazon SageMaker, który podkreśla użycie PyTorchModel
na SageMakerze. Proces można zautomatyzować za pomocą Obsługa CloudFormation dla SageMaker.
O autorach
Kevin piosenki jest Data Scientist w AWS Professional Services. Posiada doktorat z biofizyki i ponad pięć lat doświadczenia w branży w budowaniu komputerowych rozwiązań wizyjnych i uczenia maszynowego.
Romil Szach jest analitykiem danych IoT Edge w AWS Professional Services. Romil ma ponad sześcioletnie doświadczenie w branży w dziedzinie wizji komputerowej, uczenia maszynowego i urządzeń brzegowych IoT. Jest zaangażowany w pomaganie klientom w optymalizacji i wdrażaniu ich modeli uczenia maszynowego dla urządzeń brzegowych w konfiguracji przemysłowej.
- Dystrybucja treści i PR oparta na SEO. Uzyskaj wzmocnienie już dziś.
- Platoblockchain. Web3 Inteligencja Metaverse. Wzmocniona wiedza. Dostęp tutaj.
- Źródło: https://aws.amazon.com/blogs/machine-learning/hosting-yolov8-pytorch-model-on-amazon-sagemaker-endpoints/
- :Jest
- 1
- 10
- 100
- 7
- a
- O nas
- dostęp
- pomieścić
- odpowiednio
- Konto
- precyzja
- dodatek
- adres
- Wszystkie kategorie
- pozwala
- Amazonka
- Amazon Sage Maker
- i
- api
- SĄ
- Szyk
- AS
- At
- zautomatyzować
- zautomatyzowane
- automatycznie
- dostępny
- AWS
- Usługi profesjonalne AWS
- piłka
- na podstawie
- BE
- jest
- Biofizyka
- Blog
- Skrzynki
- Budowanie
- autobus
- by
- CAN
- możliwości
- ZOBACZ
- klasa
- kod
- kolor
- COM
- komputer
- Wizja komputerowa
- pewność siebie
- systemu
- zawiera
- zawartość
- treść
- konwertować
- Koszty:
- Stwórz
- stworzony
- tworzy
- tworzenie
- Obecnie
- zwyczaj
- Klientów
- dane
- naukowiec danych
- data i godzina
- wykazać
- demonstruje
- W zależności
- rozwijać
- wdrażanie
- Wdrożenie
- szczegółowe
- detale
- Wykrywanie
- urządzenie
- urządzenia
- różne
- bezpośrednio
- dystrybuowane
- pobieranie
- pliki do pobrania
- rysować
- z łatwością
- krawędź
- efektywność
- bądź
- Punkt końcowy
- Inżynierowie
- wykonywania
- doświadczenie
- kilka
- filet
- sfinalizowane
- W końcu
- Znajdź
- i terminów, a
- Skupiać
- następujący
- następujący sposób
- W razie zamówieenia projektu
- od
- Funkcje
- dalej
- Generować
- wygenerowane
- GitHub
- dobry
- Have
- pomoc
- Atrakcja
- pasemka
- posiada
- gospodarz
- hostowane
- Hosting
- gospodarze
- W jaki sposób
- How To
- Jednak
- HTML
- HTTPS
- tożsamość
- IDX
- obraz
- zdjęcia
- importować
- in
- przemysłowy
- przemysł
- wkład
- zainstalować
- przykład
- odsetki
- zainteresowany
- zaangażowany
- Internet przedmiotów
- problem
- IT
- JEGO
- jpg
- json
- znany
- Nazwisko
- UCZYĆ SIĘ
- nauka
- Biblioteka
- Licencja
- załadunek
- Partia
- maszyna
- uczenie maszynowe
- Główny
- i konserwacjami
- wiele
- maska
- Maski
- matplotlib
- ML
- model
- modele
- modyfikować
- jeszcze
- wielokrotność
- Potrzebować
- notatnik
- tępy
- przedmiot
- Wykrywanie obiektów
- of
- on
- Optymalizacja
- zamówienie
- pierwotnie
- OS
- wytyczne
- wydajność
- zewnętrzne
- Przechodzący
- rurociąg
- plato
- Analiza danych Platona
- PlatoDane
- Proszę
- Popularny
- Post
- praktyka
- Urządzenie prognozujące
- teraźniejszość
- przedstawione
- wygląda tak
- przetwarzanie
- profesjonalny
- zapewniać
- zapewnia
- Python
- płomień
- podnieść
- przypadkowy
- Czytaj
- czytelnicy
- niedawny
- zwolnić
- wydany
- usunąć
- składnica
- wymagania
- Zasoby
- odpowiedź
- dalsze
- Efekt
- powrót
- run
- bieganie
- sagemaker
- Zapisz
- skalowalny
- Skala
- skalowaniem
- Naukowiec
- Naukowcy
- poroże morskie
- Sekcja
- segmentacja
- Usługi
- ustawienie
- Shape
- powinien
- pokazane
- Prosty
- pojedynczy
- SIX
- rozwiązanie
- Rozwiązania
- stos
- Ewolucja krok po kroku
- Cel
- przechowywanie
- przechowywany
- sklep
- Struktura
- Z powodzeniem
- wsparcie
- Zadanie
- zespół
- szablon
- test
- że
- Połączenia
- ich
- czas
- do
- razem
- pochodnia
- Pochodnia
- dla
- przesłanych
- us
- Użytkownik
- wizja
- DOBRZE
- który
- będzie
- w
- w ciągu
- by
- lat
- Yolo
- You
- Twój
- zefirnet