Capacitación de modelos TensorFlow con el Servicio Azure Machine Learning

Para la capacitación en redes neuronales profundas (DNN) con TensorFlow, Azure Machine Learning proporciona las herramientas de evaluación del Estimator clase de usuario TensorFlow . La TensorFlow evaluación TensorFlow en el SDK de Azure (que no debe confundirse con la clase tf.estimator.Estimator ) facilita el envío de trabajos de capacitación de TensorFlow para ejecuciones de nodo único y distribuidas en recursos informáticos de Azure.




Entrenamiento en un solo sitio


Aprender con la TensorFlow evaluación TensorFlow similar a usar Estimator , así que primero lea el artículo de procedimientos y aprenda los conceptos.


Para completar la tarea TensorFlow, debe crear un objeto TensorFlow . Ya debería haber creado el objeto compute_target del recurso de cálculo 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 los siguientes parámetros en el constructor TensorFlow.

ParámetroDESCRIPCION
source_directoryUn directorio local que contiene todo el código necesario para completar la capacitación. Esta carpeta se copia desde la computadora local al recurso informático remoto.
script_paramsUn diccionario que especifica los argumentos de la línea de comandos para el entry_script entrenamiento entry_script como pares <argumento de la línea de comandos, valor>.
compute_targetEl objetivo de cálculo remoto en el que se ejecutará el script de entrenamiento. En nuestro caso, este es un clúster de Azure Machine Learning Computing Environment ( AmlCompute ).
entry_scriptLa ruta del archivo (relativa al source_directory de source_directory ) del script de entrenamiento que se ejecutará en el recurso informático remoto. Este archivo y los archivos adicionales de los que depende deben ubicarse en esta carpeta.
conda_packagesUna lista de los paquetes de Python necesarios para que el script de entrenamiento se instale con conda. En este caso, el script de entrenamiento usa sklearn para descargar datos, por lo que debe especificar este paquete para la instalación. El parámetro pip_packages del constructor se puede usar para todos los paquetes de pip necesarios.
use_gpuEstablezca este indicador en True para usar la GPU para el entrenamiento. El valor predeterminado es False .

Como está trabajando con la herramienta de evaluación TensorFlow, el contenedor utilizado para la capacitación contendrá por defecto el paquete TensorFlow y las dependencias relacionadas necesarias para la capacitación en la CPU y la GPU.


Luego envíe el trabajo TensorFlow:


 run = exp.submit(tf_est) 

Entrenamiento distribuido


La herramienta de evaluación TensorFlow también le permite entrenar modelos en los grupos de CPU y GPU de máquinas virtuales de Azure. La capacitación distribuida de TensorFlow se entrega a través de varias llamadas API, con el servicio Azure Machine Learning en segundo plano administrando la infraestructura y las características de orquestación necesarias para completar estas cargas de trabajo.


Azure Machine Learning Services admite dos métodos de aprendizaje distribuido en TensorFlow.



Horovod


Horovod es un algoritmo de reducción de anillo basado en aprendizaje distribuido de código abierto desarrollado por Uber.


Para ejecutar el entrenamiento distribuido TensorFlow utilizando la plataforma Horovod, cree un objeto TensorFlow de la siguiente manera:


 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) 

El código anterior muestra las siguientes nuevas opciones en el constructor TensorFlow.

ParámetroDESCRIPCIONvalor por defecto
node_countEl número de nodos que se utilizarán para la tarea de entrenamiento.1
process_count_per_nodeEl número de procesos (o roles de trabajo) que se ejecutan en cada nodo.1
distributed_backendEl lado del servidor para ejecutar el aprendizaje distribuido, ofrecido por la herramienta de evaluación MPI. Para realizar una capacitación paralela o distribuida (por ejemplo, node_count > 1 o process_count_per_node > 1, o ambas) usando MPI (y Horovod), establezca distributed_backend='mpi' Azure Machine Learning usa la implementación MPI Open MPI .None

En el ejemplo anterior, la capacitación distribuida se realizará con dos roles de trabajo: un rol de trabajo para cada nodo.


Horovod y sus dependencias se instalarán automáticamente, por lo que simplemente puede importarlos al train.py entrenamiento train.py siguiente manera:


 import tensorflow as tf import horovod 

Finalmente, envíe su trabajo TensorFlow:


 run = exp.submit(tf_est) 

Servidor de parámetros


También puede comenzar su propio entrenamiento distribuido TensorFlow que utiliza el modelo de servidor de parámetros. En este método, la capacitación se lleva a cabo en un grupo de servidores de parámetros y roles de trabajo. Durante la capacitación, los roles de los trabajadores calculan los gradientes y los servidores de parámetros realizan el procesamiento estadístico de los gradientes.


Cree un 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 atención a los siguientes parámetros en el constructor TensorFlow en el código anterior.

ParámetroDESCRIPCIONvalor por defecto
worker_countEl número de roles de trabajo.1
parameter_server_countEl número de servidores de parámetros.1
distributed_backendLa parte del servidor que se utilizará para el entrenamiento distribuido. Para llevar a cabo un entrenamiento distribuido usando el servidor de parámetros, establezca el valor distributed_backend='ps' .None

Notas sobre TF_CONFIG


También necesitará direcciones de red de clúster y puertos para tf.train.ClusterSpec , por lo que el servicio Azure Machine Learning establece automáticamente la TF_CONFIG entorno TF_CONFIG .


La TF_CONFIG entorno TF_CONFIG es una cadena JSON. La siguiente es una variable de ejemplo para el 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" }' 

Si utiliza la tf.estimator alto nivel tf.estimator TensorFlow, tf.estimator analizará esta variable TF_CONFIG y formará una especificación de clúster.


Si utiliza una API de nivel inferior para la capacitación, debe analizar la variable TF_CONFIG y crear tf.train.ClusterSpec en el código de capacitación. En este ejemplo, estas acciones se realizan en un script de entrenamiento de la siguiente manera:


 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) 

Después de completar el script de entrenamiento y crear el objeto TensorFlow, envíe la tarea de entrenamiento:


 run = exp.submit(tf_est) 

Ejemplos


Para cuadernos de aprendizaje profundo distribuidos, consulte el repositorio de GitHub



Aprenda a ejecutar cuadernos siguiendo las instrucciones en un artículo sobre cómo aprender este servicio con los cuadernos Jupyter .


Información adicional


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


All Articles