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
- Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar. Experimente hoje mesmo a versão gratuita ou paga do Azure Machine Learning
- O SDK do Azure Machine Learning para Python (v1) (>= 1.13.0)
- Um espaço de trabalho do Azure Machine Learning,
ws
- Um destino de computação,
my_compute_target
. Criar um destino de computação
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:
- Criar uma experiência para executar
- Criar um ambiente onde o script é executado
- Crie um ScriptRunConfig, que especifica o destino e o ambiente de computação
- Submeter o trabalho
- Aguarde até que a tarefa termine
Ou você pode:
- Envie uma execução do HyperDrive para ajuste de hiperparâmetros.
- Envie um experimento através da extensão VS Code.
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:
- Treinamento em vários alvos de computação
- Treinamento com estruturas de ML
- tutoriais/img-classification-part1-training.ipynb
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
, umaazureml-core
dependência, que introduz uma alteração de quebra noazureml-core
. Para corrigir esse erro, desinstaleruamel-yaml
executandopip uninstall ruamel-yaml
e instalando uma versão diferente do ; as versões suportadasruamel-yaml
são v0.15.35 a v0.17.4 (inclusive). Você pode fazer isso executandopip 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:
- Inicie um shell de comando, ative o ambiente conda onde azureml-core está instalado.
- Digite
pip freeze
e procure ,PyJWT
se encontrado, a versão listada deve ser < 2.0.0 - 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. - 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
ouconda_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 usandoconda_dependencies_file
ou listar todos os seus requisitos de pip em um arquivo txt usandopip_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 meioenvironment
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
- Tutorial: Treinar e implantar um modelo usa um destino de computação gerenciado para treinar um modelo.
- Veja como treinar modelos com estruturas de ML específicas, como Scikit-learn, TensorFlow e PyTorch.
- Saiba como ajustar hiperparâmetros de forma eficiente para criar modelos melhores.
- Depois de ter um modelo treinado, saiba como e onde implantar modelos.
- Exiba a referência do SDK da classe ScriptRunConfig.
- Usar o Azure Machine Learning com as Redes Virtuais do Azure