Treinar um modelo usando uma imagem personalizada do Docker

APLICA-SE A: SDK do Python azureml v1

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

O Azure Machine Learning fornece uma imagem base padrão do Docker. Você também pode usar ambientes de Azure Machine Learning para especificar uma imagem de base diferente, como uma das imagens de 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 de componentes ao executar trabalhos de treinamento.

Pré-requisitos

Execute o código em qualquer um destes ambientes:

Configurar um teste de treinamento

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

Inicializar um workspace

O workspace 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ê criar. No SDK do Python você pode acessar os artefatos do workspace criando um objeto Workspace.

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

from azureml.core import Workspace

ws = Workspace.from_config()

Definir seu ambiente

Crie um objeto Environment.

from azureml.core import Environment

fastai_env = Environment("fastai2")

A imagem base especificada no código a seguir dá suporte à biblioteca fast.ai, que permite a transmissão de recursos de aprendizado profundo. Para saber mais, veja o repositório do Docker Hub fast.ai.

Quando você estiver usando sua imagem personalizada do Docker, você já pode ter configurado corretamente seu ambiente do Python. Nesse caso, defina o user_managed_dependencies sinalizador para True para usar o ambiente interno do Python da sua imagem personalizada. Por padrão, o Azure Machine Learning cria um ambiente Conda com as dependências que você especificou. O serviço executa o script nesse ambiente em vez de usar as bibliotecas do Python que você instalou na imagem de 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 está 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 que não sejam 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 somente é compatível com imagens do Docker que fornecem o seguinte software:

  • Ubuntu 18.04 ou versão superior.
  • Conda 4.7.# ou versão superior.
  • Python 3.7 e superior.
  • 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, veja 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.

A criação de AmlCompute leva alguns minutos. Se o recurso AmlCompute já estiver no seu workspace, este código ignorará o processo de criação.

Como acontece com outros serviços do Azure, há limites em determinados recursos (por exemplo, AmlCompute) associados ao Serviço do Azure Machine Learning. Para saber mais, veja 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 compilação de imagem 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 recurso ScriptRunConfig para configurar seu trabalho para ser executado no destino de computaçãodesejado.

from azureml.core import ScriptRunConfig

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

Enviar o trabalho de treinamento

Quando você envia uma execução de treinamento usando um objeto ScriptRunConfig, o método submit retorna um objeto do tipo ScriptRun. O objeto ScriptRun devolvido fornece acesso programático a informações sobre a execução do 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 por meio de um datastore.

Próximas etapas

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