机器学习框架TensorFlow工作原理揭秘

TensorFlow学习--实现原理

单机和分布式版


TensorFlow中的client通过Session的接口与master及多个worker相连。每一个worker可以和多个硬件设备相连如CPU&GPU,并负责管理这些硬件。而master则负责管理所有worker按流程执行计算图。其中分布式版本中的client、master、及worker可以分布在不同的机器的不同进程中。如下图:

机器学习框架TensorFlow原理 tensorflow架构及原理_数据通信

设备名格式:

单机: /job:localhost/device:cpu:0

分布式:/job:worker/task:17/device:gpu:3

内存:每一个设备有单独的allocator负责各种存储数据的tensor,各个tensor通过引用计数来管理内存。

多设备管理

1)节点fen分配;

2)节点间数据通信的管理。

对(1),TensorFlow通过计算一个代价模型,取其值最小的节点分配。代价模型的求解是通过启发式规则和模拟节点计算过程结合估算得到的。未来可能要通过Reinforcement Learning的神经网络来辅助决策。此外TensorFlow还允许用户对节点的分配设置限制条件。

对(2),当计算图确定了,整个计算图会被划分为许多的子图,使用同一个设备或者相邻的节点会被分到同一个子图中,两个子图相连的边会被取代为一个发送端的发送节点(send node)、一个接收端的接收节点(receive node):

机器学习框架TensorFlow原理 tensorflow架构及原理_机器学习框架TensorFlow原理_02

单设备转化为多设备也很简单:


for i in range(8):
    for d in range(4):
        with tf.device("/gpu:%d"%d):
            input = x[i] if d is 0 else m[d-1]
            m[d], c[d] = LSTMCell(input, mprev[d],cprev[d])
            mprev[d] = m[d]
            cprev[d] = c[d]
            

分布式情况下数据的通信变为使用TCP或者RDMA传输数据。

拓展功能

TensorFlow支持自动求导,比如  tensor C 依赖于tensor {Xn} 那么在TensorFlow中可以自动求导求出{dC/dXn},其过程对用户透明。

机器学习框架TensorFlow原理 tensorflow架构及原理_数据通信_03

TensorFlow也支持单独计算子图:

机器学习框架TensorFlow原理 tensorflow架构及原理_机器学习框架TensorFlow原理_04

TensorFlow可以通过feed node和input node两种方式输入数据,feed node输入数据,必须从client读取,并通过网络传到分布式系统的其他节点,这样有较大的网络开销,而通过input node输入数据,直接使用文件路径,可以让worker节点读取本地的文件,提高效率。

TensorFlow也有队列的方式调度任务,这样可以在一个batch的数据运算的时候,提前从磁盘中读取下一个batch的数据,减少磁盘的I/O阻塞时间。TensorFlow实现了FIFO、shuffling queue队列,后者可以满足算法对随机性的要求。

TensorFlow使用Container来管理长期变量,其中Variable对象就储存在容器中。



性能的优化

检测重复计算,使其只计算一次,避免冗余计算;

巧妙的安排计算顺序,改善数据的传输和内存的占用问题;

支持高度优化的第三方库;

线性代数计算库: Eigen

矩阵乘法计算库:BLAS,cuBLAS

深度学习计算库:cuda-convnet,cuDNN

支持数据压缩,float32=>float16

TensorFlow提供三种并行计算模式:


1)数据并行:通过将一个mini-batch的数据放到不同的设备上实现梯度计算的并行,然后合并各个设备上得到的梯度并更新到共享参数服务器(parameter server)。

机器学习框架TensorFlow原理 tensorflow架构及原理_机器学习框架TensorFlow原理_05

梯度的计算也可以异步的实现,使用多个线程控制梯度的计算,每一个线程计算完后异步的更新参数。同步的方式相当于用了一个大mini-batch,其优点是没有梯度的干扰,缺点是容错性差。而异步的方式容错性好,但是收到梯度的干扰,导致每一组梯度的利用效率都下降。


2)模型并行:将计算图的不同部分放在不同的设备上实现模型的并行。模型并行需要模型本身有大量可以并行,且互相不依赖或者是依赖的程度小。

机器学习框架TensorFlow原理 tensorflow架构及原理_子图_06


3)流水线并行:和异步的数据并行很像,只不过是在同一个设备上实现并行。在一个设备上设计流水线连续的并行执行,提高设备的利用率:

机器学习框架TensorFlow原理 tensorflow架构及原理_子图_07

未来TensorFlow将实现把任意的子图独立出来,封装成一个函数,提供不同的前端调用(比如Python和C++)。实现大家工作的分享。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空