Treinar um modelo usando uma imagem personalizada do Docker

APLICA-SE A: Python SDK azureml v1

Neste artigo, saiba como usar uma imagem personalizada do Docker quando estiver treinando modelos com o Azure Machine Learning. Você usará os scripts de exemplo neste artigo para classificar imagens de animais de estimação criando uma rede neural convolucional.

O Azure Machine Learning fornece uma imagem base padrão do Docker. Você também pode usar ambientes do Azure Machine Learning para especificar uma imagem base diferente, como uma das imagens base do Azure Machine Learning mantidas ou sua própria imagem personalizada. As imagens de base personalizadas permitem que você gerencie de perto suas dependências e mantenha um controle mais rígido sobre as versões dos componentes ao executar trabalhos de treinamento.

Pré-requisitos

Execute o código em qualquer um destes ambientes:

  • Instância de computação do Azure Machine Learning (sem necessidade de downloads ou instalação):
  • Seu próprio servidor Jupyter Notebook:
    • Crie um arquivo de configuração do espaço de trabalho.
    • Instale o SDK do Azure Machine Learning.
    • Crie um registro de contêiner do Azure ou outro registro do Docker disponível na Internet.

Configurar uma experiência de formação

Nesta seção, você configura seu experimento de treinamento inicializando um espaço de trabalho, definindo seu ambiente e configurando um destino de computação.

Inicializar um espaço de trabalho

O espaço de trabalho do Azure Machine Learning é o recurso de nível superior para o serviço. Ele oferece um local centralizado para trabalhar com todos os artefatos que você cria. No SDK do Python, você pode acessar os artefatos do espaço de trabalho criando um Workspace objeto.

Crie um Workspace objeto a partir do arquivo config.json que você criou como pré-requisito.

from azureml.core import Workspace

ws = Workspace.from_config()

Defina seu ambiente

Crie um Environment objeto.

from azureml.core import Environment

fastai_env = Environment("fastai2")

A imagem base especificada no código a seguir suporta a biblioteca fast.ai, que permite recursos distribuídos de aprendizado profundo. Para obter mais informações, consulte o repositório fast.ai Docker Hub.

Quando você estiver usando sua imagem personalizada do Docker, talvez já tenha seu ambiente Python configurado corretamente. Nesse caso, defina o sinalizador para True usar o user_managed_dependencies ambiente Python interno da imagem personalizada. Por padrão, o Azure Machine Learning cria um ambiente Conda com dependências que você especificou. O serviço executa o script nesse ambiente em vez de usar quaisquer bibliotecas Python instaladas na imagem base.

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

Usar um registro de contêiner privado (opcional)

Para usar uma imagem de um registro de contêiner privado que não esteja em seu espaço de trabalho, use docker.base_image_registry para especificar o endereço do repositório e um nome de usuário e senha:

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

Usar um Dockerfile personalizado (opcional)

Também é possível usar um Dockerfile personalizado. Use essa abordagem se precisar instalar pacotes não-Python como dependências. Lembre-se de definir a imagem base como 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"

Importante

O Azure Machine Learning suporta apenas imagens do Docker que fornecem o seguinte software:

  • Ubuntu 18.04 ou superior.
  • Conda 4.7.# ou superior.
  • Python 3.7+.
  • Um shell compatível com POSIX disponível em /bin/sh é necessário em qualquer imagem de contêiner usada para treinamento.

Para obter mais informações sobre como criar e gerenciar ambientes do Azure Machine Learning, consulte Criar e usar ambientes de software.

Criar ou anexar um destino de computação

Você precisa criar um destino de computação para treinar seu modelo. Neste tutorial, você cria AmlCompute como seu recurso de computação de treinamento.

Criação de AmlCompute leva alguns minutos. Se o AmlCompute recurso já estiver em seu espaço de trabalho, esse código ignorará o processo de criação.

Tal como acontece com outros serviços do Azure, existem limites para determinados recursos (por exemplo, AmlCompute) associados ao serviço Azure Machine Learning. Para obter mais informações, consulte Limites padrão e como solicitar uma cota mais alta.

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

Importante

Use SKUs de CPU para qualquer imagem construída em computação.

Configure seu trabalho de treinamento

Para este tutorial, use o script de treinamento train.py no GitHub. Na prática, você pode usar qualquer script de treinamento personalizado e executá-lo, como está, com o Azure Machine Learning.

Crie um ScriptRunConfig recurso para configurar seu trabalho para execução no destino de computação desejado.

from azureml.core import ScriptRunConfig

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

Envie o seu trabalho de formação

Quando você envia uma execução de treinamento usando um ScriptRunConfig objeto, o submit método retorna um objeto do tipo ScriptRun. O objeto retornado ScriptRun fornece acesso programático a informações sobre a execução de treinamento.

from azureml.core import Experiment

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

Aviso

O Azure Machine Learning executa scripts de treinamento copiando todo o diretório de origem. Se você tiver dados confidenciais que não deseja carregar, use um arquivo .ignore ou não o inclua no diretório de origem. Em vez disso, acesse seus dados usando um armazenamento de dados.

Próximos passos

Neste artigo, você treinou um modelo usando uma imagem personalizada do Docker. Consulte estes outros artigos para saber mais sobre o Azure Machine Learning: