tf 原理二

来源:互联网 发布:人证比对软件 编辑:程序博客网 时间:2024/05/22 02:15

计算图反复执行多次,tensor不会持续保留,只是在计算图中过一遍。
variable是一类特殊的运算操作,可以将需要保留的tensor存储在内存或显存中,如weight

实现原理

tf的client通过session的接口与master和多个worker相连。其中每一个worker可以与多个硬件设备(device)相连,比如cpu和gpu,并负责管理这些硬件。而master则负责指导所有worker按流程执行计算图。

  • 单机版:client,master,worker全部在一台机器的同一个进程中
  • 分布式多机版:允许client,master,worker在不同机器的不同进程中,同时由集群调度系统统一管理各项任务
    tf为cpu和gpu提供了管理设备的对象接口,每一个对象负责分配、释放设备的内存,以及执行节点的运算核

tensor定义

tensor是多维数组,数据类型支持int,float,double和复数以及字符串。
每一个设备有单独的allocator负责储存各种数据类型的tensor,同时tensor的引用次数会被记录,当引用次数为0时,内存将会被释放。

单设备

在只有一个硬件设备的情况下,计算图会按照依赖关系顺序执行。当一个节点的所有上游依赖都被执行完时(依赖数为0),这个节点就会被加入ready queue等待执行。同时他下游所有节点的依赖数减1。

分布式调度

  1. 每一个节点该让什么设备执行
    tf设计一套为节点分配设备的策略。这个策略首先需要计算一个代价模型,这个代价模型估算每一个节点的输入、输出tensor的大小,以及所需要的计算时间,将综合时间最短的设备作为节点的运算设备。使用简单的贪婪策略以较快的速度找到一个不错的节点运算设备的分配方案。
  2. 如何管理节点间的数据通信
    当节点分配方案确定后,整个图被划分为许多子图,使用同一个设备且相邻的节点会被划分到同一个子图。计算图中从x到y的边会被取代为发送端的发送节点(send node)、接收端的接收节点(receive node)以及从发送节点到接收节点的边。底层实现了单机的cpu到gpu的通信或多机之间的tcp传输数据等数据通信问题。

容错

故障会在两种情况下检测出:
1. 信息从发送节点传输到接收节点失败时
2. 周期性worker心跳检测失败
variable node(保存参数) 可以被持久化,链接到save node和restore node。出错后计算图会终止并重启,训练从上一个checkpoint恢复数据不需要重来。

其他拓展功能

  • 自动求导
  • 单独执行子图,用户选择任意子图,沿某边输入,同时从另一些边获取结果
  • 支持计算图的if-condition 和 while-loop控制流
  • 支持使用文件路径读取数据,提高效率减少分布式读取的网络开销
  • 队列支持不同节点的异步执行
  • 容器是tf长期变量的管理机制,如variable

Anaconda

python的科学计算发行版,内置了python经常使用的库,提供了一个编译好的环境。

0 0
原创粉丝点击