关键元素定义
1) Graph 定义计算流,包括操作和值的具体类型
2) Operation 定义操作,包含一些属性,用于操作的变体。比如不同种类的数字相加
3) Kernel 定义操作的具体实现,区分平台,不同平台的kernel不同
4) Session 与tensorflow交互,扩展图和执行图的接口
5) Variables 包含状态的变量,持久化可变tensor
TensorFlow实现
TensorFlow的实现包括前端和后端
前端主要是客户端定义图和执行图的计算,当前主要是python和C++的接口
后端实现包括后端进程,这些进程可以访问计算设备,比如CPU和GPU。
计算设备是TensorFlow计算的核心抽象,每个计算设备负责内存管理和组织具体内核的计算。
Tensor的实现是带有类型的多维数组,由对应的计算设备管理它的存储,通过引用计数的方式管理释放。
有两种模式,本地和分布式。
本地模式 单计算设备
最简单的场景。按照图的依赖计算各个节点,具体作法,将依赖计数为0的计算节点放进待计算的队列当中。每计算完一个节点,更新所有依赖它的节点的依赖计数。
本地模式 多计算设备
需要做两件事情
-
确定每个计算节点放到哪个设备上
-
设备间的通信
-
基于贪婪实验的方法,从源节点一直比较然后添加进device。
-
插入两个节点,发送和接受,完成跨设备间通信。并且,对于同一份数据会合并发送。
分布式模式
和多设备很相似,只是跨设备间通信采用TCP或者RDMA方式。
通过checkpoint进行容错,当错误发生,会从头开始训练。
扩展
自动梯度计算
反向传播,构造对应的图。
优化
- 自己定义好放置设备,控制数据交换和内存使用
- 异步内核,减少线程数
- 内核计算优化,采用对应的库完成
- 图优化:相同子计算合并
- 精度压缩