Z łatwością pakuj i wdrażaj klasyczne systemy ML i LLM za pomocą Amazon SageMaker, część 1: Ulepszenia PySDK | Usługi internetowe Amazona

Z łatwością pakuj i wdrażaj klasyczne systemy ML i LLM za pomocą Amazon SageMaker, część 1: Ulepszenia PySDK | Usługi internetowe Amazona

Amazon Sage Maker to w pełni zarządzana usługa, która umożliwia programistom i analitykom danych szybkie i łatwe tworzenie, trenowanie i wdrażanie modeli uczenia maszynowego (ML) w dowolnej skali. SageMaker ułatwia wdrażanie modeli w środowisku produkcyjnym bezpośrednio poprzez wywołania API usługi. Modele są pakowane w kontenery w celu zapewnienia niezawodnych i skalowalnych wdrożeń. Chociaż zapewnia różne punkty wejścia, takie jak SageMaker Python SDK, AWS SDK, konsola SageMaker i Studio Amazon SageMaker notebooków w celu uproszczenia procesu uczenia i wdrażania modeli uczenia maszynowego na dużą skalę, klienci wciąż szukają lepszych sposobów wdrażania swoich modeli na potrzeby testowania na placu zabaw i optymalizacji wdrożeń produkcyjnych.

Wprowadzamy dwa nowe sposoby uproszczenia procesu pakowania i wdrażania modeli za pomocą SageMaker.

W tym poście przedstawiamy nowy pakiet SDK języka Python firmy SageMaker ModelBuilder doświadczenie, którego celem jest zminimalizowanie krzywej uczenia się nowych użytkowników SageMaker, takich jak badacze danych, a jednocześnie pomaganie doświadczonym inżynierom MLOps w maksymalizacji wykorzystania usług hostingowych SageMaker. Zmniejsza złożoność początkowej konfiguracji i wdrażania, a także zapewnia wskazówki dotyczące najlepszych praktyk umożliwiających wykorzystanie pełnych możliwości SageMaker. Udostępniamy szczegółowe informacje i przykłady z GitHuba dotyczące tej nowej możliwości SageMaker.

Kolejną nowością jest wykorzystanie nowego interaktywnego środowiska wdrażania w SageMaker Studio. Omawiamy to w części 2.

Wdrażanie modeli w punkcie końcowym SageMaker obejmuje szereg kroków mających na celu przygotowanie modelu do hostowania na punkcie końcowym SageMaker. Obejmuje to nadanie artefaktom modelu odpowiedniego formatu i struktury, utworzenie kodu wnioskowania i określenie niezbędnych szczegółów, takich jak adres URL obrazu modelu, Usługa Amazon Simple Storage (Amazon S3) lokalizacja artefaktów modelu, etapy serializacji i deserializacji, jeśli jest to konieczne AWS Zarządzanie tożsamością i dostępem (IAM) w celu ułatwienia odpowiednich uprawnień dostępu. Następnie konfiguracja punktu końcowego wymaga określenia typu wnioskowania i skonfigurowania odpowiednich parametrów, takich jak typy instancji, liczba i rozkład ruchu pomiędzy wariantami modelu.

Aby jeszcze bardziej pomóc naszym klientom korzystającym z hostingu SageMaker, wprowadziliśmy nowość ModelBuilder class w pakiecie SageMaker Python SDK, która zapewnia następujące kluczowe korzyści podczas wdrażania modeli na punktach końcowych SageMaker:

  • Ujednolica środowisko wdrażania w różnych platformach – Nowe doświadczenie zapewnia spójny przepływ pracy przy wdrażaniu modeli zbudowanych przy użyciu różnych platform, takich jak PyTorch, TensorFlow i XGBoost. Upraszcza to proces wdrażania.
  • Automatyzuje wdrażanie modelu – Zadania takie jak wybieranie odpowiednich kontenerów, przechwytywanie zależności i obsługa serializacji/deserializacji są zautomatyzowane, co ogranicza wysiłek wymagany do ręcznego wdrożenia.
  • Zapewnia płynne przejście z lokalnego punktu końcowego do punktu końcowego hostowanego przez SageMaker – Przy minimalnych zmianach kodu modele można łatwo przenieść z testów lokalnych do wdrożenia w punkcie końcowym SageMaker. Dzienniki na żywo sprawiają, że debugowanie jest bezproblemowe.

Ogólnie rzecz biorąc, SageMaker ModelBuilder upraszcza i usprawnia proces pakowania modeli na potrzeby wnioskowania SageMaker, obsługując szczegóły niskiego poziomu i udostępnia narzędzia do testowania, sprawdzania poprawności i optymalizacji punktów końcowych. Poprawia to produktywność programistów i zmniejsza liczbę błędów.

W poniższych sekcjach szczegółowo omówimy szczegóły tej nowej funkcji. Omawiamy również sposób wdrażania modeli na hostingu SageMaker przy użyciu ModelBuilder, co upraszcza proces. Następnie przeprowadzimy Cię przez kilka przykładów różnych platform do wdrażania zarówno tradycyjnych modeli uczenia maszynowego, jak i modeli podstawowych, które wspierają przypadki użycia generatywnej sztucznej inteligencji.

Poznajemy SageMaker ModelBuilder

Nowa ModelBuilder to klasa Pythona skupiająca się na pobieraniu modeli ML zbudowanych przy użyciu frameworków, takich jak XGBoost lub PyTorch i konwertowaniu ich na modele gotowe do wdrożenia w SageMaker. ModelBuilder zapewnia build() funkcja, która generuje artefakty zgodnie z serwerem modelu, oraz a deploy() można wdrożyć lokalnie lub w punkcie końcowym SageMaker. Wprowadzenie tej funkcji upraszcza integrację modeli ze środowiskiem SageMaker, optymalizując je pod kątem wydajności i skalowalności. Poniższy diagram pokazuje, jak to zrobić ModelBuilder pracuje na wysokim poziomie.

Z łatwością pakuj i wdrażaj klasyczne systemy ML i LLM za pomocą Amazon SageMaker, część 1: Ulepszenia PySDK | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Klasa ModelBuilder

Połączenia Konstruktor Modeli class zapewniają różne opcje dostosowywania. Jednak aby wdrożyć model ramowy, konstruktor modelu oczekuje tylko modelu, danych wejściowych, wyników i roli:

class ModelBuilder( model, # model id or model object role_arn, # IAM role schema_builder, # defines the input and output mode, # select between local deployment and depoy to SageMaker Endpoints ...
)

Kreator schematów

Połączenia Kreator schematów class umożliwia zdefiniowanie danych wejściowych i wyjściowych dla punktu końcowego. Umożliwia konstruktorowi schematu generowanie odpowiednich funkcji kierujących do serializacji i deserializacji danych wejściowych i wyjściowych. Poniższy plik klasy udostępnia wszystkie opcje dostosowywania:

class SchemaBuilder( sample_input: Any, sample_output: Any, input_translator: CustomPayloadTranslator = None, output_translator: CustomPayloadTranslator = None
)

Jednak w większości przypadków wystarczy tylko przykładowe wejście i wyjście. Na przykład:

input = "How is the demo going?"
output = "Comment la démo va-t-elle?"
schema = SchemaBuilder(input, output)

Dostarczając przykładowe dane wejściowe i wyjściowe, SchemaBuilder może automatycznie określić niezbędne przekształcenia, dzięki czemu proces integracji jest prostszy. W przypadku bardziej zaawansowanych zastosowań istnieje możliwość zapewnienia niestandardowych funkcji translacji zarówno danych wejściowych, jak i wyjściowych, co zapewnia wydajną obsługę bardziej złożonych struktur danych. Demonstrujemy to w poniższych sekcjach, wdrażając różne modele z różnymi frameworkami ModelBuilder.

Doświadczenie w trybie lokalnym

W tym przykładzie używamy ModelBuilder aby wdrożyć lokalnie model XGBoost. Możesz użyć trybu, aby przełączać się między testowaniem lokalnym a wdrażaniem w punkcie końcowym SageMaker. Najpierw szkolimy model XGBoost (lokalnie lub w SageMaker) i przechowujemy artefakty modelu w katalogu roboczym:

# Train the model
model = XGBClassifier()
model.fit(X_train, y_train)
model.save_model(model_dir + "/my_model.xgb")

Następnie tworzymy obiekt ModelBuilder, przekazując rzeczywisty obiekt modelu, czyli plik SchemaBuilder który wykorzystuje przykładowe obiekty wejściowe i wyjściowe testu (te same dane wejściowe i wyjściowe, których używaliśmy podczas uczenia i testowania modelu), aby wywnioskować potrzebną serializację. Pamiętaj, że używamy Mode.LOCAL_CONTAINER aby określić wdrożenie lokalne. Następnie dzwonimy do budować funkcja automatycznego identyfikowania obrazu kontenera obsługiwanej platformy oraz skanowania w poszukiwaniu zależności. Zobacz następujący kod:

model_builder_local = ModelBuilder( model=model, schema_builder=SchemaBuilder(X_test, y_pred), role_arn=execution_role, mode=Mode.LOCAL_CONTAINER
)
xgb_local_builder = model_builder_local.build()

Wreszcie możemy nazwać tzw deploy funkcję w obiekcie modelu, która zapewnia również rejestrowanie na żywo w celu łatwiejszego debugowania. Nie musisz określać typu instancji ani liczby, ponieważ model zostanie wdrożony lokalnie. Jeśli podałeś te parametry, zostaną one zignorowane. Ta funkcja zwróci obiekt predykcyjny, którego możemy użyć do przewidywania danych testowych:

# note: all the serialization and deserialization is handled by the model builder.
predictor_local = xgb_local_builder.deploy(
# instance_type='ml.c5.xlarge',
# initial_instance_count=1
) # Make prediction for test data. predictor_local.predict(X_test)

Opcjonalnie możesz także kontrolować ładowanie modelu oraz przetwarzanie wstępne i końcowe za pomocą InferenceSpec. Więcej szczegółów podajemy w dalszej części tego wpisu. Za pomocą LOCAL_CONTAINER to świetny sposób na lokalne przetestowanie skryptu przed wdrożeniem w punkcie końcowym SageMaker.

Patrz: konstruktor-modeli-xgboost.ipynb przykład, aby przetestować wdrażanie zarówno lokalnie, jak i w punkcie końcowym SageMaker przy użyciu ModelBuilder.

Wdrażaj tradycyjne modele w punktach końcowych SageMaker

W poniższych przykładach pokazujemy, jak używać ModelBuilder wdrożyć tradycyjne modele uczenia maszynowego.

Modele XGBoost

Podobnie jak w poprzedniej sekcji, możesz wdrożyć model XGBoost w punkcie końcowym SageMaker, zmieniając plik mode parametr podczas tworzenia ModelBuilder obiekt:

model_builder = ModelBuilder( model=model, schema_builder=SchemaBuilder(sample_input=sample_input, sample_output=sample_output), role_arn=execution_role, mode=Mode.SAGEMAKER_ENDPOINT
)
xgb_builder = model_builder.build()
predictor = xgb_builder.deploy( instance_type='ml.c5.xlarge', initial_instance_count=1
)

Należy pamiętać, że podczas wdrażania na punktach końcowych SageMaker należy określić typ instancji i liczbę instancji podczas wywoływania metody deploy funkcja.

Patrz: konstruktor-modeli-xgboost.ipynb przykład wdrożenia modelu XGBoost.

Modele Trytona

Możesz użyć ModelBuilder aby wyświetlać modele PyTorch Serwer wnioskowania Triton. W tym celu należy określić model_server parametr jako ModelServer.TRITON, przekazać model i mieć SchemaBuilder obiekt, który wymaga przykładowych danych wejściowych i wyjściowych z modelu. ModelBuilder zajmie się resztą za Ciebie.

model_builder = ModelBuilder( model=model, schema_builder=SchemaBuilder(sample_input=sample_input, sample_output=sample_output), role_arn=execution_role, model_server=ModelServer.TRITON, mode=Mode.SAGEMAKER_ENDPOINT
) triton_builder = model_builder.build() predictor = triton_builder.deploy( instance_type='ml.g4dn.xlarge', initial_instance_count=1
)

Odnosić się do konstruktor-modelarzy-triton.ipynb wdrożyć model za pomocą Tritona.

Przytulanie modeli twarzy

W tym przykładzie pokazujemy, jak wdrożyć wstępnie wytrenowany model transformatora dostarczony przez Hugging Face do SageMaker. Chcemy użyć Przytulającej Twarzy pipeline aby załadować model, dlatego tworzymy niestandardową specyfikację wnioskowania dla ModelBuilder:

# custom inference spec with hugging face pipeline
class MyInferenceSpec(InferenceSpec): def load(self, model_dir: str): return pipeline("translation_en_to_fr", model="t5-small") def invoke(self, input, model): return model(input) inf_spec = MyInferenceSpec()

Definiujemy również dane wejściowe i wyjściowe obciążenia wnioskowaniem, definiując SchemaBuilder obiekt w oparciu o dane wejściowe i wyjściowe modelu:

schema = SchemaBuilder(value,output)

Następnie tworzymy ModelBuilder obiekt i wdróż model w punkcie końcowym SageMaker, postępując zgodnie z tą samą logiką, jak pokazano w drugim przykładzie:

builder = ModelBuilder( inference_spec=inf_spec, mode=Mode.SAGEMAKER_ENDPOINT, # you can change it to Mode.LOCAL_CONTAINER for local testing schema_builder=schema, image_uri=image,
)
model = builder.build( role_arn=execution_role, sagemaker_session=sagemaker_session,
)
predictor = model.deploy( initial_instance_count=1, instance_type='ml.g5.2xlarge'
)

Odnosić się do budowniczy modeli-przytulająca twarz.ipynb wdrożyć model potoku Hugging Face.

Wdrażaj modele podstawowe w punktach końcowych SageMaker

W poniższych przykładach pokazujemy, jak używać ModelBuilder do wdrażania modeli fundamentów. Podobnie jak w przypadku modeli wspomnianych wcześniej, wystarczy tylko identyfikator modelu.

Przytulanie twarzy Hub

Jeśli chcesz wdrożyć model podstawowy z Przytulanie twarzy Hub, wystarczy przekazać wstępnie wytrenowany identyfikator modelu. Na przykład poniższy fragment kodu wdraża plik metal-llama/Llama-2-7b-hf modelować lokalnie. Możesz zmienić tryb na Mode.SAGEMAKER_ENDPOINT do wdrożenia w punktach końcowych SageMaker.

model_builder = ModelBuilder( model="meta-llama/Llama-2-7b-hf", schema_builder=SchemaBuilder(sample_input, sample_output), model_path="/home/ec2-user/SageMaker/LoadTestResources/meta-llama2-7b", #local path where artifacts will be saved mode=Mode.LOCAL_CONTAINER, env_vars={ # Llama 2 is a gated model and requires a Hugging Face Hub token. "HUGGING_FACE_HUB_TOKEN": "<YourHuggingFaceToken>" }
)
model = model_builder.build()
local_predictor = model.deploy()

W przypadku modeli z bramką w Hugging Face Hub musisz poprosić o dostęp za pośrednictwem Hugging Face Hub i użyć powiązanego klucza, przekazując go jako zmienną środowiskową HUGGING_FACE_HUB_TOKEN. Niektóre modele Hugging Face mogą wymagać zaufania do zdalnego kodu. Można ją również ustawić jako zmienną środowiskową za pomocą HF_TRUST_REMOTE_CODE. Domyślnie, ModelBuilder użyje wnioskowania dotyczącego generowania tekstu obejmującego twarz (TGI) kontener jako podstawowy kontener dla modeli Hugging Face. Jeśli chcesz użyć wnioskowania o dużym modelu AWS (LMI) kontenery, możesz skonfigurować model_server parametr jako ModelServer.DJL_SERVING podczas konfiguracji ModelBuilder obiekt.

Zgrabna cecha ModelBuilder to możliwość lokalnego dostrajania parametrów kontenera podczas jego używania LOCAL_CONTAINER tryb. Z tej funkcji można korzystać po prostu biegając tuned_model = model.tune().

Odnosić się do Demo-model-builder-huggingface-llama2.ipynb wdrożyć model Hugging Face Hub.

SageMaker Szybki start

Amazon SageMaker JumpStart oferuje również szereg wstępnie przeszkolonych modeli fundamentów. Podobnie jak w przypadku procesu wdrażania modelu z Hugging Face Hub, wymagany jest identyfikator modelu. Wdrożenie modelu SageMaker JumpStart w punkcie końcowym SageMaker jest tak proste, jak uruchomienie następującego kodu:

model_builder = ModelBuilder( model="huggingface-llm-falcon-7b-bf16", schema_builder=SchemaBuilder(sample_input, sample_output), role_arn=execution_role
) sm_ep_model = model_builder.build() predictor = sm_ep_model.deploy()

Aby zapoznać się ze wszystkimi dostępnymi identyfikatorami modeli SageMaker JumpStart, zobacz Wbudowane algorytmy ze wstępnie wytrenowaną tabelą modeli. Odnosić się do konstruktor-modeli-jumpstart-falcon.ipynb aby wdrożyć model SageMaker JumpStart.

Składnik wnioskowania

ModelBulder umożliwia wykorzystanie nowych możliwości komponentu wnioskowania w SageMaker do wdrażania modeli. Aby uzyskać więcej informacji na temat komponentów wnioskowania, zobacz Zmniejsz koszty wdrożenia modelu średnio o 50%, korzystając z najnowszych funkcji SageMaker. Możesz użyć komponentów wnioskowania do wdrożenia za pomocą ModelBuilder określając endpoint_type=EndpointType.INFERENCE_COMPONENT_BASED deploy() metoda. Możesz także skorzystać z tune() metodę, która pobiera optymalną liczbę akceleratorów i modyfikuje ją w razie potrzeby.

resource_requirements = ResourceRequirements( requests={ "num_accelerators": 4, "memory": 1024, "copies": 1, }, limits={},
) goldfinch_predictor_2 = model_2.deploy( mode=Mode.SAGEMAKER_ENDPOINT, endpoint_type=EndpointType.INFERENCE_COMPONENT_BASED, ... )

Odnosić się do komponent-wnioskowania-konstruktora modelu.ipynb wdrożyć model jako komponent wnioskowania.

Dostosuj klasę ModelBuilder

Połączenia ModelBuilder class pozwala dostosować ładowanie modelu za pomocą InferenceSpec.

Ponadto można kontrolować serializację i deserializację ładunku i odpowiedzi oraz dostosowywać przetwarzanie wstępne i końcowe za pomocą CustomPayloadTranslator. Dodatkowo, jeśli chcesz rozszerzyć nasze gotowe kontenery w celu wdrożenia modelu w SageMaker, możesz skorzystać ModelBuilder do obsługi procesu pakowania modeli. W poniższej sekcji podajemy więcej szczegółów na temat tych możliwości.

Specyfikacja wnioskowania

Specyfikacja wnioskowania oferuje dodatkową warstwę dostosowywania. Pozwala zdefiniować sposób ładowania modelu i sposobu obsługi przychodzących żądań wnioskowania. Poprzez InferenceSpec, możesz zdefiniować niestandardowe procedury ładowania dla swoich modeli, pomijając domyślne mechanizmy ładowania. Ta elastyczność jest szczególnie korzystna podczas pracy z niestandardowymi modelami lub niestandardowymi potokami wnioskowania. Metodę invoke można dostosować, zapewniając możliwość dostosowania sposobu, w jaki model przetwarza przychodzące żądania (przetwarzanie wstępne i przetwarzanie końcowe). To dostosowanie może być niezbędne, aby zapewnić zgodność procesu wnioskowania z konkretnymi potrzebami modelu. Zobacz następujący kod:

class InferenceSpec(abc.ABC): @abc.abstractmethod def load(self, model_dir: str): pass @abc.abstractmethod def invoke(self, input_object: object, model: object): pass

Poniższy kod przedstawia przykład użycia tej klasy:

class MyInferenceSpec(InferenceSpec): def load(self, model_dir: str): return // model object def invoke(self, input, model): return model(input)

Niestandardowy tłumacz ładunku

Podczas wywoływania punktów końcowych SageMaker dane są przesyłane za pośrednictwem ładunków HTTP z różnymi typami MIME. Na przykład obraz wysłany do punktu końcowego w celu wywnioskowania musi zostać przekonwertowany na bajty po stronie klienta i przesłany za pośrednictwem ładunku HTTP do punktu końcowego. Gdy punkt końcowy odbierze ładunek, musi deserializować ciąg bajtów z powrotem do typu danych oczekiwanego przez model (znanego również jako deserializacja po stronie serwera). Gdy model zakończy przewidywanie, wyniki należy serializować do bajtów, które można odesłać za pośrednictwem ładunku HTTP do użytkownika lub klienta. Gdy klient otrzyma dane bajtowe odpowiedzi, musi przeprowadzić deserializację po stronie klienta, aby przekonwertować dane bajtowe z powrotem na oczekiwany format danych, taki jak JSON. Minimalnie, musisz przekonwertować dane dla następujących elementów (zgodnie z numeracją na poniższym schemacie):

  1. Serializacja żądania wnioskowania (obsługiwana przez klienta)
  2. Deserializacja żądania wnioskowania (obsługiwana przez serwer lub algorytm)
  3. Wywoływanie modelu względem ładunku
  4. Wysyłam z powrotem ładunek odpowiedzi
  5. Serializacja odpowiedzi na wnioskowanie (obsługiwana przez serwer lub algorytm)
  6. Deserializacja odpowiedzi wnioskowania (obsługiwana przez klienta)

Poniższy diagram przedstawia proces serializacji i deserializacji podczas procesu wywoływania.

Z łatwością pakuj i wdrażaj klasyczne systemy ML i LLM za pomocą Amazon SageMaker, część 1: Ulepszenia PySDK | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

W poniższym fragmencie kodu pokazujemy przykład CustomPayloadTranslator gdy potrzebne jest dodatkowe dostosowanie do obsługi serializacji i deserializacji, odpowiednio po stronie klienta i serwera:

from sagemaker.serve import CustomPayloadTranslator # request translator
class MyRequestTranslator(CustomPayloadTranslator): # This function converts the payload to bytes - happens on client side def serialize_payload_to_bytes(self, payload: object) -> bytes: # converts the input payload to bytes ... ... return //return object as bytes # This function converts the bytes to payload - happens on server side def deserialize_payload_from_stream(self, stream) -> object: # convert bytes to in-memory object ... ... return //return in-memory object # response translator class MyResponseTranslator(CustomPayloadTranslator): # This function converts the payload to bytes - happens on server side def serialize_payload_to_bytes(self, payload: object) -> bytes: # converts the response payload to bytes ... ... return //return object as bytes # This function converts the bytes to payload - happens on client side def deserialize_payload_from_stream(self, stream) -> object: # convert bytes to in-memory object ... ... return //return in-memory object

W demo-model-builder-pytorch.ipynb notebook, pokażemy, jak łatwo wdrożyć model PyTorch w punkcie końcowym SageMaker za pomocą ModelBuilder z CustomPayloadTranslator oraz InferenceSpec class.

Model etapowy do wdrożenia

Jeśli chcesz przygotować model do wnioskowania lub w rejestrze modeli, możesz użyć model.create() or model.register(). Włączony model jest tworzony w usłudze, a następnie można go wdrożyć później. Zobacz następujący kod:

model_builder = ModelBuilder( model=model, schema_builder=SchemaBuilder(X_test, y_pred), role_arn=execution_role, )
deployable_model = model_builder.build() deployable_model.create() # deployable_model.register() for model registry

Użyj niestandardowych kontenerów

SageMaker zapewnia wstępnie utworzone obrazy Dockera za wbudowane algorytmy i obsługiwane struktury głębokiego uczenia się wykorzystywane do uczenia i wnioskowania. Jeśli wstępnie zbudowany kontener SageMaker nie spełnia wszystkich Twoich wymagań, możesz rozszerzyć istniejący obraz, aby dostosować go do swoich potrzeb. Rozszerzając wstępnie zbudowany obraz, możesz korzystać z dołączonych bibliotek i ustawień głębokiego uczenia się bez konieczności tworzenia obrazu od zera. Więcej szczegółów na temat rozszerzania gotowych kontenerów można znaleźć w dokumencie SageMaker. ModelBuilder obsługuje przypadki użycia podczas przenoszenia własnych kontenerów, które są rozszerzone z naszych gotowych kontenerów Docker.

Aby w tym przypadku użyć własnego obrazu kontenera, należy ustawić pola image_uri i model_server przy definiowaniu ModelBuilder:

model_builder = ModelBuilder( model=model, # Pass in the actual model object. its "predict" method will be invoked in the endpoint. schema_builder=SchemaBuilder(X_test, y_pred), # Pass in a "SchemaBuilder" which will use the sample test input and output objects to infer the serialization needed. role_arn=execution_role, image_uri=image_uri, # REQUIRED FOR BYOC: Passing in image hosted in personal ECR Repo model_server=ModelServer.TORCHSERVE, # REQUIRED FOR BYOC: Passing in model server of choice mode=Mode.SAGEMAKER_ENDPOINT, dependencies={"auto": True, "custom": ["protobuf==3.20.2"]}
)

Tutaj image_uri będzie obrazem kontenera ARN przechowywanym na Twoim koncie Rejestr elastycznego pojemnika Amazon (Amazon ECR) repozytorium. Jeden przykład pokazano w następujący sposób:

# Pulled the xgboost:1.7-1 DLC and pushed to personal ECR repo
image_uri = "<your_account_id>.dkr.ecr.us-west-2.amazonaws.com/my-byoc:xgb"

Podczas image_uri jest ustawiony, podczas ModelBuilder kompilacji, pominie automatyczne wykrywanie obrazu po podaniu identyfikatora URI obrazu. Jeśli model_server nie jest ustawiony w ModelBuilder, pojawi się komunikat o błędzie sprawdzania poprawności, na przykład:

ValueError: Model_server must be set when image_uri is set. Supported model servers: {<ModelServer.TRITON: 5>, <ModelServer.DJL_SERVING: 4>, <ModelServer.TORCHSERVE: 1>}

W chwili publikacji tego wpisu, ModelBuilder obsługuje wnoszenie własnych kontenerów, które są wysunięte z naszego wstępnie zbudowane obrazy kontenerów DLC lub kontenery zbudowane przy użyciu serwerów modelowych, takich jak Głęboka biblioteka Java (DJL), Wnioskowanie dotyczące generowania tekstu (TGI), PochodniaPodaj, Serwer wnioskowania Triton.

Zależności niestandardowe

Podczas biegu ModelBuilder.build(), domyślnie automatycznie przechwytuje środowisko Pythona do pliku requirements.txt plik i instaluje tę samą zależność w kontenerze. Czasami jednak lokalne środowisko Pythona będzie powodować konflikt ze środowiskiem w kontenerze. ModelBuilder zapewnia prosty sposób modyfikowania przechwyconych zależności w celu naprawienia takich konfliktów zależności, umożliwiając dostarczenie niestandardowych konfiguracji do ModelBuilder. Należy pamiętać, że dotyczy to tylko TorchServe i Triton z InferenceSpec. Na przykład możesz określić zależności parametrów wejściowych, którymi jest słownik języka Python, w ModelBuilder w następujący sposób:

dependency_config = { "auto" = True, "requirements" = "/path/to/your/requirements.txt" "custom" = ["module>=1.2.3,<1.5", "boto3==1.16.*", "some_module@http://some/url"]
} ModelBuilder( # Other params dependencies=dependency_config,
).build()

Definiujemy następujące pola:

  • samochód – Czy próbować automatycznie przechwytywać zależności w swoim środowisku.
  • wymagania – Ciąg ścieżki do własnej requirements.txt plik. (To jest opcjonalne.)
  • zwyczaj – Lista wszelkich innych niestandardowych zależności, które chcesz dodać lub zmodyfikować. (To jest opcjonalne.)

Jeśli ten sam moduł jest określony w wielu miejscach, custom będzie miał wtedy najwyższy priorytet requirements, auto będzie miał najniższy priorytet. Załóżmy na przykład, że podczas automatycznego wykrywania ModelBuilder wykrywa numpy==1.25I requirements.txt dostarczony jest plik, który określa numpy>=1.24,<1.26. Dodatkowo istnieje niestandardowa zależność: custom = ["numpy==1.26.1"]. W tym przypadku, numpy==1.26.1 zostanie wybrany, gdy zainstalujemy zależności w kontenerze.

Sprzątać

Po zakończeniu testowania modeli zgodnie z najlepszą praktyką usuń punkt końcowy, aby zaoszczędzić koszty, jeśli punkt końcowy nie jest już wymagany. Możesz śledzić Sprzątać sekcję w każdym notesie demonstracyjnym lub użyj następującego kodu, aby usunąć model i punkt końcowy utworzony w wersji demonstracyjnej:

predictor.delete_model()
predictor.delete_endpoint()

Wnioski

Nowa funkcja SageMaker ModelBuilder upraszcza proces wdrażania modeli ML do środowiska produkcyjnego w SageMaker. Obsługując wiele skomplikowanych szczegółów za kulisami, ModelBuilder skraca czas uczenia się nowych użytkowników i maksymalizuje wykorzystanie w przypadku doświadczonych użytkowników. Za pomocą zaledwie kilku linijek kodu możesz wdrożyć modele z wbudowanymi frameworkami, takimi jak XGBoost, PyTorch, Triton i Hugging Face, a także modele dostarczone przez SageMaker JumpStart w solidnych, skalowalnych punktach końcowych w SageMaker.

Zachęcamy wszystkich użytkowników SageMaker do wypróbowania tej nowej możliwości, korzystając z Konstruktor Modeli strona z dokumentacją. ModelBuilder jest teraz dostępny dla wszystkich użytkowników SageMaker bez dodatkowych opłat. Skorzystaj z tego uproszczonego przepływu pracy, aby szybciej wdrożyć modele. Z niecierpliwością czekamy na informacje, jak ModelBuilder przyspiesza cykl życia rozwoju modelu!

Specjalne podziękowania dla Sirishy Upadhyayala, Raymonda Liu, Gary’ego Wanga, Dhawal Patel, Deepak Garg i Ram Vegiraju.


O autorach

Z łatwością pakuj i wdrażaj klasyczne systemy ML i LLM za pomocą Amazon SageMaker, część 1: Ulepszenia PySDK | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Melanie Li, PhD, jest starszym specjalistą TAM AI/ML w AWS z siedzibą w Sydney w Australii. Pomaga klientom korporacyjnym budować rozwiązania przy użyciu najnowocześniejszych narzędzi AI/ML w AWS i zapewnia wskazówki dotyczące projektowania i wdrażania rozwiązań ML z wykorzystaniem najlepszych praktyk. W wolnym czasie uwielbia poznawać przyrodę oraz spędzać czas z rodziną i przyjaciółmi.

Z łatwością pakuj i wdrażaj klasyczne systemy ML i LLM za pomocą Amazon SageMaker, część 1: Ulepszenia PySDK | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Marek Karp jest architektem ML w zespole Amazon SageMaker Service. Koncentruje się na pomaganiu klientom w projektowaniu, wdrażaniu i zarządzaniu obciążeniami ML na dużą skalę. W wolnym czasie lubi podróżować i odkrywać nowe miejsca.

Z łatwością pakuj i wdrażaj klasyczne systemy ML i LLM za pomocą Amazon SageMaker, część 1: Ulepszenia PySDK | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Sam Edwards, jest inżynierem chmury (AI/ML) w AWS Sydney i specjalizuje się w uczeniu maszynowym i Amazon SageMaker. Pasjonuje się pomaganiem klientom w rozwiązywaniu problemów związanych z przepływami pracy w uczeniu maszynowym i tworzeniu dla nich nowych rozwiązań. Poza pracą lubi uprawiać sporty rakietowe i podróżować.

Z łatwością pakuj i wdrażaj klasyczne systemy ML i LLM za pomocą Amazon SageMaker, część 1: Ulepszenia PySDK | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Raghu Ramesza jest starszym architektem rozwiązań ML w zespole Amazon SageMaker Service. Koncentruje się na pomaganiu klientom w budowaniu, wdrażaniu i migracji obciążeń produkcyjnych ML do SageMaker na dużą skalę. Specjalizuje się w uczeniu maszynowym, sztucznej inteligencji i wizji komputerowej. Posiada tytuł magistra informatyki na Uniwersytecie UT Dallas. W wolnym czasie lubi podróżować i fotografować.

Z łatwością pakuj i wdrażaj klasyczne systemy ML i LLM za pomocą Amazon SageMaker, część 1: Ulepszenia PySDK | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Shiva Raaj Kotini pracuje jako główny menedżer produktu w portfolio produktów wnioskowania Amazon SageMaker. Koncentruje się na wdrażaniu modeli, dostrajaniu wydajności i optymalizacji w SageMaker na potrzeby wnioskowania.

Z łatwością pakuj i wdrażaj klasyczne systemy ML i LLM za pomocą Amazon SageMaker, część 1: Ulepszenia PySDK | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Mohana Gandhiego jest starszym inżynierem oprogramowania w AWS. Jest związany z AWS od 10 lat i pracował nad różnymi usługami AWS, takimi jak EMR, EFA i RDS. Obecnie koncentruje się na ulepszaniu SageMaker Inference Experience. W wolnym czasie lubi spacery i maratony.

Znak czasu:

Więcej z Uczenie maszynowe AWS