《白话深度学习与TensorFlow》——3.3 其他特点

3.3 其他特点

TensorFlow有很多的特点,当然这些特点不见得都是独一无二的。
1 .多环境与集群支持
首先,TensorFlow支持在PC的CPU环境、GPU环境甚至是安卓环境中运行。它不仅可以支持在单个计算单元(一颗CPU的多核心或一颗GPU的多核心)上进行运算,也支持一台机器上多个CPU或多个GPU上并行计算。
2016年4月14日,Google发布了分布式TensorFlow,能够支持在几百台机器上并行训练。分布式的TensorFlow由高性能的gRPC库作为底层技术支持。TensorFlow集群由一系列的任务组成,这些任务执行TensorFlow的图计算。每个任务会关联到TensorFlow的一个服务,该服务用于创建TensorFlow会话及执行图计算。TensorFlow集群也可以划分为一个或多个作业,每个作业可以包含一个或多个任务。在一个TensorFlow集群中,通常一个任务运行在一个机器上。如果该机器支持多GPU设备,可以在该机器上运行多个任务,由应用程序控制任务在哪个GPU设备上运行。
常用的深度学习训练模型为数据并行化,即TensorFlow任务采用相同的训练模型在不同的小批量数据集上进行训练,然后在参数服务器上更新模型的共享参数。TensorFlow支持同步训练和异步训练两种模型训练方式。
异步训练即TensorFlow上每个节点上的任务为独立训练方式,不需要执行协调操作,如下图所示:
《白话深度学习与TensorFlow》——3.3 其他特点

同步训练为TensorFlow上每个节点上的任务需要读入共享参数,执行并行化的梯度计算,然后将所有共享参数进行合并,如下图所示:
《白话深度学习与TensorFlow》——3.3 其他特点

这两个图说明的过程具体是这样的:首先,初始化一个模型的矩阵w,把一个批次的训练样本平均分成若干份(图上是三份),分别给到三个节点去计算,进行正向传播;其次,在正向传播后会得到若干个不同的梯度,这个就是反向传播的过程,需要把这几个梯度向量ΔP都传送到一起,然后求出一个平均梯度值;最后,用这个平均梯度值再更新到这几个模型上去,完成一个批次的样本训练迭代过程。这里提到的过程大家可能会觉得有些陌生,不过没关系后面都会提到。
这就意味着理论上讲TensorFlow在处理一个训练任务的时候可以在多台服务器的多个GPU上共同进行运算以加快速度。不过要注意的是,如果你的网络不够大,这种方式有点像高射炮打蚊子一样不经济,由于参数的传递在网络上是要消耗时间的,对比在一台机器上进行传递数据来说,这个传输消耗的时间就显得有点太久了,甚至还有可能反而会让训练变慢。
2 . TensorBoard——看得见的训练
TensorFlow有一个比较友好的组件,它可以让工作人员在训练网络的过程中通过仪表盘看到网络目前的表现情况。
可视化几乎是任何一款软件都期望进行强化的部分,因为这样可以给人带来更好的体验,即便这些人已经用惯了文字界面的Unix系统族。

《白话深度学习与TensorFlow》——3.3 其他特点
《白话深度学习与TensorFlow》——3.3 其他特点

在TensorBoard中你只需要通过非常简单的配置命令:

#启动
tensorboard?--logdir=path/to/logs?

就能将它读取的位置指向日志路径,这样就可以读取其中的日志信息并做可视化显示。默认的Web界面位置在http://localhost:6006。从界面上可以看到一个训练模型的准确率以及损失函数的大小变化趋势。
3 . TensorFlow Serving——模型
TensorFlow Serving也是一个TensorFlow产品群的开源组件,可以部署成一个RESTful接口服务——类似于网站上的HTTP形式的API。是一种用于机器学习模型的高性能开源服务系统,专为生产环境而设计,并针对 TensorFlow进行了优化处理。
TensorFlow Serving系统非常适用于大规模运行能够基于真实情况的数据并会发生动态改变的多重模型。它能够实现:
模型生命周期管理。
使用多重算法进行试验。
GPU资源有效使用。
TensorFlow Serving 能够简化并加速从模型到生产的过程。它能实现在服务器架构和API保持不变的情况下,安全地部署新模型并运行试验。除了原生集成TensorFlow,还可以扩展服务其他类型的模型。下图显示了简化的监督学习过程,向learner输入训练数据,然后输出模型。
《白话深度学习与TensorFlow》——3.3 其他特点

TensorFlow Serving使用(之前训练的)模型来实施推理——基于客户端呈现数据的预测。因为客户端通常会使用远程过程调用(RPC)接口来与服务系统通信,TensorFlow Serving提供了一种基于gRPC的参考型前端实现,这是谷歌开发的一种高性能开源RPC架构。当新数据可用或改进模型时,加载并迭代模型是很常见的。事实上,在谷歌许多管线经常运行,一旦当新数据可用时,就会产生新版本的模型。这将使得大规模协同训练复杂任务变得更方便。

上一篇:java实现顺序栈


下一篇:MySQL存储过程中的语法学习