Logo Zephyrnet

Tworzenie pełnego przepływu pracy TensorFlow 2 w Amazon SageMaker

Data:

Zarządzanie pełnym cyklem życia projektu dogłębnego uczenia się może być trudnym zadaniem, zwłaszcza jeśli korzystasz z wielu oddzielnych narzędzi i usług. Na przykład możesz użyć różnych narzędzi do wstępnego przetwarzania danych, szkolenia z prototypowania i kodu wnioskowania, pełnego szkolenia i strojenia modelu, wdrożeń modelu i automatyzacji przepływu pracy, aby zaaranżować wszystkie powyższe elementy do produkcji. Tarcie spowodowane przełączaniem narzędzi może spowolnić projekty i zwiększyć koszty. Ten post pokazuje, jak efektywnie zarządzać całym cyklem życia projektów głębokiego uczenia się Amazon Sage Maker. TensorFlow 2 jest strukturą używaną w przykładowym kodzie, chociaż opisane pojęcia mają ogólne zastosowanie również do innych struktur.

Ten post ma również powiązany przykładowy notatnik, który można uruchomić w mniej niż godzinę, aby zademonstrować wszystkie omówione tutaj funkcje. Aby uzyskać więcej informacji, zobacz GitHub repozytorium.

Omówienie przepływu pracy Amazon SageMaker

Każdy projekt do analizy danych wykorzystujący TensorFlow 2 lub inny framework zaczyna się od zestawu danych: uzyskiwania, eksplorowania i przetwarzania wstępnego. W kontekście przepływu pracy Amazon SageMaker eksploracja danych zwykle ma miejsce w notebookach. Te notebooki są najlepiej na stosunkowo małych, mniej wydajnych i niedrogich typach instancji, ponieważ zazwyczaj działają przez większość dnia roboczego.

W związku z tym, chyba że zestaw danych jest stosunkowo mały, notebook nie jest najlepszym miejscem do wykonywania przetwarzania danych na pełną skalę, szkolenia modeli i wnioskowania. Ponieważ zadania te zwykle wymagają znacznych równoległych zasobów obliczeniowych, wykonanie ich nie jest możliwe. Zamiast tego o wiele bardziej praktyczne i opłacalne jest korzystanie z funkcji Amazon SageMaker do rozdzielania oddzielnych klastrów o odpowiednich rozmiarach, o większej mocy instancji, które mogą szybko wykonać te zadania. Wszystkie te opłaty są naliczane co sekundę, a po zakończeniu zadania Amazon SageMaker automatycznie zamyka instancje. W rezultacie w typowym przepływie pracy Amazon SageMaker najczęstsze opłaty dotyczą tylko stosunkowo niedrogich notebooków do eksploracji danych i prototypowania, a nie wydajniejszych i droższych układów GPU i przyspieszonych obliczeń.

Po zakończeniu prototypowania możesz wyjść poza notebooki dzięki automatyzacji przepływu pracy. Zautomatyzowany potok jest niezbędny do zorganizowania pełnego przepływu pracy poprzez wdrożenie modelu w solidny i powtarzalny sposób. Amazon SageMaker zapewnia również natywne rozwiązanie tego problemu. W poniższych sekcjach tego postu przedstawiono różne funkcje Amazon SageMaker, których można użyć do wdrożenia tych etapów cyklu życia projektu.

Transformacja danych za pomocą Amazon SageMaker Processing

Przetwarzanie Amazon SageMaker pomaga wstępnie przetwarzać duże zestawy danych w zarządzanym klastrze o odpowiedniej wielkości, oddzielonym od notebooków. Przetwarzanie Amazon SageMaker obejmuje gotową obsługę Scikit-learn i obsługuje każdą inną technologię, która jest kontenerowana. Na przykład można uruchomić przejściowe klastry Apache Spark do transformacji funkcji w ramach przetwarzania Amazon SageMaker.

Aby korzystać z Amazon SageMaker Processing ze Scikit-learn, dostarcz skrypt wstępnego przetwarzania danych w języku Python ze standardowym kodem Scikit-learn. Jest tylko minimalna umowa na skrypt: dane wejściowe i wyjściowe muszą być umieszczone w określonych lokalizacjach. Przetwarzanie Amazon SageMaker automatycznie ładuje dane wejściowe Usługa Amazon Simple Storage (Amazon S3) i przesyła przekształcone dane z powrotem do Amazon S3 po zakończeniu zadania.

Przed uruchomieniem zadania przetwarzania Amazon SageMaker utwórz instancję obiektu SKLearnProcessor, jak pokazano w poniższym przykładzie kodu. W tym obiekcie określ typ instancji do użycia w zadaniu i liczbę instancji.

from sagemaker import get_execution_role
from sagemaker.sklearn.processing import SKLearnProcessor sklearn_processor = SKLearnProcessor(framework_version='0.20.0', role=get_execution_role(), instance_type='ml.m5.xlarge', instance_count=2)

Aby równomiernie rozdzielić pliki danych między instancje klastra w celu przetworzenia, określ ShardedByS3Key typ dystrybucji w ProcessingInput obiekt. To gwarantuje, że jeśli są n instancje, każda instancja odbiera 1 / n pliki z określonego segmentu S3. Możliwość łatwego tworzenia dużego klastra instancji dla bezstanowych transformacji danych to tylko jedna z wielu korzyści zapewnianych przez Amazon SageMaker Processing.

from sagemaker.processing import ProcessingInput, ProcessingOutput
from time import gmtime, strftime processing_job_name = "tf-2-workflow-{}".format(strftime("%d-%H-%M-%S", gmtime()))
output_destination = 's3://{}/{}/data'.format(bucket, s3_prefix) sklearn_processor.run(code='preprocessing.py', job_name=processing_job_name, inputs=[ProcessingInput( source=raw_s3, destination='/opt/ml/processing/input', s3_data_distribution_type='ShardedByS3Key')], outputs=[ProcessingOutput(output_name='train', destination='{}/train'.format(output_destination), source='/opt/ml/processing/train'), ProcessingOutput(output_name='test', destination='{}/test'.format(output_destination), source='/opt/ml/processing/test')])

Szkolenie prototypowe i kod wnioskowania w trybie lokalnym

Gdy zestaw danych jest gotowy do szkolenia, następnym krokiem jest prototypowanie kodu szkolenia. W przypadku TensorFlow 2 najwygodniejszym obiegiem pracy jest udostępnienie skryptu szkoleniowego do wprowadzania przez wstępnie skonfigurowany pojemnik TensorFlow 2 Amazon SageMaker. Ta funkcja nosi nazwę tryb skryptui współpracuje płynnie z Amazon SageMaker tryb lokalny funkcja szkolenia.

Tryb lokalny jest wygodnym sposobem upewnienia się, że kod działa lokalnie na komputerze przenośnym przed przejściem do pełnoskalowego hostowanego szkolenia w osobnym klastrze o odpowiedniej wielkości, którym zarządza Amazon SageMaker. W trybie lokalnym zazwyczaj trenujesz przez krótki czas tylko przez kilka epok, być może tylko na próbce pełnego zestawu danych, aby potwierdzić, że kod działa poprawnie i uniknąć marnowania pełnego czasu na szkolenie. Określ także typ instancji jako jeden z tych local_gpu or local, w zależności od tego, czy notebook jest na instancji GPU czy procesora.

from sagemaker.tensorflow import TensorFlow git_config = {'repo': 'https://github.com/aws-samples/amazon-sagemaker-script-mode', 'branch': 'master'} model_dir = '/opt/ml/model'
train_instance_type = 'local'
hyperparameters = {'epochs': 5, 'batch_size': 128, 'learning_rate': 0.01}
local_estimator = TensorFlow(git_config=git_config, source_dir='tf-2-workflow/train_model', entry_point='train.py', model_dir=model_dir, train_instance_type=train_instance_type, train_instance_count=1, hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), base_job_name='tf-2-workflow', framework_version='2.1', py_version='py3', script_mode=True)

Chociaż szkolenie w trybie lokalnym jest bardzo przydatne, aby upewnić się, że kod szkoleniowy działa przed przejściem do szkolenia w pełnej skali, wygodne jest również, aby mieć łatwy sposób prototypowania kodu wnioskowania lokalnie. Jedną z możliwości jest pobranie TensorFlow SavedModel artefakt lub modelowy punkt kontrolny zapisany w Amazon S3 i załaduj go do notebooka w celu przetestowania. Jednak łatwiejszym sposobem na to jest użycie punktów końcowych trybu lokalnego.

Możesz wdrożyć model w punkcie końcowym trybu lokalnego, który zawiera kontener Amazon SageMaker TensorFlow Serving, za pomocą obiektu estymatora z zadania szkoleniowego trybu lokalnego. Z jednym wyjątkiem ten kod jest taki sam, jak kod do wdrażania modelu w oddzielnym hostowanym punkcie końcowym. Po prostu wywołaj metodę wdrażania estymatora lokalnego i ponownie określ typ instancji jako jeden z nich local_gpu or local, w zależności od tego, czy notebook jest na instancji GPU czy procesora.

local_predictor = local_estimator.deploy(initial_instance_count=1, instance_type='local')
local_results = local_predictor.predict(x_test[:10])['predictions']

Przed użyciem trybu lokalnego upewnij się, że w Twojej instancji można uruchomić docker-compose lub nvidia-docker-compose (dla instancji GPU). Repozytorium GitHub dla tego posta na blogu zawiera skrypt, którego można użyć do tego celu.

Automatyczne dostrajanie modelu

Po zakończeniu prototypowania kolejnym krokiem jest skorzystanie ze szkolenia hostowanego przez Amazon SageMaker i automatycznego dostrajania modelu. Szkolenie hostowane jest preferowane do prowadzenia szkolenia na pełną skalę, zwłaszcza na dużą skalę, szkolenia rozproszone. W przeciwieństwie do trybu lokalnego, szkolenie hostowane odbywa się nie na samym notebooku, ale na osobnym klastrze maszyn, którymi zarządza Amazon SageMaker. Obiekt estymatora dla hostowanego szkolenia jest podobny do estymatora trybu lokalnego, z wyjątkiem:

Ponadto, ponieważ prototypowanie w trybie lokalnym udowodniło, że kod szkolenia działa, można zmodyfikować hostowany estymator szkolenia, aby trenował dla większej liczby epok oraz w pełnym zestawie danych, jeśli próbka została użyta w trybie lokalnym.

Jednak prowadzenie indywidualnych zadań szkoleniowych i ręczne ulepszanie hiperparametrów w poszukiwaniu najlepszego modelu może być zniechęcającym i czasochłonnym zadaniem. Wybór odpowiedniej kombinacji hiperparametrów zależy od zestawu danych i algorytmu. Niektóre algorytmy mają wiele różnych hiperparametrów, które można dostosować, niektóre są bardzo wrażliwe na wybrane wartości hiperparametrów, a większość ma nieliniowy związek między dopasowaniem modelu a wartościami hiperparametrów. Automatyczne dostrajanie modelu przyspiesza proces dostrajania: wykonuje wiele zadań szkoleniowych z różnymi kombinacjami hiperparametrów, aby znaleźć zestaw o najlepszej wydajności modelu.

Jak pokazano w poniższym przykładzie kodu, aby użyć automatycznego dostrajania modelu, najpierw określ hiperparametry do dostrojenia, ich zakresy dostrajania i obiektywne parametry do optymalizacji. ZA HyperparameterTuner obiekt przyjmuje je jako parametry. Każde zadanie strojenia musi również określać maksymalną liczbę zadań szkoleniowych w ramach zadania strojenia, w tym przypadku 15, oraz ile równoległości zastosować, w tym przypadku pięć zadań jednocześnie. Przy tych parametrach zadanie strojenia jest zakończone po uruchomieniu trzech serii pięciu zadań równolegle. W przypadku domyślnej strategii strojenia optymalizacji bayesowskiej wyniki poprzednich grup zadań szkoleniowych informują o wyszukiwaniu strojenia, dlatego lepiej jest podzielić je na grupy zadań równoległych zamiast uruchamiać je równolegle. Istnieje kompromis: korzystanie z większej liczby równoległych zadań kończy strojenie wcześniej, ale prawdopodobnie poświęca dokładność wyszukiwania.

from sagemaker.tuner import IntegerParameter, CategoricalParameter, ContinuousParameter, HyperparameterTuner hyperparameter_ranges = { 'learning_rate': ContinuousParameter(0.001, 0.2, scaling_type="Logarithmic"), 'epochs': IntegerParameter(10, 50), 'batch_size': IntegerParameter(64, 256),
} metric_definitions = [{'Name': 'loss', 'Regex': ' loss: ([0-9\.]+)'}, {'Name': 'val_loss', 'Regex': ' val_loss: ([0-9\.]+)'}] objective_metric_name = 'val_loss'
objective_type = 'Minimize' tuner = HyperparameterTuner(estimator, objective_metric_name, hyperparameter_ranges, metric_definitions, max_jobs=15, max_parallel_jobs=5, objective_type=objective_type) tuning_job_name = "tf-2-workflow-{}".format(strftime("%d-%H-%M-%S", gmtime()))
tuner.fit(inputs, job_name=tuning_job_name)

Wdrażanie i automatyzacja przepływu pracy za pomocą AWS Step Functions Data Science SDK

Wygodną opcją do wdrożenia najlepszego modelu z tuningu jest punkt końcowy hostowany przez Amazon SageMaker, który obsługuje prognozy w czasie rzeczywistym (zadania transformacji wsadowej są również dostępne dla prognoz asynchronicznych offline). Punkt końcowy pobiera TensorFlow SavedModel i wdraża go do kontenera Amazon SageMaker TensorFlow Serving. Możesz to zrobić za pomocą jednego wiersza kodu, wywołując funkcję HyperparameterTuner metoda wdrażania obiektu:

tuning_predictor = tuner.deploy(initial_instance_count=1, instance_type='ml.m5.xlarge')

Jednak chociaż notebooki świetnie nadają się do prototypowania, zwykle nie są używane do wdrażania w środowisku produkcyjnym. Zamiast tego preferowany jest organizator przepływu pracy do uruchamiania potoku składającego się z wielu kroków, w tym szkolenia i wdrażania. Na przykład prosty potok w Amazon SageMaker składa się z czterech kroków:

  1. Trenowanie modelu.
  2. Tworzenie obiektu Amazon SageMaker Model, który otacza artefakt modelu do wyświetlenia.
  3. Tworzenie konfiguracji punktu końcowego Amazon SageMaker określającej sposób obsługi modelu (w tym typ wystąpienia i liczbę wystąpień).
  4. Wdrażanie wyszkolonego modelu w skonfigurowanym punkcie końcowym Amazon SageMaker.

Połączenia AWS Step Functions SDK do analizy danych automatyzuje proces tworzenia i uruchamiania takich potoków za pomocą Amazon SageMaker i Funkcje kroków AWS, bezserwerowa usługa organizacji przepływu pracy. Ten zestaw SDK umożliwia tworzenie przepływu pracy za pomocą krótkich, prostych skryptów w języku Python, które definiują kroki przepływu pracy i łączą je w całość. Funkcje kroków AWS koordynują wszystkie kroki przepływu pracy bez potrzeby zarządzania podstawową infrastrukturą.

Chociaż pakiet AWS Step Functions Data Science SDK zapewnia różne operacje podstawowe do tworzenia złożonych potoków od zera, ma również wstępnie przygotowane szablony dla typowych przepływów pracy, w tym prosty Szkolenie Rurociąg przepływ pracy na potrzeby szkolenia i wdrażania modelu. Poniższy kod konfiguruje taki potok tylko kilkoma parametrami, przede wszystkim estymatorem szkolenia oraz lokalizacjami wejścia i wyjścia w Amazon S3:

import stepfunctions
from stepfunctions.template.pipeline import TrainingPipeline workflow_execution_role = "<StepFunctions-execution-role-arn>" pipeline = TrainingPipeline( estimator=estimator, role=workflow_execution_role, inputs=inputs, s3_bucket=bucket
)

Po zdefiniowaniu potoku można go wizualizować jako wykres, utworzyć go i wykonać tyle razy, ile potrzeba. W rzeczywistości można uruchomić wiele przepływów pracy równolegle. Gdy przepływ pracy jest uruchomiony, możesz sprawdzić postęp przepływu pracy w konsoli AWS Step Functions lub wywołując polecenie render_progress metoda. Poniższy diagram pokazuje renderowane wykonanie przepływu pracy z postępem na etapie szkolenia.

Zestaw AWS Step Functions Data Science SDK umożliwia wiele innych możliwych przepływów pracy w celu automatyzacji TensorFlow 2 i innych projektów uczenia maszynowego. Jednym z przykładów jest przepływ pracy w celu okresowej automatyzacji ponownego szkolenia modelu. Taki przepływ pracy może obejmować test jakości modelu po szkoleniu, z kolejnymi gałęziami warunkowymi na wypadek zaliczenia testu jakości (model jest wdrożony) lub niepowodzenia (brak wdrożenia modelu). Inne możliwe kroki przepływu pracy obejmują automatyczne dostrajanie modelu, ETL z Klej AWS, i więcej. Aby uzyskać więcej informacji o ponownym szkoleniu przepływów pracy, zobacz Automatyzacja przekwalifikowania i wdrożenia modelu za pomocą AWS Step Functions Data Science SDK dla Amazon SageMaker.

Wnioski

W tym poście omówiono funkcje Amazon SageMaker dotyczące transformacji danych, szkolenia z prototypowania i kodu wnioskowania, automatycznego dostrajania modelu oraz szkolenia i wnioskowania hostowanego. Ponadto dowiedziałeś się, jak pakiet AWS Step Functions Data Science SDK pomaga zautomatyzować przepływy pracy po zakończeniu prototypowania projektu. Wszystkie te funkcje są centralnymi elementami projektów z udziałem TensorFlow 2 i innych platform do głębokiego uczenia się w Amazon SageMaker.

Oprócz tych funkcji może obowiązywać wiele innych. Na przykład, aby poradzić sobie z typowymi problemami podczas treningu modelu, takimi jak znikanie lub eksplodowanie gradientów, Debuger Amazon SageMaker jest przydatne. Aby zarządzać typowymi problemami, takimi jak przesunięcie danych w modelach wdrożonych w produkcji, można zastosować Monitor modelu Amazon SageMaker. Aby uzyskać więcej informacji o funkcjach przepływu pracy Amazon SageMaker omawianych w tym poście, zobacz powiązane GitHub repozytorium.


O autorze

Brent Rabowski koncentruje się na analizie danych w AWS i wykorzystuje swoją wiedzę, aby pomagać klientom AWS we własnych projektach związanych z analizą danych.

Źródło: https://aws.amazon.com/blogs/machine-learning/creating-a-complete-tensorflow-2-workflow-in-amazon-sagemaker/

spot_img

Najnowsza inteligencja

spot_img

Czat z nami

Cześć! Jak mogę ci pomóc?