Configurar e enviar trabalhos de treinamento

APLICA-SE A: Python SDK azureml v1

Neste artigo, você aprenderá a configurar e enviar trabalhos do Azure Machine Learning para treinar seus modelos. Trechos de código explicam as principais partes de configuração e envio de um script de treinamento. Em seguida, use um dos blocos de anotações de exemplo para encontrar os exemplos completos de trabalho de ponta a ponta.

Durante o treinamento, é comum iniciar no computador local e, posteriormente, expandir para um cluster baseado em nuvem. Com o Azure Machine Learning, você pode executar seu script em vários destinos de computação sem precisar alterar seu script de treinamento.

Tudo o que você precisa fazer é definir o ambiente para cada destino de computação dentro de uma configuração de trabalho de script. Em seguida, quando desejar executar seu experimento de treinamento em um destino de computação diferente, especifique a configuração de trabalho para essa 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.

Você envia seu experimento de treinamento com um objeto ScriptRunConfig. Este 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 a ser executado
  • environment: O ambiente a ser usado ao executar o script
  • e algumas opções configuráveis adicionais (consulte a documentação de referência para obter mais informações)

Preparar o 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 uma experiência para executar
  2. Criar um ambiente onde o script é executado
  3. Crie um ScriptRunConfig, que especifica o destino e o ambiente de computação
  4. Submeter o trabalho
  5. Aguarde até que a tarefa termine

Ou você pode:

Criar uma experimentação

Crie uma experiência no seu espaço de trabalho. Um experimento é um contêiner leve que ajuda a organizar envios de trabalho e acompanhar o código.

APLICA-SE A: Python SDK azureml v1

from azureml.core import Experiment

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

Selecione 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 Aprendizado de Máquina do Azure executará seu script localmente.

O código de exemplo neste artigo pressupõe que você já tenha criado um destino my_compute_target de computação da seção "Pré-requisitos".

Nota

  • O Azure Databricks não é suportado como um destino de computação para treinamento de modelo. Você pode 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 no cluster Kubernetes habilitado para ArcGIS do Azure, consulte Configurar o Aprendizado de Máquina habilitado para ArcGIS do Azure

Criar um ambiente

Os ambientes do Azure Machine Learning são um encapsulamento do ambiente onde o seu treinamento de aprendizado de máquina acontece. Eles especificam os pacotes Python, a imagem do Docker, as variáveis de ambiente e as configurações de software em torno de seus scripts de treinamento e pontuação. Eles também especificam tempos de execução (Python, Spark ou Docker).

Você pode definir seu próprio ambiente ou usar um ambiente com curadoria do Azure Machine Learning. Os ambientes com curadoria são ambientes predefinidos que estão disponíveis em seu espaço de trabalho por padrão. Esses ambientes são apoiados por imagens do Docker armazenadas em cache, o que reduz o custo de preparação do trabalho. Consulte Ambientes com curadoria do Azure Machine Learning para obter a lista completa de ambientes com curadoria disponíveis.

Para um destino de computação remota, você pode usar um destes ambientes com curadoria populares para começar:

APLICA-SE A: Python SDK azureml v1

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 & usar ambientes de software no Azure Machine Learning.

Destino de computação local

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

APLICA-SE A: Python SDK azureml v1

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 do trabalho de script

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

APLICA-SE A: Python SDK azureml v1

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 seu script de treinamento, poderá especificá-los por meio arguments do parâmetro do construtor ScriptRunConfig, por exemplo, arguments=['--arg1', arg1_val, '--arg2', arg2_val].

Se você quiser substituir o tempo máximo padrão permitido para o trabalho, você pode fazê-lo através do max_run_duration_seconds parâmetro. O sistema tenta cancelar automaticamente o trabalho se demorar mais do que este valor.

Especificar uma configuração de trabalho distribuído

Se você quiser executar um trabalho de treinamento distribuído, forneça a configuração específica do trabalho distribuído para o distributed_job_config parâmetro. Os tipos de configuração suportados incluem MpiConfiguration, TensorflowConfiguration e PyTorchConfiguration.

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

Submeter a experimentação

APLICA-SE A: Python SDK azureml v1

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

Importante

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

Para evitar que arquivos desnecessários sejam incluídos no instantâneo, crie um arquivo de ignorar (.gitignore ou .amlignore) no diretório. Adicione os ficheiros e os diretórios a excluir neste ficheiro. Para obter mais informações sobre a sintaxe a ser usada dentro desse arquivo, consulte sintaxe e padrões para .gitignore. O .amlignore arquivo usa a mesma sintaxe. Se ambos os arquivos existirem, o .amlignore arquivo será usado e o .gitignore arquivo não será usado.

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

Importante

Pastas especiais Duas pastas, saídas e logs, recebem tratamento especial pelo Azure Machine Learning. Durante o treinamento, quando você grava arquivos em pastas chamadas saídas e logs que são relativos ao diretório raiz (./outputs e ./logs, respectivamente), os arquivos serão automaticamente carregados para o seu histórico de trabalho para que você tenha acesso a eles assim que o trabalho for concluído.

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

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

Por exemplo, para baixar um arquivo gravado na pasta de saídas para sua máquina local após o trabalho de treinamento remoto: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')

Rastreamento e integração com 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, consulte Integração do Git para o Azure Machine Learning.

Exemplos de blocos de notas

Consulte estes blocos de anotações para obter exemplos de configuração de trabalhos para vários cenários de treinamento:

Saiba como executar blocos de notas ao seguir o artigo Utilizar blocos de notas Jupyter para explorar este serviço.

Resolução de Problemas

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

  • O trabalho falha com jwt.exceptions.DecodeError: 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 azureml-core: pip install -U azureml-core.

    Se . você está enfrentando esse problema para trabalhos locais, verifique a versão do PyJWT instalada em seu ambiente onde . você está começando a trabalhar. As versões suportadas do PyJWT 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, desinstalar e instalar a versão correta da seguinte maneira:

    1. Inicie um shell de comando, ative o ambiente conda onde azureml-core está instalado.
    2. Digite pip freeze e procure , PyJWTse encontrado, a versão listada deve ser < 2.0.0
    3. Se a versão listada não for uma versão suportada, pip uninstall PyJWT no shell de comando e digite y para confirmação.
    4. Instalar com pip install 'PyJWT<2.0.0'

    Se . Você está enviando um ambiente criado pelo usuário com seu trabalho, considere usar a versão mais recente do AzureML-Core nesse ambiente. Versões >= 1.18.0 do azureml-core já fixam PyJWT < 2.0.0. Se você precisar usar uma versão do azureml-core < 1.18.0 no ambiente enviado, certifique-se de especificar PyJWT < 2.0.0 em suas dependências pip.

  • ModuleErrors (Nenhum módulo nomeado): If . você está executando ModuleErrors ao enviar experimentos no Azure Machine Learning, o script de treinamento espera que um pacote seja instalado, mas não é adicionado. Depois de fornecer o nome do pacote, o Azure Machine Learning instala o pacote no ambiente usado para seu trabalho de treinamento.

    Se . você está usando Estimadores para enviar experimentos, você pode especificar um nome de pacote via pip_packages ou conda_packages parâmetro no estimador com base em qual fonte você deseja instalar o pacote. Você também pode especificar um arquivo yml com todas as suas dependências usando conda_dependencies_fileou listar todos os seus requisitos de pip em um arquivo txt usando pip_requirements_file o parâmetro. Se você tiver seu próprio objeto do Ambiente de Aprendizado de Máquina do Azure que deseja substituir a imagem padrão usada pelo estimador, poderá especificar esse ambiente por meio environment do parâmetro do construtor do estimador.

    O Azure Machine Learning manteve imagens docker e seu conteúdo podem ser vistos nos Contêineres do Azure Machine Learning. As dependências específicas da estrutura estão listadas na respetiva documentação da estrutura:

    Nota

    Se você acha que um pacote específico é comum o suficiente para ser adicionado em imagens e ambientes mantidos do Aprendizado de Máquina do Azure, levante um problema do GitHub nos Contêineres do Azure Machine Learning.

  • NameError (Nome não definido), AttributeError (Object não tem atributo): Esta exceção deve vir de seus scripts de treinamento. Você pode examinar os arquivos de log do portal do Azure para obter mais informações sobre o nome específico não definido ou erro de atributo. A partir do SDK, você pode usar run.get_details() para examinar a mensagem de erro. Isso também listará todos os arquivos de log gerados para o seu trabalho. Por favor, certifique-se de dar uma olhada em seu script de treinamento e corrigir o erro antes de reenviar seu trabalho.

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

    Atualmente, não há suporte para a exclusão permanente de experiências ou trabalhos individuais. Para obter mais informações sobre como excluir ativos do espaço de trabalho, consulte Exportar ou excluir os dados do espaço de trabalho do serviço de Aprendizado de Máquina.

  • O Documento de Métrica é muito grande: o Aprendizado de Máquina do Azure tem limites internos no tamanho de objetos métricos que podem ser registrados de uma só vez a partir de um trabalho de treinamento. Caso se depare com um erro “O Documento de Métricas é demasiado grande” ao registar uma métrica com valores de lista, experimente dividir a lista em segmentos 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 iniciar: as imagens do Docker para destinos de computação são carregadas do Registro de Contêiner do Azure (ACR). Por padrão, o Aprendizado de Máquina do Azure cria uma ACR que usa a camada de serviço básica . Mudar o ACR da área de trabalho para o escalão standard ou premium pode reduzir o tempo de criação e carregamento de imagens. Para obter mais informações, veja Escalões de serviço do Azure Container Registry (ACR).

Próximos passos