tensorflow-内核-分布式机制原理剖析

在探讨tensorflow分布式机制的之前,我们先要了解一下分布式机器学习平台的简单作用。

分布式机器学习的目标是将具有庞大数据和计算量的任务分布式地部署到多台机器上,以提高数据计算的速度和可扩展性,减少任务的耗时。

接下来,我们需要探讨一下数据流模型。

早在2005年,Apache就实现了Hadoop分布式系统的基础架构,其核心设计———HDFS分布式文件系统为海量数据提供了存储空间,而 MapReduce为海量 数 据 提 供 了 计 算 支持,有效提高了大数据的处理速度。Apache Spark,是由UC Berkeley AMP实验室开源的类 Hadoop并行框架,应用于数据挖掘和机器学习领域,且在迭代优化计算方面的应用效果更好。

而Spark平台,就是基于数据流模型设计的。

数据流模型(DataFlow Graph Model)通常把计算即符号表达式抽象成数据流图。数据流图为有向无环图(Directed Acyclic Graph,DAG),图中每个结点表示一个操作,边代表一个结点与另一个结点的依赖关系。例如,在一个DAG中,从结点A到结点B有一条边,说明结点B是依赖于结点A的一个计算结果。有向 无 环 图 的 运 算 类 似 于 树 的 遍历,入度为零的结点可在任意时间执行,结点之间的关系通过弧唯一连接,因此数据流模型又可理解为数据驱动模型。

尽管将符号表达式抽象成数据流图较为简单,但DAG合理调度以最小化数据缓存量并减少计算延迟却非常关键。有人提出的从数据驱动到优先级驱动的DAG调度转换能有效解决此问题,却未考虑 DAG 的 分 布 式 执 行 情 况,而传统的数据流模型必须综合它在大数据情况下的准确性、延迟和开销。

随着大数据时代的到来,在分布式机器学习各领域中的数据量和数据维度都呈指数增长。数据流模型在处理大规模、高维度的大数据时,巨大的参数规模使得模型训练异常耗时,如此密集的计算工作和频繁的数据通信需要一个简洁、高效的模型来解决。

而参数服务器模型就是是另一种分布式机器学习平台的设计实现方法。

参数服务器 一经提出,便受到学术界和工业界的高度关注,并被广泛应用。

 

模型的参数服务器结点中包含一个服务器管理者结点,该管理者结点负责维护服务器各结点元数据的一致性,管理服务器各结点的生命周期以及分配资源。工作结点负责处理数据,一个工作结点处理一部分训练数据,计算局部梯度并进行数据分析,各工作结点间互不通信。任务调度管理器为对应工作结点下的机器分配工作负载并监督机器处理的进程,增删工作结点时,任务调度器为它们重新分配未完成的任务。工作结点之间独立运行,可实现多租户模式,不同类型的应用可在不同工作结点中并行运行,同类型的应用也可同时分配到多个工作结点中同步执行以提高并行性。
 

 

DistBelief 是一个用于训练大规模神经网络的的分布式系统,是 Google 第一代分布机器学习框架。DistBelief 使用参数服务器 (Parameter Server, 常称为 PS) 的系统架构,训练作业包括两个分离的进程:无状态的 Worker 进程,用于模型的训练;有状态的 PS 进程,用于维护模型的参数。

在分布式训练过程中,各个模型副本异步地从 PS 上拉取训练参数 w,当完成一步迭代运算后,推送参数的梯度 ∆w 到 PS 上去,并完成参数的更新。如图所示

但是,对于深度学习领域的高级用户, DistBelief 的编程模型,及其基于 PS 的系统架构,缺乏足够的灵活性和可扩展性。

在优化算法、训练算法、加速设备上都有严重的缺陷。


Google 毅然放弃了既有的 DistBelief 实现,并决定在其基础上做全新的系统架构设计。
 

经过长期的实践应用,研究者深感数据流和参数服务器模型本身各有利弊。googlebrain团队在DistBelif的基础上研发了tensorflow,将数据流和参数服务器搭配使用,衍生出了混合模型(数据流+参数服务器)。为了取得更快的速度、更高的移植性和灵活性,tensorflow采用数据流+参数服务器的混合模型。与传统的数据流模型和参数服务器模型均不同,在混合模型中,是将计算任务抽象成有向图(但不是DAG有向无环图,而是一个可变状态的有向循环图)。

计算图中结点表示操作operations(OPS),有些OPS控制流结点被用来计算梯度以更新网络模型中的变量;边表示结点间相互依赖的多维矩阵(张量tensor)。混合模型中加入了参数服务器的思想进行训练,模型由3个主要部分:Client,Maste,Worker。按网络图层将模型逐层划分给不同的Worker结点,并将参数服务器与数据流图相结合。混合模型图的结构如图所示。

 

Client负责将符号表达式抽象成计算图,并将计算请求发送至服务器结点;Worker结点负责处理从服务器结点发送过来的计算请求;而Master负责任务调度,并确保每个Worker的运行需求。Worker结点内部使用多线程消息传递机制通信,机器内部线程设置send结点和receive结点,在运行时send结点和receive结点实现跨设备传输数据,确保所需的数据从源设备到目的设备只转换一次,保证了数据同步结果的一致性。不同Worker结点通过session交互,减少了Worker结点之间的数据传递开销。

基于此架构,TensorFlow 使用数据流图表达计算过程和共享状态,使用节点表示抽象计算,使用边表示数据流。

如图所示,展示了 MNIST 手写识别应用的数据流图。

在该模型中,前向子图使用了 2 层全连接网络,分别为 ReLU 层和 Softmax 层。随后,使用 SGD 的优化算法,构建了与前向子图对应的反向子图,用于计算训练参数的梯度。最后,根据参数更新法则,构造训练参数的更新子图,完成训练参数的迭代更新。

因此TensorFlow就又具有以下这些方面的优势:

 

  1. 高性能: TensorFlow 升级至 1.0 版本性能提升显著,单机多卡 (8 卡 GPU) 环境中, Inception v3 的训练实现了 7.3 倍的加速比;在分布式多机多卡 (64 卡 GPU) 环境中, Inception v3 的训练实现了 58 倍的加速比;
  2.  跨平台:支持多 CPU/GPU/ASIC 多种异构设备的运算;支持台式机,服务器,移动设备等多种计算平台;支持 Windows, Linux, MacOS 等多种操作系统;
  3. 分布式:支持本地和分布式的模型训练和推理;
  4. 通用性:支持各种复杂的网络模型的设计和实现,包括非前馈型神经网络;
  5.  可扩展:支持 OP 扩展, Kernel 扩展, Device 扩展,通信协议的扩展;
  6. 可视化:使用 TensorBoard 可视化整个训练过程,极大地降低了 TensorFlow 的调试过程;
  7. 自动微分: TensorFlow 自动构造反向的计算子图,完成训练参数的梯度计算;
  8. 工作流: TensorFlow 与 TensorFlow Serving 无缝集成,支持模型的训练、导入、导出、发布一站式的工作流,并自动实现模型的热更新和版本管理。

 

最终如下图所示,随着开发人员的不断更近和推动,最终tensorflow形成了按照系统的层次结构展示的技术栈。这些技术栈也构成了TensorFlow 生态系统的核心。

 如果对深度学习框架感兴趣,请参照另一篇文章,如何手写一个深度学习框架。:https://blog.csdn.net/Labiod/article/details/105528604

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值