Träna en modell med hjälp av en anpassad Docker-avbildning

I den här artikeln får du lära dig hur du använder en anpassad Docker-avbildning när du tränar modeller med Azure Machine Learning. Du använder exempelskripten i den här artikeln för att klassificera husdjursbilder genom att skapa ett convolutional neuralt nätverk.

Azure Machine Learning tillhandahåller en standardbasavbildning för Docker. Du kan också använda Azure Machine Learning miljöer för att ange en annan basavbildning, till exempel en av de underhålls Azure Machine Learning basavbildningar eller din egen anpassade avbildning. Med anpassade basavbildningar kan du noggrant hantera dina beroenden och ha bättre kontroll över komponentversionerna när du kör träningsjobb.

Förutsättningar

Kör koden i någon av dessa miljöer:

Konfigurera ett träningsexperiment

I det här avsnittet konfigurerar du träningsexperimentet genom att initiera en arbetsyta, definiera din miljö och konfigurera ett beräkningsmål.

Initiera en arbetsyta

Den Azure Machine Learning arbetsytan är den översta resursen för tjänsten. Det ger dig en central plats där du kan arbeta med alla artefakter som du skapar. I Python SDK kan du komma åt arbetsytans artefakter genom att skapa ett Workspace objekt.

Skapa ett Workspace objekt från filen config.json som du skapade som en förutsättning.

from azureml.core import Workspace

ws = Workspace.from_config()

Definiera din miljö

Skapa ett Environment objekt.

from azureml.core import Environment

fastai_env = Environment("fastai2")

Den angivna basavbildningen i följande kod stöder fast.ai-biblioteket, vilket möjliggör distribuerade djupinlärningsfunktioner. Mer information finns i fast.ai Docker Hub-lagringsplatsen.

När du använder din anpassade Docker-avbildning kanske du redan har konfigurerat Python-miljön korrekt. I så fall anger du user_managed_dependencies flaggan till True för att använda den anpassade avbildningens inbyggda Python-miljö. Som standard skapar Azure Machine Learning en Conda-miljö med beroenden som du har angett. Tjänsten kör skriptet i den miljön i stället för att använda python-bibliotek som du har installerat på basavbildningen.

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

Använda ett privat containerregister (valfritt)

Om du vill använda en avbildning från ett privat containerregister som inte finns på din arbetsyta använder docker.base_image_registry du för att ange adressen till lagringsplatsen och ett användarnamn och lösenord:

# 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"

Använda en anpassad Dockerfile (valfritt)

Det går också att använda en anpassad Dockerfile. Använd den här metoden om du behöver installera icke-Python-paket som beroenden. Kom ihåg att ange basavbildningen till 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"

Viktigt

Azure Machine Learning stöder endast Docker-avbildningar som tillhandahåller följande programvara:

  • Ubuntu 18.04 eller senare.
  • Conda 4.7.# eller senare.
  • Python 3.6+.
  • Ett POSIX-kompatibelt gränssnitt som är tillgängligt på /bin/sh krävs i alla containeravbildningar som används för träning.

Mer information om hur du skapar och hanterar Azure Machine Learning miljöer finns i Skapa och använda programvarumiljöer.

Skapa eller koppla ett beräkningsmål

Du måste skapa ett beräkningsmål för att träna din modell. I den här självstudien skapar AmlCompute du som träningsberäkningsresurs.

AmlCompute Det tar några minuter att skapa. Om resursen AmlCompute redan finns på din arbetsyta hoppar den här koden över skapandeprocessen.

Precis som med andra Azure-tjänster finns det gränser för vissa resurser (till exempel AmlCompute) som är associerade med Azure Machine Learning-tjänsten. Mer information finns i Standardgränser och hur du begär en högre kvot.

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())

Viktigt

Använd CPU-SKU:er för alla avbildningar som bygger på beräkning.

Konfigurera ditt träningsjobb

I den här självstudien använder du träningsskriptet train.pyGitHub. I praktiken kan du använda valfritt anpassat träningsskript och köra det, som det är, med Azure Machine Learning.

Skapa en ScriptRunConfig resurs för att konfigurera jobbet för körning på önskat beräkningsmål.

from azureml.core import ScriptRunConfig

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

Skicka ditt träningsjobb

När du skickar en träningskörning med hjälp av ett ScriptRunConfig objekt submit returnerar metoden ett objekt av typen ScriptRun. Det returnerade ScriptRun objektet ger dig programmatisk åtkomst till information om träningskörningen.

from azureml.core import Experiment

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

Varning

Azure Machine Learning kör träningsskript genom att kopiera hela källkatalogen. Om du har känsliga data som du inte vill ladda upp använder du en .ignore-fil eller tar inte med den i källkatalogen. I stället kan du komma åt dina data med hjälp av ett datalager.

Nästa steg

I den här artikeln har du tränat en modell med hjälp av en anpassad Docker-avbildning. Se de här andra artiklarna om du vill veta mer om Azure Machine Learning: