Configurar e enviar trabalhos de treinamento

APLICA-SE A:SDK do Python do Azure MLv1

Este artigo mostra como configurar e enviar trabalhos do Azure Machine Learning para treinar modelos. Os trechos de código explicam as principais partes da configuração e o envio de um script de treinamento. Em seguida, use um dos notebooks de exemplo para encontrar os exemplos de trabalho completos, de ponta a ponta.

Ao treinar, é comum iniciar no computador local e, posteriormente, escalar horizontalmente para um cluster baseado em nuvem. Com o Azure Machine Learning, é possível executar um script em vários destinos de computação sem precisar alterar o script de treinamento.

Tudo que precisa ser feito é definir o ambiente para cada destino de computação com uma configuração de trabalho de script. Em seguida, quando você quiser executar o teste de treinamento em um destino de computação diferente, especifique a configuração de trabalho para esse tipo de computação.

Pré-requisitos

O que é uma configuração de execução de script?

Um ScriptRunConfig é usado para configurar as informações necessárias para enviar um trabalho de treinamento como parte de um experimento.

Envie seu teste de treinamento com um objeto ScriptRunConfig. Esse objeto inclui:

  • source_directory: o diretório de origem que contém o script de treinamento
  • script: o script de treinamento a ser executado
  • compute_target: o destino de computação para execução
  • ambiente: o ambiente a ser usado ao executar o script
  • e algumas opções adicionais, que podem ser configuradas (consulte a documentação de referência para obter mais informações)

Treinar seu modelo

O padrão de código para enviar um trabalho de treinamento é o mesmo para todos os tipos de destinos de computação:

  1. Criar um experimento para executar
  2. Criar um ambiente em que o script é executado
  3. Criar um ScriptRunConfig, que especifica o ambiente e o destino de computação
  4. Enviar o trabalho
  5. Aguarde a conclusão do trabalho

Ou você pode:

Criar uma experiência

Crie um experimento no workspace. Um experimento é um contêiner leve que ajuda a organizar envios de trabalho e manter o controle do código.

APLICA-SE A:SDK do Python do Azure MLv1

from azureml.core import Experiment

experiment_name = 'my_experiment'
experiment = Experiment(workspace=ws, name=experiment_name)

Selecionar um destino de computação

Selecione o destino de computação no qual o script de treinamento será executado. Se nenhum destino de computação for especificado no ScriptRunConfig, ou se compute_target='local', o Azure Machine Learning executará o script localmente.

O código de exemplo neste artigo pressupõe que já foi criado um destino de computação my_compute_target na seção "pré-requisitos".

Observação

  • Não há suporte para Azure Databricks como um destino de computação para treinamento de modelo. É possível usar o Azure Databricks para tarefas de preparação e implantação de dados.
  • Para criar e anexar um destino de computação para treinamento em um cluster do Kubernetes habilitado para Azure Arc, confira Configurar Machine Learning habilitado para Azure Arc

Criar um ambiente

Os ambientes do Azure Machine Learning são um encapsulamento do ambiente no qual acontece o treinamento do aprendizado de máquina. Eles especificam os pacotes Python, a imagem do Docker, as variáveis de ambiente e as configurações de software em relação aos scripts de treinamento e pontuação. Também especificam runtimes (Python, Spark ou Docker).

Você pode definir seu ambiente ou usar um ambiente coletado do Azure Machine Learning. Os ambientes organizados são ambientes predefinidos que estão disponíveis no workspace por padrão. Esses ambientes têm como base imagens do Docker armazenadas em cache, o que reduz o custo de preparação do trabalho. Consulte Ambientes organizados do Azure Machine Learning para obter a lista completa dos ambientes organizados disponíveis.

Para um destino de computação remota, é possível usar um dos ambientes estruturados mais comuns para começar:

APLICA-SE A:SDK do Python do Azure MLv1

from azureml.core import Workspace, Environment

ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")

Para obter mais informações e detalhes sobre ambientes, consulte Criar e usar ambientes de software no Azure Machine Learning.

Destino de computação local

Se o destino de computação for o seu computador local, você será responsável por garantir que todos os pacotes necessários estejam disponíveis no ambiente do Python em que o script é executado. Use o python.user_managed_dependencies para usar o ambiente atual do Python (ou o Python no caminho que você especificar).

APLICA-SE A:SDK do Python do Azure MLv1

from azureml.core import Environment

myenv = Environment("user-managed-env")
myenv.python.user_managed_dependencies = True

# You can choose a specific Python environment by pointing to a Python path 
# myenv.python.interpreter_path = '/home/johndoe/miniconda3/envs/myenv/bin/python'

Criar a configuração de trabalho de script

Agora que você tem um destino de computação (my_compute_target, confira Pré-requisitos e ambiente (myenv, confira Criar um ambiente), crie uma configuração de trabalho de script que execute o seu script de treinamento (train.py) localizado em seu diretório project_folder:

APLICA-SE A:SDK do Python do Azure MLv1

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory=project_folder,
                      script='train.py',
                      compute_target=my_compute_target,
                      environment=myenv)

Se você não especificar um ambiente, um ambiente padrão será criado para você.

Se você tiver argumentos de linha de comando que deseja passar para o script de treinamento, poderá especificá-los por meio do parâmetro arguments do construtor ScriptRunConfig, por exemplo, arguments=['--arg1', arg1_val, '--arg2', arg2_val].

Caso deseje substituir o tempo máximo padrão permitido para o trabalho, poderá fazer isso por meio do parâmetromax_run_duration_seconds. O sistema tentará cancelar automaticamente o trabalho se demorar mais do que esse valor.

Especificar uma configuração de trabalho distribuído

Para executar um trabalho de treinamento distribuído, forneça a configuração específica do trabalho distribuído ao parâmetro distributed_job_config. Os tipos de configuração com suporte incluem MpiConfiguration, TensorflowConfiguratione PyTorchConfiguration.

Para obter mais informações e exemplos sobre como executar trabalhos Horovod, TensorFlow e PyTorch distribuídos, confira:

Enviar o teste

APLICA-SE A:SDK do Python do Azure MLv1

run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)

Importante

Quando você enviar o trabalho de treinamento, um instantâneo do diretório que contém os seus scripts de treinamento será criado e enviado ao destino de computação. Ele também é armazenado como parte do experimento em seu workspace. Se você alterar os arquivos e enviar o trabalho novamente, apenas os arquivos alterados serão carregados.

Para evitar que arquivos desnecessários sejam incluídos no instantâneo, faça uma opção Ignorar arquivo (.gitignore ou .amlignore) no diretório. Adicione os arquivos e diretórios a serem excluídos para esse arquivo. Para obter mais informações sobre a sintaxe a ser usada dentro desse arquivo, consulte sintaxe e padrões para .gitignore. O arquivo .amlignore usa a mesma sintaxe. Se ambos os arquivos existirem, o arquivo .amlignore será usado e o arquivo .gitignore não será usado.

Para obter mais informações sobre instantâneos, consulte Instantâneos.

Importante

Pastas Especiais Duas pastas, produzem e logs, recebem tratamento especial do Aprendizado de Máquina do Azure. Durante o treinamento, ao gravar arquivos em pastas denominadas gera e logs que são relativos ao diretório raiz (./outputs e ./logs, respectivamente), os arquivos serão automaticamente Carregue o histórico de trabalho para que você tenha acesso a eles quando seu trabalho for concluído.

Para criar artefatos durante o treinamento (como arquivos de modelo, os pontos de verificação, arquivos de dados ou imagens plotadas) escreva para a pasta ./outputs.

Da mesma forma, você pode gravar todos os logs do seu trabalho de treinamento na pasta ./logs. Para utilizar a integração TensorBoard do Azure Machine Learning, certifique-se de gravar seus logs TensorBoard nessa pasta. Enquanto o trabalho estiver em andamento, você poderá lançar o TensorBoard e transmitir esses logs. Mais tarde, você também poderá restaurar os logs de qualquer um dos trabalhos anteriores.

Por exemplo, para fazer o download de um arquivo gravado na pasta de saídas para seu computador local após o trabalho de treinamento remoto: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')

Acompanhamento e integração do Git

Quando você inicia um trabalho de treinamento em que o diretório de origem é um repositório Git local, as informações sobre o repositório são armazenadas no histórico de trabalhos. Para obter mais informações, confira Integração do Git com o Azure Machine Learning.

Exemplos de notebook

Confira estes notebooks para obter exemplos de como configurar trabalhos para vários cenários de treinamento:

Saiba como executar notebooks seguindo o artigo Usar os notebooks do Jupyter para explorar esse serviço.

Solução de problemas

  • AttributeError: o objeto 'RoundTripLoader' não tem nenhum atributo 'comment_handling' : esse erro vem da nova versão (v0.17.5) do ruamel-yaml, uma dependência azureml-core que introduz uma alteração da falha em azureml-core. Para corrigir esse erro, desinstale ruamel-yaml executando pip uninstall ruamel-yaml e instalando uma versão diferente de ruamel-yaml; as versões com suporte são v0.15.35 até v0.17.4 (inclusive). Você pode fazer isso executando pip install "ruamel-yaml>=0.15.35,<0.17.5".

  • O trabalho falha jwt.exceptions.DecodeError com : mensagem de erro exata: jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode().

    Considere atualizar para a versão mais recente do SDK do azureml-core: pip install -U azureml-core.

    If. você estiver se deparando com esse problema em trabalhos locais, verifique a versão do PyJWT instalada em seu ambiente em que . você está iniciando trabalhos. As versões do PyJWT com suporte são < 2.0.0. Desinstale o PyJWT do ambiente se a versão for >= 2.0.0. Você pode verificar a versão do PyJWT, desinstalá-la e instalar a versão correta da seguinte maneira:

    1. Inicie um shell de comando, ative o ambiente Conda em que o azureml-core está instalado.
    2. Insira pip freeze e procure PyJWT. Se encontrado, a versão listada deverá ser anterior à 2.0.0
    3. Se a versão listada não for uma versão com suporte, execute pip uninstall PyJWT no shell de comando e digite y para confirmação.
    4. Instale usando pip install 'PyJWT<2.0.0'

    If. você estiver enviando um ambiente criado pelo usuário com o seu trabalho, considere usar a versão mais recente do azureml-core nesse ambiente. As versões >= 1.18.0 do azureml-core já fixam o PyJWT < 2.0.0. Se for necessário usar uma versão do azureml-core < 1.18.0 no ambiente enviado, especifique o PyJWT < 2.0.0 nas dependências do PIP.

  • ModuleErrors (nenhum módulo nomeado): Se . você estiver executando o ModuleErrors durante o envio de experimentos no Azure Machine Learning, o script de treinamento espera que um pacote seja instalado, mas ele não é adicionado. Depois que você fornece o nome do pacote, o Azure Machine Learning instala o pacote no ambiente usado para o trabalho de treinamento.

    If. você estiver usando estimativas para enviar experimentos, é possível especificar um nome de pacote por meio do parâmetro pip_packages ou conda_packages no avaliador com base na origem a partir da qual você deseja instalar o pacote. Também é possível especificar um arquivo yml com todas as dependências usando conda_dependencies_file ou listar todos os requisitos de pip em um arquivo txt usando o parâmetro pip_requirements_file. Caso você tenha um objeto próprio do ambiente do Azure Machine Learning cuja imagem padrão usada pelo avaliador deseja substituir, especifique esse ambiente por meio do parâmetro environment do construtor do avaliador.

    As imagens do Docker mantidas pelo Azure Machine Learning e o conteúdo delas podem ser vistos em Contêineres do Azure Machine Learning. As dependências específicas da estrutura são listadas na respectiva documentação de estrutura:

    Observação

    Se você considera que um pacote específico é comum o suficiente para ser adicionado nos ambientes e nas imagens mantidas pelo Azure Machine Learning, gere um problema do GitHub em Contêineres do Azure Machine Learning.

  • NameError (nome não definido), AttributeError (objeto sem atributo) : essa exceção deve vir dos scripts de treinamento. É possível olhar os arquivos de log na interface do usuário do portal do Azure para obter mais informações sobre o nome específico não definido ou o erro de atributo. No SDK, é possível usar run.get_details() para exibir a mensagem de erro. Isso também listará todos os arquivos de log gerados para o trabalho. Não deixe de dar olhar o script de treinamento e corrigir o erro antes de reenviar o trabalho.

  • Exclusão de trabalho ou experimento: os experimentos podem ser arquivados usando o método Experiment.archive ou da exibição guia Experimento no cliente do Estúdio do Azure Machine Learning por meio do botão "arquivo de teste". Esta ação oculta o experimento das consultas e exibições de lista, mas não o exclui.

    No momento, não há suporte para a exclusão permanente de trabalhos ou experimentos individuais. Para mais informações sobre a exclusão dos ativos de Workspace, consulte Exportar ou excluir dados do workspace no serviço do Machine Learning.

  • O Documento de Métrica é muito grande: o Azure Machine Learning tem limites internos no tamanho dos objetos de métrica que podem ser registrados de cada vez em uma execução de treinamento. Se você encontrar o erro "o Documento de Métrica é muito grande" ao registrar em log uma métrica com valor de lista, tente dividir a lista em partes menores, por exemplo:

    run.log_list("my metric name", my_metric[:N])
    run.log_list("my metric name", my_metric[N:])
    

    Internamente, o Azure Machine Learning concatena os blocos com o mesmo nome de métrica em uma lista contígua.

  • O destino de computação leva muito tempo para ser iniciado: as imagens do Docker para destinos de computação são carregadas do ACR (Registro de Contêiner do Azure). Por padrão, o Azure Machine Learning cria um ACR que usa a camada de serviço básica. Alterar o ACR para o espaço de trabalho para a camada Standard ou Premium pode reduzir o tempo necessário para criar e carregar imagens. Para obter mais informações, confira Níveis de serviço do Registro de Contêiner do Azure.

Próximas etapas