title: tensorflow

date: 2017/11/20 12:04:12

categories:

  • 深度学习
    tags:
  • 目标检测
  • 深度学习
  • 神经网络

框架层为上层模型开发提供了强大的多语言接口、稳定的运行时、高效的算子,以及完备的通信层和设备层管理层。
学习Tensorflow框架内核,可以理解前端接口语言的支持,session生命周期,graph的构建、分裂和执行,operation的注册和运行,模块间数据通信,本地运行和分布式运行模式,以及CPU GPU TPU等异构设备的封装支持等。

tensorflow 系统架构

以C API为界,分为前端和后端两大部分。

  • 前端:提供编程模型,多语言的接口支持,比如Python Java C++等。通过C API建立前后端的连接,后面详细讲解。
  • 后端:提供运行环境,完成计算图的执行。进一步分为4层
    • 运行时:分为分布式运行时和本地运行时,负责计算图的接收,构造,编排等。
    • 计算层:提供各op算子的内核实现,例如conv2d, relu等
    • 通信层:实现组件间数据通信,基于GRPC和RDMA两种通信方式
    • 设备层:提供多种异构设备的支持,如CPU GPU TPU FPGA等

大体流程

  • 图构建:用户在client中基于TensorFlow的多语言编程接口,添加算子,完成计算图的构造。
  • 图传递:client开启session,通过它建立和master之间的连接。执行session.run()时,将构造好的graph序列化为graphDef后,以protobuf的格式传递给master。
  • 图剪枝:master根据session.run()传递的fetches和feeds列表,反向遍历全图full graph,实施剪枝,得到最小依赖子图
  • 图分裂:master将最小子图分裂为多个Graph Partition,并注册到多个worker上。一个worker对应一个Graph Partition。
  • 图二次分裂:worker根据当前可用硬件资源,如CPU GPU,将Graph Partition按照op算子设备约束规范(例如tf.device(’/cpu:0’),二次分裂到不同设备上。每个计算设备对应一个Graph Partition。
  • 图运行:对于每一个计算设备,worker依照op在kernel中的实现,完成op的运算。设备间数据通信可以使用send/recv节点,而worker间通信,则使用GRPC或RDMA协议。

matplotlib.pyplot 的使用:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt 
fig = plt.figure()
...
...
plt.plot()
fig.savefig("")

reference

google group, kl 散度 讨论

KL Divergence in TensorFlow