Skróć czas potrzebny na wdrożenie modeli w Amazon SageMaker w celu przetestowania PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Skróć czas potrzebny na wdrożenie modeli w Amazon SageMaker do testów

Analitycy danych często szkolą swoje modele lokalnie i szukają odpowiedniej usługi hostingowej, aby wdrożyć swoje modele. Niestety, nie ma jednego ustalonego mechanizmu ani przewodnika po wdrażaniu wstępnie wytrenowanych modeli w chmurze. W tym poście przyjrzymy się wdrażaniu przeszkolonych modeli do Amazon Sage Maker hosting w celu skrócenia czasu wdrożenia.

SageMaker to w pełni zarządzana usługa uczenia maszynowego (ML). Dzięki SageMaker możesz szybko budować i trenować modele ML oraz bezpośrednio wdrażać je w hostowanym środowisku gotowym do produkcji. Dodatkowo nie musisz zarządzać serwerami. Otrzymujesz zintegrowane środowisko notatników Jupyter z łatwym dostępem do źródeł danych. Możesz przeprowadzać analizę danych, trenować modele i testować je przy użyciu własnych algorytmów lub korzystać z algorytmów ML dostarczonych przez firmę SageMaker, które są zoptymalizowane pod kątem wydajnej pracy z dużymi zestawami danych rozmieszczonymi na wielu komputerach. Szkolenie i hosting są rozliczane według minut użytkowania, bez opłat minimalnych i bez zobowiązań z góry.

Omówienie rozwiązania

Naukowcy zajmujący się danymi czasami szkolą modele lokalnie przy użyciu swojego środowiska IDE i albo wysyłają te modele do zespołu inżynierów ML w celu wdrożenia, albo po prostu uruchamiają prognozy lokalnie na potężnych maszynach. W tym poście przedstawiamy bibliotekę Pythona, która upraszcza proces wdrażania modeli w SageMaker for Hosting na punktach końcowych w czasie rzeczywistym lub bezserwerowych.

Ta biblioteka Pythona zapewnia naukowcom zajmującym się danymi prosty interfejs umożliwiający szybkie rozpoczęcie pracy z SageMakerem bez konieczności znajomości jakiejkolwiek niskopoziomowej funkcjonalności SageMaker.

Jeśli masz modele przeszkolone lokalnie przy użyciu preferowanego środowiska IDE i chcesz skorzystać ze skali chmury, możesz użyć tej biblioteki do wdrożenia modelu w programie SageMaker. Dzięki SageMaker, oprócz wszystkich korzyści związanych ze skalowaniem platformy ML opartej na chmurze, masz dostęp do specjalnie zaprojektowanych narzędzi szkoleniowych (szkolenie rozproszone, dostrajanie hiperparametrów), zarządzanie eksperymentami, zarządzanie modelami, wykrywanie stronniczości, wyjaśnianie modelu i wiele innych możliwości, które mogą pomóc w dowolnym aspekcie cyklu życia ML. Możesz wybierać spośród trzech najpopularniejszych frameworków dla ML: Scikit-learn, PyTorch i TensorFlow, i możesz wybrać żądany typ obliczeń. Po drodze dostępne są ustawienia domyślne, dzięki czemu użytkownicy tej biblioteki mogą wdrażać swoje modele bez konieczności podejmowania złożonych decyzji lub uczenia się nowych koncepcji. W tym poście pokazujemy, jak zacząć korzystać z tej biblioteki i zoptymalizować wdrażanie modeli ML na hostingu SageMaker.

Bibliotekę można znaleźć w Repozytorium GitHub.

Zestaw narzędzi do migracji SageMaker

Połączenia SageMakerMigration klasa jest dostępna za pośrednictwem biblioteki Pythona opublikowanej na GitHub. Instrukcje instalacji tej biblioteki znajdują się w repozytorium; upewnij się, że postępujesz zgodnie z README, aby poprawnie skonfigurować swoje środowisko. Po zainstalowaniu tej biblioteki pozostała część tego postu mówi o tym, jak z niej korzystać.

Połączenia SageMakerMigration Klasa składa się z abstrakcji wysokiego poziomu nad interfejsami API SageMaker, które znacznie zmniejszają liczbę kroków potrzebnych do wdrożenia modelu w programie SageMaker, jak pokazano na poniższym rysunku. Jest to przeznaczone do eksperymentowania, dzięki czemu programiści mogą szybko rozpocząć i przetestować SageMaker. Nie jest przeznaczony do migracji produkcyjnych.

W przypadku modeli Scikit-learn, PyTorch i TensorFlow ta biblioteka obsługuje wdrażanie przeszkolonych modeli do punktu końcowego czasu rzeczywistego SageMaker lub punktu końcowego bezserwerowego. Aby dowiedzieć się więcej o opcjach wnioskowania w programie SageMaker, zobacz Wdrażaj modele do wnioskowania.

Punkty końcowe w czasie rzeczywistym a bezserwerowe

Wnioskowanie w czasie rzeczywistym jest idealne w przypadku obciążeń wnioskowania, w których występują wymagania w czasie rzeczywistym, interaktywne i o niskim opóźnieniu. Możesz wdrożyć swój model w usługach hostingowych SageMaker i uzyskać punkt końcowy, którego można użyć do wnioskowania. Te punkty końcowe są w pełni zarządzane i obsługują automatyczne skalowanie.

SageMaker Serverless Inference to specjalnie opracowana opcja wnioskowania, która ułatwia wdrażanie i skalowanie modeli ML. Wnioskowanie bezserwerowe jest idealne w przypadku obciążeń, które mają okresy bezczynności między nagłymi wzrostami ruchu i mogą tolerować zimne rozruchy. Bezserwerowe punkty końcowe automatycznie uruchamiają zasoby obliczeniowe i skalują je w zależności od ruchu, eliminując potrzebę wybierania typów wystąpień lub zarządzania zasadami skalowania. Eliminuje to niezróżnicowany ciężar związany z wyborem serwerów i zarządzaniem nimi.

W zależności od przypadku użycia możesz chcieć szybko hostować swój model w programie SageMaker bez faktycznego posiadania instancji i ponoszenia kosztów, w takim przypadku bezserwerowy punkt końcowy jest doskonałym rozwiązaniem.

Przygotuj wyszkolony model i skrypt wnioskowania

Po zidentyfikowaniu modelu, który chcesz wdrożyć w programie SageMaker, musisz upewnić się, że model zostanie przedstawiony firmie SageMaker we właściwym formacie. Punkty końcowe programu SageMaker zazwyczaj składają się z dwóch składników: wytrenowanego artefaktu modelu (.pth, .pkl itd.) oraz skryptu wnioskowania. Skrypt wnioskowania nie zawsze jest obowiązkowy, ale jeśli nie zostanie podany, zostaną zastosowane domyślne procedury obsługi dla używanego kontenera udostępniania. Niezbędne jest dostarczenie tego skryptu, jeśli chcesz dostosować funkcje wejścia/wyjścia do wnioskowania.

Wytrenowany artefakt modelu to po prostu zapisany model Scikit-learn, PyTorch lub TensorFlow. Dla Scikit-learn jest to zazwyczaj plik pickle, dla PyTorch jest to plik .pt lub .pth, a dla TensorFlow jest to folder z zasobami, plikami .pb i innymi zmiennymi.

Ogólnie rzecz biorąc, musisz mieć możliwość kontrolowania sposobu, w jaki model przetwarza dane wejściowe i wykonuje wnioskowanie, a także kontrolować format wyjściowy odpowiedzi. Dzięki SageMaker możesz zapewnić skrypt wnioskowania aby dodać to dostosowanie. Każdy skrypt wnioskowania używany przez SageMaker musi mieć co najmniej jedną z następujących czterech funkcji obsługi: model_fn, input_fn, predict_fn, output_fn.

Zwróć uwagę, że te cztery funkcje dotyczą PyTorch i Nauka scikitu konkretnie pojemniki. TensorFlow ma nieco inne funkcje obsługi, ponieważ jest zintegrowany z Obsługa TensorFlow. W przypadku skryptu wnioskowania z TensorFlow masz dwa obsługa modeli: input_handler i output_handler. Ponownie, mają one ten sam cel przetwarzania wstępnego i końcowego, z którym można pracować, ale są nieco inaczej skonfigurowane pod kątem integracji z Obsługa TensorFlow. W przypadku modeli PyTorch model_fn jest obowiązkową funkcją w skrypcie wnioskowania.

model_fn

Jest to funkcja, która jest wywoływana po raz pierwszy podczas wywoływania punktu końcowego programu SageMaker. Tutaj piszesz swój kod, aby załadować model. Na przykład:

def model_fn(model_dir):
    model = Your_Model()
    with open(os.path.join(model_dir, 'model.pth'), 'rb') as f:
        model.load_state_dict(torch.load(f))
    return model

W zależności od struktury i typu modelu ten kod może ulec zmianie, ale funkcja musi zwrócić zainicjowany model.

wejście_fn

Jest to druga funkcja, która jest wywoływana po wywołaniu punktu końcowego. Ta funkcja pobiera dane wysyłane do punktu końcowego w celu wnioskowania i analizuje je w formacie wymaganym do wygenerowania prognozy przez model. Na przykład:

def input_fn(request_body, request_content_type):
    """An input_fn that loads a pickled tensor"""
    if request_content_type == 'application/python-pickle':
        return torch.load(BytesIO(request_body))
    else:
        # Handle other content-types here or raise an Exception
        # if the content type is not supported.
        pass

Połączenia request_body zawiera dane, które mają być użyte do generowania wnioskowania z modelu i są analizowane w tej funkcji, tak aby były w wymaganym formacie.

przewidywać_fn

Jest to trzecia funkcja, która jest wywoływana podczas wywoływania modelu. Ta funkcja pobiera wstępnie przetworzone dane wejściowe zwrócone z input_fn i używa modelu zwróconego z model_fn dokonać prognozy. Na przykład:

def predict_fn(input_data, model):
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    model.to(device)
    model.eval()
    with torch.no_grad():
        return model(input_data.to(device))

Możesz opcjonalnie dodać output_fn przeanalizować wynik predict_fn przed zwróceniem go klientowi. Sygnatura funkcji to def output_fn(prediction, content_type).

Przenieś swój wytrenowany model do SageMaker

Po uzyskaniu wytrenowanego pliku modelu i skryptu wnioskowania należy umieścić te pliki w folderze w następujący sposób:

#SKLearn Model

model_folder/
    model.pkl
    inference.py
    
# Tensorflow Model
model_folder/
    0000001/
        assets/
        variables/
        keras_metadata.pb
        saved_model.pb
    inference.py
    
# PyTorch Model
model_folder/
    model.pth
    inference.py

Po przygotowaniu i zapisaniu modelu i skryptu wnioskowania w tej strukturze folderów model jest gotowy do wdrożenia w programie SageMaker. Zobacz następujący kod:

from sagemaker_migration import frameworks as fwk

if __name__ == "__main__":
    ''' '''
    sk_model = fwk.SKLearnModel(
        version = "0.23-1", 
        model_data = 'model.joblib',
        inference_option = 'real-time',
        inference = 'inference.py',
        instance_type = 'ml.m5.xlarge'
    )
    sk_model.deploy_to_sagemaker()

Po wdrożeniu punktu końcowego upewnij się, że wszystkie zasoby, z których nie będziesz korzystać, wyczyść za pomocą konsoli SageMaker lub usuń_punkt końcowy Wywołanie Boto3 API.

Wnioski

Celem projektu SageMaker Migration Toolkit jest ułatwienie analitykom danych dołączania ich modeli do programu SageMaker w celu korzystania z wnioskowania opartego na chmurze. Repozytorium będzie nadal ewoluować i obsługiwać więcej opcji migracji obciążeń do SageMaker. Kod jest open source i zapraszamy do wkładu społeczności poprzez prośby i problemy.

Zapoznaj się z Repozytorium GitHub aby dowiedzieć się więcej na temat korzystania z zestawu narzędzi migracji SageMaker, a także przekaż przykłady lub prośby o dodanie funkcji do projektu!


O autorach

Skróć czas potrzebny na wdrożenie modeli w Amazon SageMaker w celu przetestowania PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Kirita Thadaki jest architektem ML Solutions pracującym w zespole Amazon SageMaker Service SA. Przed dołączeniem do AWS Kirit spędził trochę czasu pracując we wczesnych etapach start-upów AI, a następnie konsultując się na różnych stanowiskach w badaniach AI, MLOps i przywództwie technicznym.

Skróć czas potrzebny na wdrożenie modeli w Amazon SageMaker w celu przetestowania PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Ram Vegiraju jest architektem ML w zespole SageMaker Service. Koncentruje się na pomaganiu klientom w budowaniu i optymalizowaniu ich rozwiązań AI/ML w Amazon SageMaker. W wolnym czasie uwielbia podróżować i pisać.

Znak czasu:

Więcej z Uczenie maszynowe AWS