Trenowanie modeli TensorFlow na dużą skalę przy użyciu zestawu Azure Machine Learning SDK (wersja 1)
DOTYCZY: Zestaw SDK języka Python w wersji 1
Z tego artykułu dowiesz się, jak uruchamiać skrypty szkoleniowe TensorFlow na dużą skalę przy użyciu usługi Azure Machine Learning.
W tym przykładzie trenuje i rejestruje model TensorFlow w celu klasyfikowania cyfr odręcznych przy użyciu głębokiej sieci neuronowej (DNN).
Niezależnie od tego, czy tworzysz model TensorFlow od podstaw, czy wprowadzasz istniejący model do chmury, możesz użyć usługi Azure Machine Learning, aby skalować zadania szkoleniowe typu open source w celu tworzenia, wdrażania, wdrażania i monitorowania modeli klasy produkcyjnej.
Wymagania wstępne
Uruchom ten kod w jednym z następujących środowisk:
Wystąpienie obliczeniowe usługi Azure Machine Learning — brak pobierania ani instalacji
- Ukończ przewodnik Szybki start: rozpocznij pracę z usługą Azure Machine Learning, aby utworzyć dedykowany serwer notesów wstępnie załadowany przy użyciu zestawu SDK i przykładowego repozytorium.
- W folderze przykładów uczenia głębokiego na serwerze notesów znajdź ukończony i rozszerzony notes, przechodząc do tego katalogu: how-to-use-azureml > ml-frameworks > tensorflow > train-hyperparameter-tune-deploy-with-tensorflow folder.
Własny serwer jupyter Notebook
- Zainstaluj zestaw AZURE Machine Learning SDK (>= 1.15.0).
- Utwórz plik konfiguracji obszaru roboczego.
- Pobieranie przykładowych plików
tf_mnist.py
skryptów iutils.py
Możesz również znaleźć ukończoną wersję notesu Jupyter Notebook na stronie przykładów usługi GitHub. Notes zawiera rozwinięte sekcje obejmujące inteligentne dostrajanie hiperparametrów, wdrażanie modelu i widżety notesu.
Przed uruchomieniem kodu w tym artykule w celu utworzenia klastra procesora GPU należy zażądać zwiększenia limitu przydziału dla obszaru roboczego.
Konfigurowanie eksperymentu
Ta sekcja konfiguruje eksperyment szkoleniowy, ładując wymagane pakiety języka Python, inicjując obszar roboczy, tworząc docelowy obiekt obliczeniowy i definiując środowisko szkoleniowe.
Importowanie pakietów
Najpierw zaimportuj niezbędne biblioteki języka Python.
import os
import urllib
import shutil
import azureml
from azureml.core import Experiment
from azureml.core import Workspace, Run
from azureml.core import Environment
from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException
Inicjowanie obszaru roboczego
Obszar roboczy usługi Azure Machine Learning to zasób najwyższego poziomu dla usługi. Zapewnia scentralizowane miejsce do pracy ze wszystkimi tworzonymi artefaktami. W zestawie SDK języka Python możesz uzyskać dostęp do artefaktów obszaru roboczego, tworząc workspace
obiekt.
Utwórz obiekt obszaru roboczego na podstawie pliku utworzonego config.json
w sekcji wymagań wstępnych.
ws = Workspace.from_config()
Tworzenie zestawu danych plików
Obiekt FileDataset
odwołuje się do jednego lub wielu plików w magazynie danych obszaru roboczego lub publicznych adresach URL. Pliki mogą mieć dowolny format, a klasa zapewnia możliwość pobierania lub instalowania plików w obliczeniach. Tworząc obiekt FileDataset
, utworzysz odwołanie do lokalizacji źródła danych. Jeśli zastosowano jakiekolwiek przekształcenia do zestawu danych, będą one również przechowywane w zestawie danych. Dane pozostają w istniejącej lokalizacji, więc nie są naliczane żadne dodatkowe koszty magazynowania. Aby uzyskać więcej informacji o Dataset
pakiecie, zobacz artykuł How to create register datasets (Jak utworzyć rejestrowanie zestawów danych).
from azureml.core.dataset import Dataset
web_paths = [
'http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz',
'http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz',
'http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz',
'http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz'
]
dataset = Dataset.File.from_files(path = web_paths)
register()
Użyj metody , aby zarejestrować zestaw danych w obszarze roboczym, aby można je było udostępniać innym osobom, ponownie używać w różnych eksperymentach i odwoływać się do nich według nazwy w skrypsie trenowania.
dataset = dataset.register(workspace=ws,
name='mnist-dataset',
description='training and test dataset',
create_new_version=True)
# list the files referenced by dataset
dataset.to_path()
Tworzenie docelowego obiektu obliczeniowego
Utwórz docelowy obiekt obliczeniowy dla zadania TensorFlow do uruchomienia. W tym przykładzie utwórz klaster obliczeniowy usługi Azure Machine Learning z obsługą procesora GPU.
Ważne
Przed utworzeniem klastra procesora GPU należy zażądać zwiększenia limitu przydziału dla obszaru roboczego.
cluster_name = "gpu-cluster"
try:
compute_target = ComputeTarget(workspace=ws, name=cluster_name)
print('Found existing compute target')
except ComputeTargetException:
print('Creating a new compute target...')
compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6',
max_nodes=4)
compute_target = ComputeTarget.create(ws, cluster_name, compute_config)
compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)
Aby uzyskać więcej informacji na temat docelowych obiektów obliczeniowych, zobacz artykuł co to jest docelowy obiekt obliczeniowy.
Definiowanie środowiska
Aby zdefiniować środowisko usługi Azure Machine Learning, które hermetyzuje zależności skryptu szkoleniowego, możesz zdefiniować środowisko niestandardowe lub użyć środowiska wyselekcjonowanego usługi Azure Machine Learning.
Korzystanie ze środowiska wyselekcjonowanych
Usługa Azure Machine Learning udostępnia wstępnie utworzone, wyselekcjonowane środowiska, jeśli nie chcesz definiować własnego środowiska. Usługa Azure Machine Learning ma kilka środowisk nadzorowanych procesora CPU i procesora GPU dla biblioteki TensorFlow odpowiadających różnym wersjom biblioteki TensorFlow. Możesz użyć najnowszej wersji tego środowiska przy użyciu @latest
dyrektywy . Aby uzyskać więcej informacji, zobacz Azure Machine Learning Curated Environments (Środowiska nadzorowane w usłudze Azure Machine Learning).
Jeśli chcesz użyć środowiska wyselekcjonowane, kod będzie podobny do następującego przykładu:
curated_env_name = 'AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-gpu'
tf_env = Environment.get(workspace=ws, name=curated_env_name)
Aby wyświetlić pakiety zawarte w wyselekcjonowanych środowiskach, można zapisać zależności conda na dysku:
tf_env.save_to_directory(path=curated_env_name)
Upewnij się, że środowisko wyselekcjonowane zawiera wszystkie zależności wymagane przez skrypt trenowania. Jeśli nie, musisz zmodyfikować środowisko, aby uwzględnić brakujące zależności. Jeśli środowisko zostanie zmodyfikowane, musisz nadać mu nową nazwę, ponieważ prefiks "AzureML" jest zarezerwowany dla wyselekcjonowanych środowisk. Jeśli zmodyfikowano plik YAML zależności conda, możesz utworzyć nowe środowisko pod nową nazwą, na przykład:
tf_env = Environment.from_conda_specification(name='AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-gpu', file_path='./conda_dependencies.yml')
Jeśli zamiast tego zmodyfikowano bezpośrednio obiekt środowiska wyselekcjonowanego, możesz sklonować to środowisko o nowej nazwie:
tf_env = tf_env.clone(new_name='my-AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-gpu')
Tworzenie środowiska niestandardowego
Możesz również utworzyć własne środowisko usługi Azure Machine Learning, które hermetyzuje zależności skryptu szkoleniowego.
Najpierw zdefiniuj zależności conda w pliku YAML; w tym przykładzie plik ma nazwę conda_dependencies.yml
.
channels:
- conda-forge
dependencies:
- python=3.7
- pip:
- azureml-defaults
- tensorflow-gpu==2.2.0
Utwórz środowisko usługi Azure Machine Learning na podstawie tej specyfikacji środowiska conda. Środowisko zostanie spakowane w kontenerze platformy Docker w czasie wykonywania.
Domyślnie jeśli nie określono obrazu podstawowego, usługa Azure Machine Learning będzie używać obrazu procesora CPU jako obrazu azureml.core.environment.DEFAULT_CPU_IMAGE
podstawowego. Ponieważ ten przykład uruchamia szkolenie w klastrze gpu, należy określić podstawowy obraz procesora GPU, który ma niezbędne sterowniki i zależności procesora GPU. Usługa Azure Machine Learning obsługuje zestaw obrazów podstawowych publikowanych w usłudze Microsoft Container Registry (MCR), których można użyć, zobacz repozytorium GitHub Azure/AzureML-Containers, aby uzyskać więcej informacji.
tf_env = Environment.from_conda_specification(name='AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-gpu', file_path='./conda_dependencies.yml')
# Specify a GPU base image
tf_env.docker.enabled = True
tf_env.docker.base_image = 'mcr.microsoft.com/azureml/openmpi3.1.2-cuda10.1-cudnn7-ubuntu18.04'
Napiwek
Opcjonalnie możesz po prostu przechwycić wszystkie zależności bezpośrednio w niestandardowym obrazie platformy Docker lub pliku Dockerfile i utworzyć środowisko na podstawie tego. Aby uzyskać więcej informacji, zobacz Trenowanie za pomocą obrazu niestandardowego.
Aby uzyskać więcej informacji na temat tworzenia i używania środowisk, zobacz Tworzenie i używanie środowisk oprogramowania w usłudze Azure Machine Learning.
Konfigurowanie i przesyłanie przebiegu trenowania
Tworzenie polecenia ScriptRunConfig
Utwórz obiekt ScriptRunConfig, aby określić szczegóły konfiguracji zadania trenowania, w tym skrypt trenowania, środowisko do użycia i docelowy obiekt obliczeniowy do uruchomienia. Wszystkie argumenty skryptu trenowania zostaną przekazane za pośrednictwem wiersza polecenia, jeśli określono go w parametrze arguments
.
from azureml.core import ScriptRunConfig
args = ['--data-folder', dataset.as_mount(),
'--batch-size', 64,
'--first-layer-neurons', 256,
'--second-layer-neurons', 128,
'--learning-rate', 0.01]
src = ScriptRunConfig(source_directory=script_folder,
script='tf_mnist.py',
arguments=args,
compute_target=compute_target,
environment=tf_env)
Ostrzeżenie
Usługa Azure Machine Learning uruchamia skrypty szkoleniowe, kopiując cały katalog źródłowy. Jeśli masz poufne dane, które nie chcesz przekazywać, użyj pliku .ignore lub nie dołącz go do katalogu źródłowego . Zamiast tego uzyskaj dostęp do danych przy użyciu zestawu danych usługi Azure Machine Learning.
Aby uzyskać więcej informacji na temat konfigurowania zadań za pomocą polecenia ScriptRunConfig, zobacz Konfigurowanie i przesyłanie przebiegów trenowania.
Ostrzeżenie
Jeśli wcześniej używano narzędzia do szacowania TensorFlow do konfigurowania zadań trenowania biblioteki TensorFlow, pamiętaj, że narzędzia do szacowania zostały przestarzałe od wersji zestawu SDK 1.19.0. W przypadku zestawu Azure Machine Learning SDK >= 1.15.0 narzędzie ScriptRunConfig jest zalecanym sposobem konfigurowania zadań szkoleniowych, w tym tych korzystających z platform uczenia głębokiego. Aby uzyskać odpowiedzi na typowe pytania dotyczące migracji, zobacz Przewodnik migracji narzędzia do szacowania do skryptuRunConfig.
Przesyłanie przebiegu
Obiekt Run udostępnia interfejs historii uruchamiania, gdy zadanie jest uruchomione i po jego zakończeniu.
run = Experiment(workspace=ws, name='Tutorial-TF-Mnist').submit(src)
run.wait_for_completion(show_output=True)
Co się dzieje podczas wykonywania przebiegu
Po wykonaniu przebiegu przechodzi on przez następujące etapy:
Przygotowywanie: obraz platformy Docker jest tworzony zgodnie ze zdefiniowanym środowiskiem. Obraz jest przekazywany do rejestru kontenerów obszaru roboczego i buforowany w celu późniejszego uruchomienia. Dzienniki są również przesyłane strumieniowo do historii uruchamiania i można je wyświetlić w celu monitorowania postępu. Jeśli zamiast tego określono wyselekcjonowane środowisko, zostanie użyty buforowany obraz obsługujący środowisko wyselekcjonowane.
Skalowanie: klaster próbuje skalować w górę, jeśli klaster usługi Batch AI wymaga więcej węzłów do wykonania przebiegu niż jest obecnie dostępne.
Uruchomione: wszystkie skrypty w folderze script są przekazywane do docelowego obiektu obliczeniowego, magazyny danych są instalowane lub kopiowane i
script
wykonywane. Dane wyjściowe ze strumienia stdout i folderu ./logs są przesyłane strumieniowo do historii uruchamiania i mogą służyć do monitorowania przebiegu.Przetwarzanie końcowe: folder ./outputs przebiegu jest kopiowany do historii uruchamiania.
Rejestrowanie lub pobieranie modelu
Po wytrenowanym modelu możesz zarejestrować go w obszarze roboczym. Rejestracja modelu umożliwia przechowywanie i przechowywanie wersji modeli w obszarze roboczym w celu uproszczenia zarządzania modelami i wdrażania.
Opcjonalnie: określając parametry model_framework
, model_framework_version
i resource_configuration
, wdrożenie modelu bez kodu staje się dostępne. Dzięki temu można bezpośrednio wdrożyć model jako usługę internetową z zarejestrowanego modelu, a ResourceConfiguration
obiekt definiuje zasób obliczeniowy dla usługi internetowej.
from azureml.core import Model
from azureml.core.resource_configuration import ResourceConfiguration
model = run.register_model(model_name='tf-mnist',
model_path='outputs/model',
model_framework=Model.Framework.TENSORFLOW,
model_framework_version='2.0',
resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5))
Możesz również pobrać lokalną kopię modelu przy użyciu obiektu Run. W skrypcie tf_mnist.py
trenowania obiekt zapisywania TensorFlow utrwala model w folderze lokalnym (lokalnie dla docelowego obiektu obliczeniowego). Aby pobrać kopię, możesz użyć obiektu Uruchom.
# Create a model folder in the current directory
os.makedirs('./model', exist_ok=True)
run.download_files(prefix='outputs/model', output_directory='./model', append_prefix=False)
Szkolenie rozproszone
Usługa Azure Machine Learning obsługuje również wielowęźle rozproszone zadania TensorFlow, dzięki czemu można skalować obciążenia szkoleniowe. Możesz łatwo uruchamiać rozproszone zadania TensorFlow, a usługa Azure Machine Learning będzie zarządzać aranżacją.
Usługa Azure Machine Learning obsługuje uruchamianie rozproszonych zadań TensorFlow z wbudowanym interfejsem API trenowania rozproszonego biblioteki Horovod i TensorFlow.
Aby uzyskać więcej informacji na temat trenowania rozproszonego, zobacz Przewodnik trenowania rozproszonego procesora GPU.
Wdrażanie modelu TensorFlow
Instrukcje dotyczące wdrażania zawierają sekcję dotyczącą rejestrowania modeli, ale możesz przejść bezpośrednio do utworzenia docelowego obiektu obliczeniowego na potrzeby wdrożenia, ponieważ masz już zarejestrowany model.
(Wersja zapoznawcza) Wdrażanie modelu bez kodu
Ważne
Ta funkcja jest obecnie w publicznej wersji zapoznawczej. Ta wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług i nie zalecamy korzystania z niej w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą być nieobsługiwane lub ograniczone.
Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.
Zamiast tradycyjnej trasy wdrażania można również użyć funkcji wdrażania bez kodu (wersja zapoznawcza) dla biblioteki TensorFlow. Rejestrując model, jak pokazano powyżej przy model_framework
użyciu parametrów , model_framework_version
i resource_configuration
, możesz użyć funkcji statycznej deploy()
do wdrożenia modelu.
service = Model.deploy(ws, "tensorflow-web-service", [model])
Pełne instrukcje dotyczące wdrażania w usłudze Azure Machine Learning są bardziej szczegółowe.
Następne kroki
W tym artykule wytrenujesz i zarejestrowano model TensorFlow oraz przedstawiono opcje wdrożenia. Zapoznaj się z innymi artykułami, aby dowiedzieć się więcej o usłudze Azure Machine Learning.