为了使用TensorFlow进行深度神经网络(DNN)培训,Azure机器学习提供了TensorFlow
用户类Estimator
评估工具。 Azure SDK中的TensorFlow
评估TensorFlow
(不要与tf.estimator.Estimator
类混淆)可以轻松地为Azure计算资源中的单节点和分布式运行提交TensorFlow培训作业。

单点培训
使用TensorFlow
评估TensorFlow
学习与使用 Estimator
类似,因此请先阅读操作方法文章并学习概念。
要完成TensorFlow任务,您必须创建一个TensorFlow
对象。 您应该已经创建了目标计算资源的compute_target
对象。
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)
在TensorFlow构造函数中指定以下参数。
参量 | 说明 |
---|
source_directory | 本地目录,其中包含完成培训所需的所有代码。 该文件夹从本地计算机复制到远程计算资源。 |
script_params | 一个字典,用于将entry_script 培训entry_script 命令行参数指定为成对<命令行参数,值>。 |
compute_target | 训练脚本将在其上运行的远程计算目标。 在我们的例子中,这是Azure机器学习计算环境( AmlCompute )的群集。 |
entry_script | 将在远程计算资源上执行的训练脚本文件的路径(相对于source_directory )。 此文件和它依赖的其他文件应位于此文件夹中。 |
conda_packages | 使用conda安装培训脚本所需的Python软件包列表。 在这种情况下,训练脚本使用sklearn 下载数据,因此您必须指定此软件包进行安装。 构造函数的pip_packages 参数可用于所有必需的pip包。 |
use_gpu | 将此标志设置为True 可使用GPU进行训练。 默认值为False 。 |
由于您使用的是TensorFlow评估工具,因此默认情况下,用于训练的容器将包含TensorFlow软件包以及在CPU和GPU中进行训练所需的相关依赖项。
然后提交TensorFlow作业:
run = exp.submit(tf_est)
分布式培训
TensorFlow评估工具还允许您在Azure虚拟机的CPU和GPU群集中训练模型。 TensorFlow分布式培训是通过几个API调用提供的,其中Azure机器学习服务在后台管理完成这些工作负载所需的基础结构和业务流程功能。
Azure机器学习服务在TensorFlow中支持两种分布式学习方法。
霍罗沃德
Horovod是Uber开发的一种基于开源分布式学习的环减少算法。
要使用Horovod平台运行TensorFlow分布式培训,请创建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, process_count_per_node=1, distributed_backend='mpi', use_gpu=True)
上面的代码在TensorFlow构造函数中显示了以下新选项。
参量 | 说明 | 预设值 |
---|
node_count | 用于训练任务的节点数。 | 1 |
process_count_per_node | 每个节点上正在运行的进程(或工作角色)的数量。 | 1 |
distributed_backend | MPI评估工具提供的用于运行分布式学习的服务器端。 若要使用MPI(和Horovod)执行并行或分布式训练(例如, node_count > 1或process_count_per_node > 1,或两者都进行),请设置distributed_backend='mpi' mpi'。Azure机器学习使用MPI Open MPI实现。 | None |
在上面的示例中,将使用两个工作角色执行分布式培训-每个节点一个工作角色。
Horovod及其依赖项将自动安装,因此您只需将它们导入到train.py
培训train.py
,如下所示:
import tensorflow as tf import horovod
最后,提交您的TensorFlow作业:
run = exp.submit(tf_est)
参数服务器
您也可以使用参数服务器模型开始自己的TensorFlow分布式培训 。 在这种方法中,培训是在参数服务器和工作角色的集群中进行的。 在培训期间,工作人员角色将计算梯度,而参数服务器将对梯度进行统计处理。
创建一个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)
在上面的代码中,请注意TensorFlow构造函数中的以下参数。
参量 | 说明 | 预设值 |
---|
worker_count | 工作角色的数量。 | 1 |
parameter_server_count | 参数服务器的数量。 | 1 |
distributed_backend | 用于分布式训练的服务器部分,要使用参数服务器进行分布式训练,请设置值distributed_backend='ps' 。 | None |
关于TF_CONFIG
注释
您还将需要tf.train.ClusterSpec
群集网络地址和端口,因此Azure机器学习服务会自动设置TF_CONFIG
环境TF_CONFIG
。
TF_CONFIG
环境TF_CONFIG
是JSON字符串。 以下是参数服务器的示例变量。
TF_CONFIG='{ "cluster": { "ps": ["host0:2222", "host1:2222"], "worker": ["host2:2222", "host3:2222", "host4:2222"], }, "task": {"type": "ps", "index": 0}, "environment": "cloud" }'
如果您使用tf.estimator
TensorFlow高级API, tf.estimator
将解析此TF_CONFIG
变量并形成集群规范。
如果您使用较低级别的API进行培训,则需要自己分析TF_CONFIG
变量,并在培训代码中创建tf.train.ClusterSpec
。 在此示例中,这些操作在训练脚本中执行,如下所示:
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)
完成训练脚本并创建TensorFlow对象后,提交训练任务:
run = exp.submit(tf_est)
例子
对于分布式深度学习笔记本,请参阅GitHub存储库
按照有关如何使用Jupyter笔记本学习此服务的文章中的说明,学习如何运行笔记本 。
附加信息