加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在多系统和网络拓扑中构建高性能模型?

发布时间:2018-04-16 08:04:15 所属栏目:大数据 来源:站长网
导读:这个文档和附带的剧本具体先容了怎样构建针对各类体系和收集拓扑的高机能可拓展模子。这个技能在本文档顶用了一些初级的 Tensorflow Python 基元。在将来,这些技能将被并入高级 API。 输入管道 机能指南叙述了怎样诊断输入管道也许存在的题目及其最佳办理

在漫衍式体系中,每个事变器(worker)历程运行沟通的模子,参数处事器处理赏罚其自有的变量主副本。当一个事变器必要一个来自参数处事器的变量时,它可从个中直接引用。Tensorflow 在运行时会将隐式副本添加到图形中,这使得在必要它的计较装备上变量值可用。当在事变器上计较梯度时,这个梯度会被传输到拥有特定变量的参数处事器中,而响应的优化器被用于更新变量。

以下是一些进步吞吐量的技能:

为了使负载均衡,这些变量按照其巨细在参数处事器之间传输。 当每个事变器有多个 GPU 时,累加每个 GPU 的梯度,并把这个单一的聚合梯度发送到参数处事器。这将低就逮络带宽,镌汰参数处事器的事变量。

为了和谐事变器,经常回收异步更新模式,个中每个事变器更新变量的主副本,而不与其他事变器同步。在我们的模子中,我们展示了在事变器中引入同步机制长短常轻易的,以是在下一步开始之前全部的事变器必需完成更新。

这个参数处事器要领同样可以应用在当地实习中,在这种环境下,它们不是在参数处事器之间撒播变量的主副本,而是在 CPU 上或漫衍在可用的 GPU 上。

因为该配置的简朴性,这种架构在社区中得到普及的推广。

通过转达参数 variable_update=parameter_server,也可以在剧本中行使此模式。

变量复制

在这种计划中,处事器中的每个 GPU 都有本身的变量副本。通过将完全聚合的梯度应用于变量的每个 GPU 副本,使得这些值在 GPU 之间保持同步。

由于变量和数据在实习的初始阶段就筹备好了,以是实习的前向计较可以当即开始。聚合各个装备的梯度以获得一个完全聚合的梯度,并将该梯度应用到每个当地副本中。

处事器间的梯度聚合可通过差异的要领实现:

行使 Tensorflow 尺度操纵在单个装备上(CPU 或 GPU)累加整和,然后将其拷贝回全部的 GPU。 行使英伟达 NCCL,这个将在下面的 NCCL 章节叙述。 漫衍式实习中的变量复制

上述变量复制的要领可扩展到漫衍式实习中。一种相同的要领是:完全地聚合集群中的梯度,并将它们应用于每个当地副本。这种要领在将来版本的剧本中也许会呈现,可是当前的剧本回收差异的要领。描写如下。

在这一模式中,除了变量的每一个 GPU 副本之外,主副本被存储在参数处事器之中。借助这一复制模式,可行使变量的当地副本立即开始实习。

跟着权重的梯度可用,它们会被送回至参数处事器,并全部的当地副本城市被更新:

统一个事变器中把 GPU 全部的梯度聚合在一路。 未来自各个事变器的聚合梯度发送至自带变量的参数处事器中,个中行使非凡的优化器来更新变量的主副本。 每个事变器从主副本中更新变量的当地副本。在示例模子中,这是在一个拥有交错副本的负载中在守候全部的模块完成变量更新后举办的,而且只有在负载被全部副本开释往后才气获取新的变量。一旦全部的变量完成复制,这就符号着一个实习步调的完成,和下一个实习步调的开始。

尽量这些听起来与参数处事器的尺度用法很相似,可是其机能在许多案例中示意更佳。这很洪流平由于计较没有任何耽误,早期梯度的大部门复制耽误可被稍后的计较层潜匿。

通过转达参数 variable_update=distributed_replicated 可以在剧本中行使该模式。

NCCL

为了在统一台主机的差异 GPU 上撒播变量和聚合梯度,我们可以行使 Tensorflow 默认的隐式复制机制。

然而,我们也可以选择 NCCL(tf.contrib.nccl)。NCCL 是英伟达的一个库,可以跨差异的 GPU 实现数据的高效传输和聚合。它在每个 GPU 上分派一个协作内核,这个内核知道怎样最好地操作底层硬件拓扑布局,并行使单个 SM 的 GPU。

通过尝试证明,尽量 NCCL 凡是会加快数据的聚合,但并不必然会加快实习。我们的假设是:隐式副本根基是不耗时的,由于它们本在 GPU 上复制引擎,只要它的耽误可以被主计较自己潜匿起来,那么。固然 NCCL 可以更快地传输数据,可是它必要一个 SM,而且给底层的 L2 缓存增进了更多的压力。我们的研究功效表白,在 8 个 GPU 的前提下,NCCL 示意出了更优秀的机能;可是假如 GPU 更少的环境下,隐式副本凡是会有更好的示意。

分段变量

我们进一步先容一种分段变量模式,我们行使分段地区来举办变量读取和更新。与输入管道中的软件流水线相同,这可以潜匿数据拷贝的耽误。假如计较所花的时刻比复制和聚合的时刻更长,那么可以以为复制自己是不耗时的。

这种要领的弱点是全部的权重都来自之前的实习步调,以是这是一个差异于 SGD 的算法,可是通过调解进修率和其他超参数,照旧有也许进步收敛性。

剧本的执行

这一节将列出执行主剧本的焦点呼吁行参数和一些根基示例(tf_cnn_benchmarks.py)

留意:tf_cnn_benchmarks.py 行使的设置文件 force_gpu_compatible 是在 Tensorflow 1.1 版本之后引入的,直到 1.2 版本宣布才提议从源头成立。

首要的呼吁行参数

model:行使的模子有 resnet50、inception3、vgg16 和 alexnet。 num_gpus:这里指所用 GPU 的数目。 data_dir:数据处理赏罚的路径,假如没有被配置,那么将会行使合成数据。为了行使 Imagenet 数据,可把这些指示 (https://github.com/tensorflow/tensorflow/blob/master/tensorflow_models/inception#getting-started) 作为出发点。 batch_size:每个 GPU 的批量巨细。 variable_update:打点变量的要领:parameter_server 、replicated、distributed_replicated、independent。 local_parameter_device:作为参数处事器行使的装备:CPU 可能 GPU。

单个实例

漫衍式呼吁行参数

1)ps_hosts:在<host>:port 的名目中(好比 10.0.0.2:50000),逗号脱离的主机列表用做参数处事器。

2)worker_hosts:(好比 10.0.0.2:50001),逗号脱离的主机列表用作事变器,在<host>:port 的名目中。

3)task_index:正在启动的 ps_host 或 worker_hosts 列表中的主机索引。

4)job_name:事变的种别,譬喻 ps 可能 worker。

漫衍式实例

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读