Trenowanie modeli TensorFlow na dużą skalę przy użyciu zestawu AZURE Machine Edukacja SDK (wersja 1)

DOTYCZY: Zestaw SDK języka Python azureml w wersji 1

Z tego artykułu dowiesz się, jak uruchamiać skrypty szkoleniowe TensorFlow na dużą skalę przy użyciu usługi Azure Machine Edukacja.

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 Edukacja do skalowania zadań trenowania typu open source w celu kompilowania, wdrażania, wersji 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 Edukacja — brak pobierania ani instalacji

    • Ukończ przewodnik Szybki start: wprowadzenie do usługi Azure Machine Edukacja, 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

    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 Edukacja 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.jsonw 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 platformy Azure z obsługą procesora GPU Edukacja.

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 Edukacja Environment, które hermetyzuje zależności skryptu szkoleniowego, możesz zdefiniować środowisko niestandardowe lub użyć środowiska usługi Azure Machine Edukacja wyselekcjonowanego środowiska.

Korzystanie ze środowiska wyselekcjonowanych

Usługa Azure Machine Edukacja udostępnia wstępnie utworzone, wyselekcjonowane środowiska, jeśli nie chcesz definiować własnego środowiska. Usługa Azure Machine Edukacja 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 Edukacja wyselekcjonowane środowiska.

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 Edukacja, 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 Edukacja 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 Edukacja 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 Edukacja 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 Edukacja.

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 Edukacja 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 Edukacja.

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 Edukacja SDK >= 1.15.0 zalecana jest metoda ScriptRunConfig do konfigurowania zadań szkoleniowych, w tym zadań 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_versioni 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.pytrenowania 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 Edukacja obsługuje również wielowęźle rozproszone zadania TensorFlow, dzięki czemu można skalować obciążenia szkoleniowe. Rozproszone zadania TensorFlow można łatwo uruchamiać, a usługa Azure Machine Edukacja będzie zarządzać aranżacją.

Usługa Azure Machine Edukacja 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_frameworkużyciu parametrów , model_framework_versioni 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 Edukacja bardziej szczegółowo.

Następne kroki

W tym artykule wytrenujesz i zarejestrowano model TensorFlow oraz przedstawiono opcje wdrożenia. Zobacz inne artykuły, aby dowiedzieć się więcej o usłudze Azure Machine Edukacja.