Amazon SageMakrer Serverless Inference – wnioskowanie o uczeniu maszynowym bez martwienia się o serwery

27 kwietnia 2022

W grudniu 2021 r. twórcy wprowadzili Amazon SageMaker Serverless Inference (w wersji zapoznawczej) jako nową opcję w Amazon SageMaker do wdrażania modeli uczenia maszynowego (ML) i wnioskowania bez konieczności konfigurowania bazowej infrastruktury lub zarządzania nią. Dzisiaj z przyjemnością ogłaszają, że wnioskowanie bezserwerowe Amazon SageMaker jest teraz ogólnie dostępne (GA).

Różne przypadki użycia wnioskowania ML stawiają różne wymagania w infrastrukturze hostingu modelu. Jeśli pracujesz nad przypadkami użycia, takimi jak wyświetlanie reklam, wykrywanie oszustw lub spersonalizowane rekomendacje produktów, najprawdopodobniej szukasz wnioskowania online opartego na interfejsie API z czasem odpowiedzi wynoszącym zaledwie kilka milisekund. Jeśli pracujesz z dużymi modelami ML, możesz potrzebować infrastruktury zoptymalizowanej do uruchamiania wnioskowania na większych rozmiarach ładunku w ciągu kilku minut. Jeśli chcesz uruchomić predykcje na całym zestawie danych lub większych partiach danych, możesz chcieć uruchomić jednorazowe zadanie wnioskowania wsadowego na żądanie zamiast hostowania punktu końcowego obsługującego model. A co w sytuacji, jeśli masz aplikację ze przerywanymi wzorcami ruchu, taką jak usługa chatbot lub aplikacja do przetwarzania formularzy lub analizy danych z dokumentów? W takim przypadku możesz potrzebować opcji wnioskowania online, która umożliwia automatyczne udostępnianie i skalowanie mocy obliczeniowej na podstawie liczby żądań wnioskowania. A w czasie bezczynności powinna być w stanie całkowicie wyłączyć moc obliczeniową, aby Cię nie obciążać.

Amazon SageMaker, w pełni zarządzana usługa ML, oferuje różne opcje wnioskowania o modelach w celu obsługi wszystkich tych przypadków użycia:

Więcej szczegółów na temat bezserwerowego wnioskowania Amazon SageMaker

W wielu rozmowach z osobami praktykującymi ML autorzy pytali o w pełni zarządzaną opcję wnioskowania ML, która pozwala skupić się na tworzeniu kodu wnioskowania podczas zarządzania całą infrastrukturą dla Ciebie. SageMaker Serverless Inference zapewnia teraz taką łatwość wdrożenia.

Na podstawie liczby żądań wnioskowania otrzymywanych przez model, SageMaker Serverless Inference automatycznie zaopatruje, skaluje i wyłącza moc obliczeniową. W rezultacie płacisz tylko za czas obliczeniowy potrzebny do uruchomienia kodu wnioskowania i ilość przetworzonych danych, a nie za czas nieprzepracowany.

Możesz użyć wbudowanych algorytmów SageMaker i kontenerów obsługujących platformę ML, aby wdrożyć swój model w punkcie końcowym wnioskowania bezserwerowego lub wybrać własny kontener. Jeśli ruch stanie się przewidywalny i stabilny, możesz łatwo zaktualizować z punktu końcowego wnioskowania bezserwerowego do punktu końcowego SageMaker w czasie rzeczywistym bez konieczności wprowadzania zmian w obrazie kontenera. Korzystając z wnioskowania bezserwerowego, korzystasz również z funkcji SageMaker, w tym wbudowanych metryk, takich jak liczba wywołań, błędy, opóźnienia, metryki hosta i błędy w Amazon CloudWatch.

Od czasu premiery wersji zapoznawczej program SageMaker Serverless Inference dodał obsługę pakietu SDK SageMaker Python i rejestru modeli. SageMaker Python SDK to biblioteka typu open source do tworzenia i wdrażania modeli ML w programie SageMaker. Rejestr modeli SageMaker umożliwia katalogowanie, wersję i wdrażanie modeli w środowisku produkcyjnym.

Jako nowość w GA, SageMaker Serverless Inference zwiększył maksymalny limit równoczesnych wywołań na punkt końcowy do 200 (z 50 w wersji zapoznawczej), umożliwiając korzystanie z Amazon SageMaker Serverless Inference dla obciążeń o dużym natężeniu ruchu. Wnioskowanie bezserwerowe Amazon SageMaker jest teraz dostępne we wszystkich regionach AWS, w których dostępna jest usługa Amazon SageMaker, z wyjątkiem regionów AWS GovCloud (USA) i AWS China.

Kilku klientów już zaczęło korzystać z zalet SageMaker Serverless Inference. Oto, co mają do powiedzenia na ten temat:

„Bazaarvoice wykorzystuje uczenie maszynowe do moderowania treści generowanych przez użytkowników, aby umożliwić naszym klientom płynne zakupy w sposób terminowy i godny zaufania. Jednak działanie na skalę globalną na zróżnicowanej bazie klientów wymaga dużej różnorodności modeli, z których wiele jest rzadko używanych lub wymaga szybkiego skalowania z powodu znacznych przyrostów zawartości. Wnioskowanie bezserwerowe Amazon SageMaker zapewnia to, co najlepsze z obu światów: szybko i płynnie skaluje się podczas dużych ilości treści i zmniejsza koszty rzadko używanych modeli”. — dr Lou Kratz, główny inżynier ds. badań, Bazaarvoice

„Transformatory zmieniły uczenie maszynowe, a Hugging Face przyczynił się do ich przyjęcia w różnych firmach, zaczynając od przetwarzania języka naturalnego, a teraz także z audio i wizji komputerowej. Nowa granica dla zespołów zajmujących się uczeniem maszynowym na całym świecie polega na wdrażaniu dużych i wydajnych modeli w opłacalny sposób. Przetestowaliśmy wnioskowanie bezserwerowe Amazon SageMaker i byliśmy w stanie znacznie obniżyć koszty związane z przerywanymi obciążeniami ruchu przy jednoczesnym abstrahowaniu infrastruktury. Umożliwiliśmy modelom Hugging Face działanie w sposób niestandardowy dzięki SageMaker Serverless Inference, pomagając klientom jeszcze bardziej obniżyć koszty uczenia maszynowego”. — Jeff Boudier, dyrektor produktu, Hugging Face

Pora przekonać się, jak zacząć korzystać z wnioskowania bezserwerowego SageMaker.

Na potrzeby tego pokazu stworzono klasyfikator tekstu, który zmienia recenzje klientów w przypadku e-commerce, takie jak „Uwielbiam ten produkt!” na pozytywne (1), neutralne (0) i negatywne (-1). Użyto zestawu danych Women's E-Commerce Clothing Reviews, aby dostroić model RoBERTA z biblioteki Hugging Face Transformers i koncentratora modeli. Teraz zobaczysz, jak wdrożyć wyszkolony model w punkcie końcowym wnioskowania bezserwerowego Amazon SageMaker.

Wdróż model w punkcie końcowym wnioskowania bezserwerowego Amazon SageMaker

Możesz tworzyć, aktualizować, opisywać i usuwać punkt końcowy wnioskowania bezserwerowego za pomocą konsoli SageMaker, zestawów AWS SDK, SageMaker Python SDK, AWS CLI lub AWS CloudFormation. W pierwszym przykładzie zostanie użyty pakiet SageMaker Python SDK, ponieważ upraszcza on przepływ pracy wdrażania modelu poprzez jego abstrakcje. Możesz również użyć zestawu SDK SageMaker Python do wywołania punktu końcowego, przekazując ładunek zgodnie z żądaniem.

Najpierw należy utworzyć konfigurację punktu końcowego z żądaną konfiguracją bezserwerową. Możesz określić rozmiar pamięci i maksymalną liczbę jednoczesnych wywołań. SageMaker Serverless Inference automatycznie przypisuje zasoby obliczeniowe proporcjonalnie do wybranej pamięci. Jeśli wybierzesz większy rozmiar pamięci, Twój kontener będzie miał dostęp do większej liczby procesorów wirtualnych. Ogólna zasada mówi, że rozmiar pamięci powinien być co najmniej tak duży, jak rozmiar modelu. Dostępne rozmiary pamięci to 1024 MB, 2048 MB, 3072 MB, 4096 MB, 5120 MB i 6144 MB. Dla wybranego modelu RoBERTA zostanie skonfigurowany rozmiar pamięci 5120 MB i maksymalnie pięć jednoczesnych wywołań.

PYTHON
import
sagemaker from sagemaker.serverless import ServerlessInferenceConfig serverless_config = ServerlessInferenceConfig( memory_size_in_mb=5120, max_concurrency=5 )

Teraz należy wdrożyć model. Za pomocą metody estimator.deploy() można wdrożyć model bezpośrednio z estymatora szkolenia SageMaker wraz z konfiguracją punktu końcowego wnioskowania bezserwerowego. W tym przykładzie udostępniony został również niestandardowy kod wnioskowania.

PYTHON

endpoint_name="roberta-womens-clothing-serverless-1"

estimator.deploy(
	endpoint_name = endpoint_name, 
	entry_point="inference.py",
	serverless_inference_config=serverless_config
)

SageMaker Serverless Inference obsługuje również rejestr modeli podczas korzystania z zestawu AWS SDK dla języka Python (Boto3). W dalszej części tego artykułu dowiesz się, jak wdrożyć model z rejestru modeli.

Pora sprawdzić ustawienia punktu końcowego wnioskowania bezserwerowego i stan wdrożenia. Przejdź do konsoli SageMaker, a następnie do wdrożonego punktu końcowego wnioskowania:

Wdróż model w punkcie końcowym wnioskowania bezserwerowego Amazon SageMaker

Z poziomu konsoli SageMaker można również w razie potrzeby tworzyć, aktualizować lub usuwać bezserwerowe punkty końcowe wnioskowania. W Amazon SageMaker Studio wybierz kartę punktu końcowego i swój bezserwerowy punkt końcowy wnioskowania, aby przejrzeć szczegóły konfiguracji punktu końcowego.

Wdróż model w punkcie końcowym wnioskowania bezserwerowego Amazon SageMaker

Gdy stan punktu końcowego pokazuje InService, możesz rozpocząć wysyłanie żądań wnioskowania.

Pora przeprowadzić kilka przykładowych prognoz. Dopracowany model RoBERTa oczekuje, że żądania wnioskowania w formacie JSON Lines z tekstem recenzji zostaną sklasyfikowane jako funkcja wejściowa. Plik tekstowy wierszy JSON składa się z kilku wierszy, z których każdy jest prawidłowym obiektem JSON, oddzielonym znakiem nowego wiersza. Jest to idealny format do przechowywania danych, które są przetwarzane po jednym rekordzie na raz, na przykład w przypadku wnioskowania o modelu. Więcej informacji o liniach JSON i innych typowych formatach danych do wnioskowania można znaleźć w Przewodniku programisty Amazon SageMaker. Pamiętaj, że poniższy kod może wyglądać inaczej w zależności od akceptowanego formatu żądania wnioskowania modelu.

PYTHON


from sagemaker.predictor import Predictor
from sagemaker.serializers import JSONLinesSerializer
from sagemaker.deserializers import JSONLinesDeserializer

sess = sagemaker.Session(sagemaker_client=sm)

inputs = [
    {"features": ["I love this product!"]},
    {"features": ["OK, but not great."]},
    {"features": ["This is not the right product."]},
]

predictor = Predictor(
    endpoint_name=endpoint_name,
    serializer=JSONLinesSerializer(),
    deserializer=JSONLinesDeserializer(),
    sagemaker_session=sess
)

predicted_classes = predictor.predict(inputs)

for predicted_class in predicted_classes:
    print("Predicted class {} with probability {}".format(predicted_class['predicted_label'], predicted_class['probability']))

Wynik będzie podobny do tego, klasyfikując przykładowe recenzje do odpowiednich „sentyment classes”.

PYTHON

Predicted class 1 with probability 0.9495596289634705
Predicted class 0 with probability 0.5395089387893677
Predicted class -1 with probability 0.7887083292007446

Model można również wdrożyć z rejestru modeli w punkcie końcowym SageMaker Serverless Inference. Jest to obecnie obsługiwane tylko przez zestaw SDK AWS dla Pythona (Boto3). Pozwól, że twórcy przeprowadzą Cię przez kolejne szybkie demo.

Wdrażanie modelu z rejestru modeli SageMaker

Aby wdrożyć model z rejestru modeli za pomocą Boto3, najpierw utwórz obiekt modelu na podstawie wersji modelu, wywołując metodę create_model(). Następnie przekazujesz nazwę Amazon Resource Name (ARN) wersji modelu jako część kontenerów dla obiektu modelu.

PYTHON

import boto3
import sagemaker

sm = boto3.client(service_name='sagemaker')
role = sagemaker.get_execution_role()
model_name="roberta-womens-clothing-serverless"

container_list = 
	[{'ModelPackageName': <MODEL_PACKAGE_ARN>}]

create_model_response = sm.create_model(
    ModelName = model_name,
    ExecutionRoleArn = role,
    Containers = container_list
)

Następnie należy utworzyć punkt końcowy wnioskowania bezserwerowego. Pamiętaj, że możesz tworzyć, aktualizować, opisywać i usuwać punkty końcowe wnioskowania bezserwerowego za pomocą konsoli SageMaker, pakietów AWS SDK, SageMaker Python SDK, AWS CLI lub AWS CloudFormation. Aby zachować spójność, w drugim przykładzie nadal korzystaj z Boto3.

Podobnie jak w pierwszym przykładzie, zacznij od utworzenia konfiguracji punktu końcowego z żądaną konfiguracją bezserwerową. Określ rozmiar pamięci 5120 MB i maksymalną liczbę pięciu równoczesnych wywołań dla mojego punktu końcowego.

PYTHON

endpoint_config_name="roberta-womens-clothing-serverless-ep-config"

create_endpoint_config_response = sm.create_endpoint_config(
    EndpointConfigName = endpoint_config_name,
    ProductionVariants=[{
        'ServerlessConfig':{
            'MemorySizeInMB' : 5120,
            'MaxConcurrency' : 5
        },
        'ModelName':model_name,
        'VariantName':'AllTraffic'}])

Następnie utwórz punkt końcowy SageMaker Serverless Inference, wywołując metodę create_endpoint().

PYTHON

endpoint_name="roberta-womens-clothing-serverless-2"

create_endpoint_response = sm.create_endpoint(
    EndpointName=endpoint_name,
    EndpointConfigName=endpoint_config_name)

Gdy stan punktu końcowego pokazuje InService, możesz rozpocząć wysyłanie żądań wnioskowania. Ponownie, dla spójności, wybierz uruchomienie przewidywania próbki przy użyciu Boto3 i metody invoke_endpoint() klienta wykonawczego SageMaker.

PYTHON

sm_runtime = boto3.client("sagemaker-runtime")
response = sm_runtime.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType="application/jsonlines",
    Accept="application/jsonlines",
    Body=bytes('{"features": ["I love this product!"]}', 'utf-8')
)

print(response['Body'].read().decode('utf-8'))
{"probability": 0.966135561466217, "predicted_label": 1}

Jak zoptymalizować swój model pod kątem wnioskowania bezserwerowego programu SageMaker

SageMaker Serverless Inference automatycznie skaluje podstawowe zasoby obliczeniowe w celu przetwarzania żądań. Jeśli punkt końcowy nie odbiera ruchu przez jakiś czas, zmniejsza zasoby obliczeniowe. Jeśli punkt końcowy nagle odbierze nowe żądania, możesz zauważyć, że skalowanie zasobów obliczeniowych w celu przetworzenia żądań zajmuje trochę czasu.

Czas rozruchu w dużej mierze zależy od wielkości modelu i czasu rozruchu kontenera. Aby zoptymalizować czas startu, możesz spróbować zminimalizować rozmiar modelu, na przykład stosując techniki, takie jak destylacja wiedzy, kwantyzacja lub przycinanie modelu.

Istota wiedzy wykorzystuje większy model (model nauczyciela) do trenowania mniejszych modeli (modeli uczniów) w celu rozwiązania tego samego zadania. Kwantyzacja zmniejsza precyzję liczb reprezentujących parametry modelu z 32-bitowych liczb zmiennoprzecinkowych do 16-bitowych liczb zmiennoprzecinkowych lub 8-bitowych liczb całkowitych. Przycinanie modelu usuwa zbędne parametry, które w niewielkim stopniu przyczyniają się do procesu uczenia.

Dostępność i ceny

Amazon SageMaker Serverless Inference jest teraz dostępny we wszystkich regionach AWS, w których dostępna jest usługa Amazon SageMaker, z wyjątkiem regionów AWS GovCloud (USA) i AWS China.

Dzięki SageMaker Serverless Inference płacisz tylko za moc obliczeniową wykorzystywaną do przetwarzania żądań wnioskowania, rozliczaną w milisekundach oraz za ilość przetworzonych danych. Opłata za pojemność obliczeniową zależy również od wybranej konfiguracji pamięci. Aby uzyskać szczegółowe informacje o cenach, odwiedź stronę cennika SageMaker.

Zacznij już dziś z Amazon SageMaker Serverless Inference

Aby dowiedzieć się więcej o Amazon SageMaker Serverless Inference, odwiedź stronę internetową dotyczącą uczenia maszynowego Amazon SageMaker.

źródło: AWS

Case Studies
Referencje

Jesteśmy ogromnie zadowoleni ze współpracy z firmą Hostersi. Ich specjaliści doradzili nam rozwiązanie, które dało nam stabilną, skalowalną infrastrukturę, która umożliwia obsłużenie ciągle rosnącego ruchu związanego z COVID-19

Jakub Sperczyński
Prezes Zarządu EduNect
W skrócie o nas
Specjalizujemy się w dostarczaniu rozwiązań IT w obszarach projektowania infrastruktury serwerowej, wdrażania chmury obliczeniowej, opieki administracyjnej i bezpieczeństwa danych.