Configurar e enviar trabalhos de treinamento
APLICA-SE A: SDK do Python azureml v1
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
- Caso não tenha uma assinatura 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 workspace 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.
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:
- Criar um experimento para executar
- Criar um ambiente em que o script é executado
- Criar um ScriptRunConfig, que especifica o ambiente e o destino de computação
- Enviar o trabalho
- Aguarde a conclusão do trabalho
Ou você pode:
- Envie uma execução de HyperDrive para ajustar o hiperparâmetro.
- Envie um experimento por meio da extensão do VS Code.
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 azureml v1
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 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 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 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 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 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 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 azureml para Pythonv1
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:
- Treinamento em vários destinos de computação
- Treinamento com estruturas ML
- tutorials/img-classification-part1-training.ipynb
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ênciaazureml-core
que introduz uma alteração da falha emazureml-core
. Para corrigir esse erro, desinstaleruamel-yaml
executandopip uninstall ruamel-yaml
e instalando uma versão diferente deruamel-yaml
; as versões com suporte são v0.15.35 até v0.17.4 (inclusive). Você pode fazer isso executandopip 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:
- Inicie um shell de comando, ative o ambiente Conda em que o azureml-core está instalado.
- Insira
pip freeze
e procurePyJWT
. Se encontrado, a versão listada deverá ser anterior à 2.0.0 - 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. - 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
ouconda_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 usandoconda_dependencies_file
ou listar todos os requisitos de pip em um arquivo txt usando o parâmetropip_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âmetroenvironment
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
- O Tutorial: Treinar e implantar um modelo usa um destino de computação gerenciado para treinar um modelo.
- Veja como treinar modelos com estruturas ML específicas, como Scikit-learn, TensorFlowe PyTorch.
- Saiba como ajustar hiperparâmetros de modo eficiente para criar modelos melhores.
- Quando você tiver um modelo treinado, aprenda como e em que local implantar modelos.
- Exiba a referência do SKD da classe ScriptRunConfig.
- Usar o Azure Machine Learning com Redes Virtuais do Azure