Treinamento de modelos TensorFlow com o Serviço de Machine Learning do Azure

Para o treinamento de redes neurais profundas (DNN) com o TensorFlow, o Azure Machine Learning fornece a classe de ferramentas de TensorFlow definida pelo usuário do TensorFlow Estimator . A TensorFlow avaliação do TensorFlow no SDK do Azure (que não deve ser confundida com a classe tf.estimator.Estimator ) facilita o envio de trabalhos de treinamento do TensorFlow para execuções distribuídas e de nó único nos recursos de computação do Azure.




Treinamento em site único


O aprendizado com a TensorFlow avaliação TensorFlow semelhante ao uso Estimator ; portanto, primeiro leia o artigo de instruções e aprenda os conceitos.


Para concluir a tarefa TensorFlow, você deve criar um objeto TensorFlow . Você já deveria ter criado o objeto compute_target do recurso de computação de destino .


 from azureml.train.dnn import TensorFlow script_params = { '--batch-size': 50, '--learning-rate': 0.01, } tf_est = TensorFlow(source_directory='./my-tf-proj', script_params=script_params, compute_target=compute_target, entry_script='train.py', conda_packages=['scikit-learn'], use_gpu=True) 

Especifique os seguintes parâmetros no construtor TensorFlow.

ParâmetroDESCRIÇÃO
source_directoryUm diretório local que contém todo o código necessário para concluir o treinamento. Esta pasta é copiada do computador local para o recurso de computação remota.
script_paramsUm dicionário que especifica argumentos da linha de comandos para o entry_script treinamento entry_script como pares <argumento da linha de comandos, valor>.
compute_targetO destino de computação remota no qual o script de treinamento será executado. No nosso caso, este é um cluster do Ambiente de Computação do Machine Learning do Azure ( AmlCompute ).
entry_scriptO caminho para o arquivo (relativo ao source_directory ) do script de treinamento que será executado no recurso de computação remota. Este arquivo e os arquivos adicionais dos quais depende devem estar localizados nesta pasta.
conda_packagesUma lista de pacotes Python necessários para a instalação do script de treinamento usando o conda. Nesse caso, o script de treinamento usa o sklearn para baixar dados, portanto, você deve especificar este pacote para instalação. O parâmetro pip_packages do construtor pode ser usado para todos os pacotes de pip necessários.
use_gpuDefina esse sinalizador como True para usar a GPU para treinamento. O padrão é False .

Como você está trabalhando com a ferramenta de avaliação TensorFlow, o contêiner usado para treinamento, por padrão, conterá o pacote TensorFlow e as dependências relacionadas necessárias para o treinamento na CPU e GPU.


Em seguida, envie o trabalho TensorFlow:


 run = exp.submit(tf_est) 

Treinamento distribuído


A ferramenta de avaliação do TensorFlow também permite treinar modelos nos clusters de CPU e GPU das máquinas virtuais do Azure. O treinamento distribuído do TensorFlow é fornecido por meio de várias chamadas de API, com o serviço Azure Machine Learning em segundo plano, gerenciando os recursos de infraestrutura e orquestração necessários para concluir essas cargas de trabalho.


Os Serviços de Aprendizado de Máquina do Azure oferecem suporte a dois métodos de aprendizado distribuído no TensorFlow.



Horovod


O Horovod é uma plataforma baseada em anel e redução baseada em aprendizado distribuído de código aberto desenvolvida pela Uber.


Para executar o treinamento distribuído do TensorFlow usando a plataforma Horovod, crie um objeto TensorFlow da seguinte maneira:


 from azureml.train.dnn import TensorFlow tf_est = TensorFlow(source_directory='./my-tf-proj', script_params={}, compute_target=compute_target, entry_script='train.py', node_count=2, process_count_per_node=1, distributed_backend='mpi', use_gpu=True) 

O código acima mostra as seguintes novas opções no construtor TensorFlow.

ParâmetroDESCRIÇÃOvalor padrão
node_countO número de nós a serem usados ​​para a tarefa de treinamento.1
process_count_per_nodeO número de processos (ou funções de trabalho) em execução em cada nó.1
distributed_backendO lado do servidor para executar o aprendizado distribuído, oferecido pela ferramenta de avaliação MPI. Para executar um treinamento paralelo ou distribuído (por exemplo, node_count > 1 ou node_count > 1 ou ambos) usando MPI (e Horovod), defina distributed_backend='mpi' Azure Machine Learning usa a implementação MPI Open MPI .None

No exemplo acima, o treinamento distribuído será executado com duas funções de trabalho - uma para cada nó.


O Horovod e suas dependências serão instalados automaticamente, então você pode simplesmente importá-los para o train.py treinamento train.py seguinte maneira:


 import tensorflow as tf import horovod 

Por fim, envie seu trabalho do TensorFlow:


 run = exp.submit(tf_est) 

Servidor de Parâmetros


Você também pode iniciar seu próprio treinamento distribuído do TensorFlow que usa o modelo de servidor de parâmetros. Nesse método, o treinamento é realizado em um cluster de servidores de parâmetros e funções de trabalho. Durante o treinamento, as funções de trabalhador calculam gradientes e os servidores de parâmetros executam o processamento estatístico dos gradientes.


Crie um objeto TensorFlow:


 from azureml.train.dnn import TensorFlow tf_est = TensorFlow(source_directory='./my-tf-proj', script_params={}, compute_target=compute_target, entry_script='train.py', node_count=2, worker_count=2, parameter_server_count=1, distributed_backend='ps', use_gpu=True) 

Preste atenção aos seguintes parâmetros no construtor TensorFlow no código acima.

ParâmetroDESCRIÇÃOvalor padrão
worker_countO número de funções de trabalho.1
parameter_server_countO número de servidores de parâmetros.1
distributed_backendA parte do servidor que será usada para o treinamento distribuído.Para realizar o treinamento distribuído usando o servidor de parâmetros, defina o valor distributed_backend='ps' .None

Notas sobre TF_CONFIG


Você também precisará de endereços e portas de rede de cluster para tf.train.ClusterSpec , para que o serviço Azure Machine Learning defina automaticamente a TF_CONFIG ambiente TF_CONFIG .


A TF_CONFIG ambiente TF_CONFIG é uma sequência JSON. A seguir, é apresentado um exemplo de variável para o servidor de parâmetros.


 TF_CONFIG='{ "cluster": { "ps": ["host0:2222", "host1:2222"], "worker": ["host2:2222", "host3:2222", "host4:2222"], }, "task": {"type": "ps", "index": 0}, "environment": "cloud" }' 

Se você usar a tf.estimator alto nível tf.estimator , o tf.estimator analisará essa variável TF_CONFIG e formará uma especificação de cluster.


Se você usar uma API de nível inferior para treinamento, precisará analisar a variável TF_CONFIG e criar tf.train.ClusterSpec no código de treinamento. Neste exemplo, essas ações são executadas em um script de treinamento da seguinte maneira:


 import os, json import tensorflow as tf tf_config = os.environ.get('TF_CONFIG') if not tf_config or tf_config == "": raise ValueError("TF_CONFIG not found.") tf_config_json = json.loads(tf_config) cluster_spec = tf.train.ClusterSpec(cluster) 

Após concluir o script de treinamento e criar o objeto TensorFlow, envie a tarefa de treinamento:


 run = exp.submit(tf_est) 

Exemplos


Para blocos de notas distribuídos de aprendizado profundo, consulte o repositório GitHub



Aprenda a executar blocos de anotações seguindo as instruções em um artigo sobre como aprender este serviço com os blocos de anotações Jupyter .


Informações Adicionais


Source: https://habr.com/ru/post/pt442120/


All Articles