Träna en modell med hjälp av en anpassad Docker-avbildning
GÄLLER FÖR: Python SDK azureml v1
I den här artikeln lär du dig hur du använder en anpassad Docker-avbildning när du tränar modeller med Azure Mašinsko učenje. Du använder exempelskripten i den här artikeln för att klassificera husdjursbilder genom att skapa ett convolutional neuralt nätverk.
Azure Mašinsko učenje tillhandahåller en standardbasavbildning för Docker. Du kan också använda Azure Mašinsko učenje-miljöer för att ange en annan basavbildning, till exempel en av de underhållna Azure-Mašinsko učenje basavbildningarna eller din egen anpassade avbildning. Med anpassade basavbildningar kan du noggrant hantera dina beroenden och upprätthålla en striktare kontroll över komponentversioner när du kör träningsjobb.
Förutsättningar
Kör koden i någon av dessa miljöer:
- Azure Mašinsko učenje beräkningsinstans (inga nedladdningar eller installation krävs):
- Slutför självstudien Skapa resurser för att komma igång för att skapa en dedikerad notebook-server som är förinstallerad med SDK och exempellagringsplatsen.
- Din egen Jupyter Notebook-server:
- Skapa en konfigurationsfil för arbetsytan.
- Installera Azure Mašinsko učenje SDK.
- Skapa ett Azure-containerregister eller ett annat Docker-register som är tillgängligt på Internet.
Konfigurera ett träningsexperiment
I det här avsnittet konfigurerar du ditt träningsexperiment genom att initiera en arbetsyta, definiera din miljö och konfigurera ett beräkningsmål.
Initiera en arbetsyta
Azure Mašinsko učenje-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 den config.json fil 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-lagringsplats.
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 Mašinsko učenje 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)
Du kan också 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 Mašinsko učenje stöder endast Docker-avbildningar som tillhandahåller följande programvara:
- Ubuntu 18.04 eller senare.
- Conda 4.7.# eller senare.
- Python 3.7+.
- 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 Mašinsko učenje-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 Mašinsko učenje-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.py på GitHub. I praktiken kan du använda valfritt anpassat träningsskript och köra det, precis som med Azure Mašinsko učenje.
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 in 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 Mašinsko učenje 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 Mašinsko učenje:
- Spåra körningsmått under träning.
- Distribuera en modell med hjälp av en anpassad Docker-avbildning.