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):
- Conclua o tutorial Criar recursos para introdução para criar um servidor de notebook dedicado pré-carregado com o SDK e o repositório de exemplo.
- 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:
- Acompanhe as métricas de execução durante o treinamento.
- Implante um modelo usando uma imagem personalizada do Docker.