Trenowanie modelu przy użyciu niestandardowego obrazu platformy Docker

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

W tym artykule dowiesz się, jak używać niestandardowego obrazu platformy Docker podczas trenowania modeli za pomocą usługi Azure Machine Edukacja. Użyjesz przykładowych skryptów w tym artykule, aby sklasyfikować obrazy zwierząt domowych przez utworzenie splotowej sieci neuronowej.

Usługa Azure Machine Edukacja udostępnia domyślny obraz podstawowy platformy Docker. Możesz również użyć środowisk usługi Azure Machine Edukacja do określenia innego obrazu podstawowego, takiego jak jeden z obsługiwanych obrazów podstawowych usługi Azure Machine Edukacja lub własnego obrazu niestandardowego. Niestandardowe obrazy podstawowe umożliwiają ścisłe zarządzanie zależnościami i utrzymywanie ściślejszej kontroli nad wersjami składników podczas uruchamiania zadań szkoleniowych.

Wymagania wstępne

Uruchom kod w jednym z tych środowisk:

Konfigurowanie eksperymentu szkoleniowego

W tej sekcji skonfigurujesz eksperyment szkoleniowy, inicjując obszar roboczy, definiując środowisko i konfigurując docelowy obiekt obliczeniowy.

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.

Workspace Utwórz obiekt na podstawie pliku config.json utworzonego jako wymaganie wstępne.

from azureml.core import Workspace

ws = Workspace.from_config()

Definiowanie środowiska

Utwórz Environment obiekt.

from azureml.core import Environment

fastai_env = Environment("fastai2")

Określony obraz podstawowy w poniższym kodzie obsługuje bibliotekę fast.ai, która umożliwia korzystanie z rozproszonych funkcji uczenia głębokiego. Aby uzyskać więcej informacji, zobacz repozytorium fast.ai Docker Hub.

Jeśli używasz niestandardowego obrazu platformy Docker, być może środowisko języka Python jest już prawidłowo skonfigurowane. W takim przypadku ustaw flagę user_managed_dependencies tak, aby True korzystała z wbudowanego środowiska języka Python obrazu niestandardowego. Domyślnie usługa Azure Machine Edukacja kompiluje środowisko Conda z określonymi zależnościami. Usługa uruchamia skrypt w tym środowisku zamiast używać dowolnych bibliotek języka Python zainstalowanych na obrazie podstawowym.

fastai_env.docker.base_image = "fastdotai/fastai2:latest"
fastai_env.python.user_managed_dependencies = True

Używanie prywatnego rejestru kontenerów (opcjonalnie)

Aby użyć obrazu z prywatnego rejestru kontenerów, który nie znajduje się w obszarze roboczym, użyj polecenia docker.base_image_registry , aby określić adres repozytorium oraz nazwę użytkownika i hasło:

# Set the container registry information.
fastai_env.docker.base_image_registry.address = "myregistry.azurecr.io"
fastai_env.docker.base_image_registry.username = "username"
fastai_env.docker.base_image_registry.password = "password"

Używanie niestandardowego pliku Dockerfile (opcjonalnie)

Można również użyć niestandardowego pliku Dockerfile. Użyj tego podejścia, jeśli musisz zainstalować pakiety inne niż Python jako zależności. Pamiętaj, aby ustawić obraz podstawowy na None.

# Specify Docker steps as a string. 
dockerfile = r"""
FROM mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210615.v1
RUN echo "Hello from custom container!"
"""

# Set the base image to None, because the image is defined by Dockerfile.
fastai_env.docker.base_image = None
fastai_env.docker.base_dockerfile = dockerfile

# Alternatively, load the string from a file.
fastai_env.docker.base_image = None
fastai_env.docker.base_dockerfile = "./Dockerfile"

Ważne

Usługa Azure Machine Edukacja obsługuje tylko obrazy platformy Docker, które udostępniają następujące oprogramowanie:

  • Ubuntu 18.04 lub nowszy.
  • Conda 4.7.# lub nowsza.
  • Python 3.7+.
  • Powłoka zgodna ze standardem POSIX dostępna w lokalizacji /bin/sh jest wymagana w dowolnym obrazie kontenera używanym do trenowania.

Aby uzyskać więcej informacji na temat tworzenia środowisk usługi Azure Machine Edukacja i zarządzania nimi, zobacz Tworzenie i używanie środowisk oprogramowania.

Tworzenie lub dołączanie docelowego obiektu obliczeniowego

Musisz utworzyć docelowy obiekt obliczeniowy na potrzeby trenowania modelu. W tym samouczku utworzysz AmlCompute jako zasób obliczeniowy trenowania.

Tworzenie trwa AmlCompute kilka minut. AmlCompute Jeśli zasób znajduje się już w obszarze roboczym, ten kod pomija proces tworzenia.

Podobnie jak w przypadku innych usług platformy Azure istnieją limity dotyczące niektórych zasobów (na przykład AmlCompute) skojarzonych z usługą Azure Machine Edukacja. Aby uzyskać więcej informacji, zobacz Limity domyślne i sposób żądania wyższego limitu przydziału.

from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException

# Choose a name for your cluster.
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)

    # Create the cluster.
    compute_target = ComputeTarget.create(ws, cluster_name, compute_config)

    compute_target.wait_for_completion(show_output=True)

# Use get_status() to get a detailed status for the current AmlCompute.
print(compute_target.get_status().serialize())

Ważne

Użyj jednostek SKU procesora CPU dla dowolnego obrazu opartego na obliczeniach.

Konfigurowanie zadania szkoleniowego

Na potrzeby tego samouczka użyj skryptu szkoleniowego train.py w witrynie GitHub. W praktyce możesz podjąć dowolny niestandardowy skrypt trenowania i uruchomić go, podobnie jak w przypadku usługi Azure Machine Edukacja.

ScriptRunConfig Utwórz zasób, aby skonfigurować zadanie do uruchamiania na żądanym obiekcie docelowym obliczeniowym.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory='fastai-example',
                      script='train.py',
                      compute_target=compute_target,
                      environment=fastai_env)

Przesyłanie zadania szkoleniowego

Po przesłaniu przebiegu trenowania przy użyciu ScriptRunConfig obiektu submit metoda zwraca obiekt typu ScriptRun. Zwrócony ScriptRun obiekt zapewnia programowy dostęp do informacji o przebiegu trenowania.

from azureml.core import Experiment

run = Experiment(ws,'Tutorial-fastai').submit(src)
run.wait_for_completion(show_output=True)

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 magazynu danych.

Następne kroki

W tym artykule wytrenujesz model przy użyciu niestandardowego obrazu platformy Docker. Zapoznaj się z innymi artykułami, aby dowiedzieć się więcej o usłudze Azure Machine Edukacja: