Wzorce hostingu modeli w SageMaker: Najlepsze praktyki w testowaniu i aktualizowaniu modeli w SageMaker PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Model Hosting Patterns w SageMaker: Najlepsze praktyki w testowaniu i aktualizowaniu modeli w SageMaker

Amazon Sage Maker to w pełni zarządzana usługa, która zapewnia programistom i analitykom danych możliwość szybkiego tworzenia, uczenia i wdrażania modeli uczenia maszynowego (ML). Dzięki SageMaker możesz wdrażać swoje modele ML na hostowanych punktach końcowych i uzyskiwać wyniki wnioskowania w czasie rzeczywistym. Możesz łatwo przeglądać metryki wydajności dla swoich punktów końcowych w Amazon Cloud Watch, automatycznie skalować punkty końcowe na podstawie ruchu i aktualizuj swoje modele w produkcji bez utraty dostępności. SageMaker oferuje szeroką gamę opcji wdrażania modeli ML do wnioskowania na jeden z następujących sposobów, w zależności od przypadku użycia:

  • W przypadku prognoz synchronicznych, które muszą być obsługiwane w ciągu milisekund, użyj SageMaker wnioskowanie w czasie rzeczywistym
  • W przypadku obciążeń, które mają okresy bezczynności między skokami ruchu i mogą tolerować zimne uruchamianie, użyj Wnioskowanie bezserwerowe
  • W przypadku żądań o dużych rozmiarach ładunku do 1 GB, długim czasie przetwarzania (do 15 minut) i wymaganiach dotyczących opóźnień zbliżonych do czasu rzeczywistego (od sekund do minut), użyj SageMaker Wnioskowanie asynchroniczne
  • Aby uzyskać prognozy dla całego zestawu danych, użyj SageMaker transformacja wsadowa

Wnioskowanie w czasie rzeczywistym jest idealne dla obciążeń wnioskowania, w przypadku których wymagane są interakcje w czasie rzeczywistym i małe opóźnienia. Wdrażasz swój model w usługach hostingowych SageMaker i otrzymujesz punkt końcowy, którego można użyć do wnioskowania. Te punkty końcowe są wspierane przez w pełni zarządzaną infrastrukturę i wsparcie automatyczne skalowanie. Możesz poprawić wydajność i koszty, łącząc wiele modeli w jeden punkt końcowy za pomocą wielomodelowe punkty końcowe or wielokontenerowe punkty końcowe.

Istnieją pewne przypadki użycia, w których chcesz wdrożyć wiele wariantów tego samego modelu do produkcji, aby ocenić ich wydajność, zmierzyć ulepszenia lub przeprowadzić testy A/B. W takich przypadkach wielowariantowe punkty końcowe SageMaker są przydatne, ponieważ umożliwiają wdrożenie wielu wariantów produkcyjnych modelu w tym samym punkcie końcowym SageMaker.

W tym poście omawiamy wielowariantowe punkty końcowe SageMaker i najlepsze praktyki optymalizacji.

Porównanie opcji wnioskowania w czasie rzeczywistym SageMaker

Poniższy diagram przedstawia szybki przegląd opcji wnioskowania w czasie rzeczywistym za pomocą SageMaker.

Punkt końcowy z jednym modelem umożliwia wdrożenie jednego modelu w kontenerze hostowanym w dedykowanych wystąpieniach lub bezserwerowo w celu uzyskania małych opóźnień i wysokiej przepustowości. Możesz stworzyć model i odzyskać a Obsługiwany obraz SageMaker dla popularnych platform, takich jak TensorFlow, PyTorch, Scikit-learn i innych. Jeśli pracujesz z niestandardową platformą dla swojego modelu, możesz również przynieś własny pojemnik który instaluje twoje zależności.

SageMaker obsługuje również bardziej zaawansowane opcje, takie jak wielomodelowe punkty końcowe (MME) i wielokontenerowe punkty końcowe (MCE). MME są przydatne, gdy masz do czynienia z setkami do dziesiątek tysięcy modeli i nie musisz wdrażać każdego modelu jako pojedynczego punktu końcowego. MME umożliwiają hostowanie wielu modeli w ekonomiczny i skalowalny sposób w ramach tego samego punktu końcowego przy użyciu współdzielonego kontenera obsługującego hostowanego w instancji. Podstawowa infrastruktura (kontener i instancja) pozostaje taka sama, ale modele są ładowane i usuwane dynamicznie ze wspólnej lokalizacji S3, zgodnie z wykorzystaniem i ilością pamięci dostępnej w punkcie końcowym. Twoja aplikacja musi po prostu dołączyć wywołanie interfejsu API z modelem docelowym do tego punktu końcowego, aby uzyskać wnioskowanie o niskim opóźnieniu i wysokiej przepustowości. Zamiast płacić za oddzielny punkt końcowy dla każdego modelu, możesz hostować wiele modeli w cenie jednego punktu końcowego.

MCE umożliwiają uruchamianie do 15 różnych kontenerów ML na jednym punkcie końcowym i wywoływanie ich niezależnie. Możesz zbudować te kontenery ML na różnych stosach obsługujących (takich jak platforma ML, serwer modelowy i algorytm), aby były uruchamiane na tym samym punkcie końcowym w celu obniżenia kosztów. Możesz zszyć pojemniki razem w szeregowy potok wnioskowania lub niezależnie wywołać kontener. Może to być idealne rozwiązanie, gdy masz kilka różnych modeli uczenia maszynowego, które mają różne wzorce ruchu i podobne potrzeby w zakresie zasobów. Przykłady sytuacji, w których należy korzystać z MCE, obejmują między innymi:

  • Hosting modeli w różnych platformach (takich jak TensorFlow, PyTorch i Scikit-learn), które nie mają wystarczającego ruchu, aby nasycić pełną pojemność instancji
  • Hosting modeli z tej samej platformy z różnymi algorytmami ML (takimi jak rekomendacje, prognozowanie lub klasyfikacja) i funkcjami obsługi
  • Porównanie podobnych architektur działających na różnych wersjach frameworka (takich jak TensorFlow 1.x vs. TensorFlow 2.x) dla scenariuszy takich jak testy A/B

Wielowariantowe punkty końcowe (MVE) SageMaker umożliwiają testowanie wielu modeli lub wersji modeli za tym samym punktem końcowym przy użyciu wariantów produkcyjnych. Każdy wariant produkcyjny identyfikuje model ML i zasoby wdrożone do hostowania modelu, takie jak obsługujący kontener i instancja.

Przegląd wielowariantowych punktów końcowych SageMaker

W produkcyjnych przepływach pracy ML analitycy danych i inżynierowie ML udoskonalają modele za pomocą różnych metod, takich jak ponowne szkolenie w oparciu o dryf danych/modelu/koncepcji, dostrajanie hiperparametrów, wybór funkcji, wybór struktury i nie tylko. Przeprowadzanie testów A/B między nowym a starym modelem z ruchem produkcyjnym może być skutecznym końcowym krokiem w procesie walidacji nowego modelu. W testach A/B testujesz różne warianty swoich modeli i porównujesz skuteczność każdego wariantu względem siebie. Następnie wybierasz najlepiej działający model, aby zastąpić poprzedni model nową wersją, która zapewnia lepszą wydajność niż poprzednia wersja. Używając wariantów produkcyjnych, możesz przetestować te modele ML i różne wersje modeli za tym samym punktem końcowym. Te modele uczenia maszynowego można trenować przy użyciu różnych zestawów danych, różnych algorytmów i ram uczenia maszynowego; wdrożyć je w różnych typach instancji; lub dowolną kombinację tych opcji. Moduł równoważenia obciążenia podłączony do punktu końcowego SageMaker zapewnia możliwość dystrybucji żądań wywołań na wiele wariantów produkcyjnych. Na przykład możesz rozdzielać ruch między wariantami produkcyjnymi, określając rozkład ruchu dla każdego wariantu, lub możesz wywoływać określony wariant bezpośrednio dla każdego żądania.

Możesz także skonfigurować zasady automatycznego skalowania, aby automatycznie skalować warianty w górę lub w dół na podstawie metryk, takich jak liczba żądań na sekundę.

Poniższy diagram ilustruje działanie MVE bardziej szczegółowo.

Wielowariantowy punkt końcowy SageMaker

Wdrażanie MVE jest również bardzo proste. Wszystko, co musisz zrobić, to zdefiniować obiekty modelu z obrazem i danymi modelu za pomocą create_model z SageMaker Python SDK i zdefiniuj konfiguracje punktów końcowych za pomocą production_variant konstrukcje do tworzenia wariantów produkcyjnych, z których każdy ma inny model i wymagania dotyczące zasobów (typ instancji i liczba). Umożliwia to również testowanie modeli na różnych typach instancji. Aby wdrożyć, użyj endpoint_from_production_variant konstrukcja, aby utworzyć punkt końcowy.

Podczas tworzenia punktu końcowego SageMaker udostępnia instancję hostującą określoną w ustawieniach punktu końcowego i pobiera model i kontener wnioskowania określony przez wariant produkcyjny do instancji hostującej. Jeśli pomyślna odpowiedź zostanie zwrócona po uruchomieniu kontenera i przeprowadzeniu kontroli stanu za pomocą polecenia ping, do użytkownika zostanie wysłana wiadomość wskazująca, że ​​tworzenie punktu końcowego zostało zakończone. Zobacz następujący kod:

sm_session.create_model(
	name=model_name,
	role=role,
	container_defs={'Image':  image_uri, 'ModelDataUrl': model_url}
	)

sm_session.create_model(
	name=model_name2,
	role=role,
	container_defs={'Image':  image_uri, 'ModelDataUrl': model_url2 }
	)

variant1 = production_variant(
	model_name=model_name,
	instance_type="ml.c5.4xlarge",
	initial_instance_count=1,
	variant_name="Variant1",
	initial_weight=1
	)

variant2 = production_variant(
	model_name=model_name2,
	instance_type="ml.m5.4xlarge",
	initial_instance_count=1,
	variant_name="Variant2",
	initial_weight=1
	)

sm_session.endpoint_from_production_variants(
	name=endpoint_name,
	production_variants=[variant1,  variant2]
	)

W poprzednim przykładzie stworzyliśmy dwa warianty, każdy z własnym innym modelem (mogą one również mieć różne typy instancji i liczby). Ustawiliśmy initial_weight 1 dla obu wariantów: oznacza to, że 50% naszych próśb trafia do Variant1, a pozostałe 50% do Variant2. Suma wag w obu wariantach wynosi 2, a każdy wariant ma przypisaną wagę 1. Oznacza to, że każdy wariant otrzymuje 50% całkowitego ruchu.

Wywoływanie punktu końcowego jest podobne do typowej konstrukcji SageMaker invoke_endpoint; możesz wywołać punkt końcowy bezpośrednio z danymi jako ładunkiem:

sm_runtime.invoke_endpoint(
	EndpointName=endpoint_name,
	ContentType="text/csv",
	Body=payload
	)

SageMaker emituje metryki, takie jak Latency i Invocations dla każdego wariantu w CloudWatch. Aby uzyskać pełną listę metryk emitowanych przez SageMaker, zobacz Monitoruj Amazon SageMaker za pomocą Amazon CloudWatch. Możesz wysłać zapytanie do CloudWatch, aby uzyskać liczbę wywołań na wariant, aby zobaczyć, jak domyślnie są podzielone wywołania na warianty.

Aby wywołać konkretną wersję modelu, określ wariant jako TargetVariant w wezwaniu do invoke_endpoint:

sm_runtime.invoke_endpoint(
	EndpointName=endpoint_name,
	ContentType="text/csv",
	Body=payload,
	TargetVariant="Variant1"
	)

Możesz ocenić wydajność każdego wariantu produkcyjnego, przeglądając wskaźniki, takie jak dokładność, precyzja, pamięć, wynik F1 i charakterystyka operacyjna odbiornika/obszar pod krzywą dla każdego wariantu za pomocą Monitor modelu Amazon SageMaker. Możesz wtedy podjąć decyzję o zwiększeniu ruchu do najlepszego modelu, aktualizując wagi przypisane do każdego wariantu dzwoniąc Zaktualizuj EndpointWeightsAndCapacities. Zmienia to dystrybucję ruchu do wariantów produkcyjnych bez konieczności aktualizacji punktu końcowego. Dlatego zamiast 50% ruchu z początkowej konfiguracji przenosimy 75% ruchu do Variant2 przypisując nowe wagi do każdego wariantu za pomocą UpdateEndpointWeightsAndCapacities. Zobacz następujący kod:

sm.update_endpoint_weights_and_capacities(
	EndpointName=endpoint_name,
	DesiredWeightsAndCapacities=[
	{
		"DesiredWeight": 25,
		"VariantName": variant1["VariantName"]
	},
	{
		"DesiredWeight": 75,
		"VariantName": variant2["VariantName"]
	}
] )

Gdy skuteczność wariantu jest zadowalająca, możesz skierować 100% ruchu do tego wariantu. Na przykład możesz ustawić wagę dla Variant1 do 0 i wagę dla Variant2 do 1. SageMaker wysyła następnie 100% wszystkich żądań wnioskowania do Variant2. Następnie możesz bezpiecznie zaktualizować punkt końcowy i usunąć Variant1 od twojego punktu końcowego. Możesz także kontynuować testowanie nowych modeli w produkcji, dodając nowe warianty do punktu końcowego. Możesz także skonfigurować te punkty końcowe do automatycznego skalowania na podstawie ruchu odbieranego przez punkty końcowe.

Zalety wielowariantowych punktów końcowych

SageMaker MVE umożliwiają wykonanie następujących czynności:

  • Wdrażaj i testuj wiele wariantów modelu przy użyciu tego samego punktu końcowego SageMaker. Jest to przydatne do testowania odmian modelu w produkcji. Załóżmy na przykład, że wdrożono model w środowisku produkcyjnym. Możesz przetestować odmianę modelu, kierując niewielki ruch, powiedzmy 5%, do nowego modelu.
  • Oceniaj wydajność modelu w środowisku produkcyjnym bez przerywania ruchu, monitorując metryki operacyjne dla każdego wariantu w CloudWatch.
  • Aktualizuj modele w produkcji bez utraty dostępności. Możesz zmodyfikować punkt końcowy bez wycofania z eksploatacji modeli, które zostały już wdrożone w środowisku produkcyjnym. Na przykład możesz dodać nowe warianty modelu, zaktualizować konfiguracje wystąpień obliczeniowych ML istniejących wariantów modelu lub zmienić dystrybucję ruchu między wariantami modelu. Aby uzyskać więcej informacji, zobacz Aktualizuj punkt końcowy i Zaktualizuj EndpointWeightsAndCapacities.

Wyzwania podczas korzystania z wielowariantowych punktów końcowych

SageMaker MVE wiąże się z następującymi wyzwaniami:

  • Wysiłek związany z testowaniem obciążenia – Trzeba włożyć sporo wysiłku i zasobów w testowanie i porównywanie macierzy modeli dla każdego wariantu. Aby test A/B został uznany za udany, musisz przeprowadzić analizę statystyczną danych zebranych w teście, aby określić, czy wynik jest istotny statystycznie. Ograniczenie do minimum eksploracji wariantów o niskiej skuteczności może być trudne. Możesz potencjalnie użyć wieloręki bandyta technikę optymalizacji, aby uniknąć wysyłania ruchu do niedziałających eksperymentów i optymalizować wydajność podczas testowania. Do testowania obciążenia możesz również zbadać Polecający wnioskowanie Amazon SageMaker przeprowadzać obszerne testy porównawcze w oparciu o wymagania produkcyjne dotyczące opóźnień i przepustowości, niestandardowe wzorce ruchu i wybrane przez Ciebie instancje (do 10).
  • Ścisłe powiązanie między wariantem modelu a punktem końcowym – Może to być trudne w zależności od częstotliwości wdrażania modelu, ponieważ punkt końcowy może się znaleźć updating status dla każdego aktualizowanego wariantu produkcyjnego. SageMaker również obsługuje poręcze rozmieszczające, za pomocą którego można w łatwy i kontrolowany sposób przełączyć się z aktualnie produkowanego modelu na nowy. Ta opcja wprowadza kanarek i liniowy tryby przenoszenia ruchu, dzięki czemu możesz mieć szczegółową kontrolę nad przenoszeniem ruchu z obecnego modelu do nowego w trakcie aktualizacji. Dzięki wbudowanym zabezpieczeniom, takim jak automatyczne wycofywanie zmian, możesz wcześnie wykrywać problemy i automatycznie podejmować działania naprawcze, zanim spowodują one znaczący wpływ na produkcję.

Najlepsze praktyki dotyczące wielowariantowych punktów końcowych

Hostując modele korzystające z SageMaker MVE, należy wziąć pod uwagę następujące kwestie:

  • SageMaker doskonale nadaje się do testowania nowych modeli, ponieważ można je łatwo wdrożyć w środowisku testów A/B i płacisz tylko za to, czego używasz. Opłata jest naliczana za godzinę zużytą dla każdej instancji podczas działania punktu końcowego. Kiedy skończysz testy i nie będziesz już intensywnie używać punktu końcowego lub wariantów, powinieneś je usunąć, aby zaoszczędzić na kosztach. Zawsze możesz go odtworzyć, gdy będziesz go ponownie potrzebować, ponieważ model jest przechowywany w Usługa Amazon Simple Storage (Amazonka S3).
  • Do wdrażania modeli należy używać najbardziej optymalnego typu i rozmiaru instancji. SageMaker obecnie oferuje Wystąpienia obliczeniowe ML w różnych rodzinach instancji. Instancja punktu końcowego działa przez cały czas (podczas gdy instancja jest w użyciu). Dlatego wybór odpowiedniego typu instancji może mieć znaczący wpływ na całkowity koszt i wydajność modeli ML. Testowanie obciążenia to najlepsza praktyka określania odpowiedniego typu instancji i rozmiaru floty, z automatycznym skalowaniem lub bez dla działającego punktu końcowego, aby uniknąć nadmiernej aprowizacji i płacenia dodatkowych opłat za pojemność, której nie potrzebujesz.
  • Możesz monitorować wydajność modelu i wykorzystanie zasobów w CloudWatch. Możesz skonfigurować A ProductionVariant w użyciu Automatyczne skalowanie aplikacji. Aby określić metryki i wartości docelowe dla zasad skalowania, należy skonfigurować zasady skalowania śledzenia celów. Możesz użyć metryki wstępnie zdefiniowanej lub metryki niestandardowej. Aby uzyskać więcej informacji na temat składni konfiguracji zasad, zobacz Konfiguracja TargetTrackingScalingPolicy. Aby uzyskać informacje na temat konfigurowania automatycznego skalowania, zobacz Automatyczne skalowanie modeli Amazon SageMaker. Aby szybko zdefiniować zasady skalowania śledzenia celów dla wariantu, możesz wybrać konkretną metrykę CloudWatch i ustawić wartości progowe. Na przykład użyj metryki SageMakerVariantInvocationsPerInstance aby monitorować średnią liczbę wywołań każdej instancji wariantu na minutę lub użyć metryki CPUUtilization do monitorowania sumy pracy wykonywanej przez procesor. W poniższym przykładzie użyto SageMakerVariantInvocationsPerInstance wstępnie zdefiniowana metryka, aby dostosować liczbę instancji wariantów, tak aby każda instancja miała InvocationsPerInstance metryka 70:
{
	"TargetValue": 70.0,
	"PredefinedMetricSpecification":
	{
		"PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
	}
}

  • Zmiana lub usunięcie artefaktów modelu lub zmiana kodu wnioskowania po wdrożeniu modelu daje nieprzewidywalne rezultaty. Przed wdrożeniem modeli do produkcji dobrą praktyką jest sprawdzenie, czy hostowanie modelu w trybie lokalnym powiodło się po wystarczającym debugowaniu fragmentów kodu wnioskowania (np. model_fn, input_fn, predict_fn, output_fn) w lokalnym środowisku programistycznym, takim jak instancja notatnika SageMaker lub serwer lokalny. Jeśli musisz zmienić lub usunąć artefakty modelu lub zmienić kod wnioskowania, zmodyfikuj punkt końcowy, udostępniając nową konfigurację punktu końcowego. Po udostępnieniu nowej konfiguracji punktu końcowego można zmienić lub usunąć artefakty modelu odpowiadające starej konfiguracji punktu końcowego.
  • Możesz użyć SageMakera transformacja wsadowa przetestować warianty produkcyjne. Transformacja wsadowa jest idealna do uzyskiwania wniosków z dużych zestawów danych. Możesz utworzyć osobne zadanie transformacji dla każdego nowego wariantu modelu i użyć zestawu danych walidacji do testowania. Dla każdego zadania transformacji określ unikalną nazwę modelu i lokalizację w Amazon S3 dla pliku wyjściowego. Aby przeanalizować wyniki, użyj dzienniki i metryki potoku wnioskowania.

Wnioski

SageMaker umożliwia łatwe testowanie A/B modeli ML w środowisku produkcyjnym poprzez uruchamianie wielu wariantów produkcyjnych na punkcie końcowym. Możesz użyć możliwości SageMaker do testowania modeli, które zostały wytrenowane przy użyciu różnych zestawów danych szkoleniowych, hiperparametrów, algorytmów lub struktur ML; jak działają na różnych typach instancji; lub połączenie wszystkich powyższych. Możesz podać dystrybucję ruchu między wariantami na punkcie końcowym, a SageMaker podzieli ruch wnioskowania na warianty w oparciu o określoną dystrybucję. Alternatywnie, jeśli chcesz przetestować modele dla określonych segmentów klientów, możesz określić wariant, który ma przetworzyć żądanie wnioskowania, podając TargetVariant nagłówek, a SageMaker przekieruje żądanie do określonego wariantu. Aby uzyskać więcej informacji na temat testów A/B, zobacz Bezpiecznie aktualizuj modele w produkcji.

Referencje


O autorach

Wzorce hostingu modeli w SageMaker: Najlepsze praktyki w testowaniu i aktualizowaniu modeli w SageMaker PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Deepali Rajale jest kierownikiem ds. kont technicznych specjalisty AI/ML w Amazon Web Services. Współpracuje z klientami korporacyjnymi, udzielając wskazówek technicznych dotyczących wdrażania rozwiązań uczenia maszynowego z wykorzystaniem najlepszych praktyk. W wolnym czasie lubi chodzić po górach, oglądać filmy i spotykać się z rodziną i przyjaciółmi.

Wzorce hostingu modeli w SageMaker: Najlepsze praktyki w testowaniu i aktualizowaniu modeli w SageMaker PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Dawal Patel jest głównym architektem uczenia maszynowego w AWS. Pracował z organizacjami od dużych przedsiębiorstw po średniej wielkości start-upy w zakresie problemów związanych z przetwarzaniem rozproszonym i sztuczną inteligencją. Koncentruje się na uczeniu głębokim, w tym w domenach NLP i Computer Vision. Pomaga klientom uzyskać wnioskowanie o wysokiej wydajności modelu w SageMaker.

Wzorce hostingu modeli w SageMaker: Najlepsze praktyki w testowaniu i aktualizowaniu modeli w SageMaker PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI. Saurabha Trikande jest starszym menedżerem produktu w firmie Amazon SageMaker Inference. Pasjonuje go praca z klientami i motywuje go cel, jakim jest demokratyzacja uczenia maszynowego. Koncentruje się na podstawowych wyzwaniach związanych z wdrażaniem złożonych aplikacji ML, wielodostępnych modeli ML, optymalizacji kosztów oraz zwiększaniem dostępności wdrażania modeli uczenia głębokiego. W wolnym czasie Saurabh lubi wędrować, poznawać innowacyjne technologie, śledzić TechCrunch i spędzać czas z rodziną.

Znak czasu:

Więcej z Uczenie maszynowe AWS