把common_runtime中剩余的内容,按照文件名排序进行了简单的解析,时间原因写的很仓促,算是占个坑,后续有了新的理解再来补充. allocator_retry 有时候内存分配不可能一次完成,为了在内存分配失败时能够不断尝试,TF给出了一个在内存分配多次尝试的接口: class AllocatorRetry { public: AllocatorRetry(); void* AllocateRaw(std::function<void*(size_t alignment, size_t n…
文章索引 framework解析 resource allocator tensor op node kernel graph device function shape_inference 拾遗 common_runtime解析 device session graph_optimizer executor-1 executor-2 direct_session 后记 关于起源 阅读tensorflow源码时,为了敦促自己主动思考,把阅读的笔记整理成了博客,拿出来跟大家分享. 关于迭代 文章都…
1 主流深度学习框架对比 当今的软件开发基本都是分层化和模块化的,应用层开发会基于框架层.比如开发Linux Driver会基于Linux kernel,开发Android app会基于Android Framework.深度学习也不例外,框架层为上层模型开发提供了强大的多语言接口.稳定的运行时.高效的算子,以及完备的通信层和设备层管理层.因此,各大公司早早的就开始了深度学习框架的研发,以便能占领市场.当前的框架有数十种之多,主流的如下(截止到2018年11月) 显然TensorFlow是独一无…
Session概述 1. Session是TensorFlow前后端连接的桥梁.用户利用session使得client能够与master的执行引擎建立连接,并通过session.run()来触发一次计算.它建立了一套上下文环境,封装了operation计算以及tensor求值的环境. 2. session创建时,系统会分配一些资源,比如graph引用.要连接的计算引擎的名称等.故计算完毕后,需要使用session.close()关闭session,避免引起内存泄漏,特别是graph无法释放的问题…
把framework中剩余的内容,按照文件名进行了简单解析.时间原因写的很仓促,算是占个坑,后面有了新的理解再来补充. allocation_description.proto 一个对单次内存分配结果进行信息描述的proto. attr_value 之前在讲op的时候提到过,操作是有参数的.而AttrValue表示的就是参数的值.先看一下它的proto定义: message AttrValue { message ListValue { repeated bytes s = 2; repeate…
目录 核心概念 executor.h Executor NewLocalExecutor ExecutorBarrier executor.cc structs GraphView ExecutorImpl ExecutorState details 1. 核心概念 执行器是TF的核心中的核心了,前面做了这么多的准备工作,最后要在这里集大成了,想想还有点小激动.不过笔者在这里先打个预防针,执行器的概念多.结构复杂,想要透彻理解并不容易,为了保持文章的易读性,我们也是尽量对细枝末节做了舍弃,以求反…
目录 什么是allocator 内存分配器的管理 内存分配追踪 其它结构 关系图 涉及的文件 迭代记录 1. 什么是allocator Allocator是所有内存分配器的基类,它定义了内存分配器需要实现的接口. class Allocator { public: //内存分配与返还 virtual void* AllocateRaw(size_t alignment, size_t num_bytes) = 0; virtual void DeallocateRaw(void* ptr) =…
目录 核心概念 executor.h Executor NewLocalExecutor ExecutorBarrier executor.cc structs GraphView ExecutorImpl ExecutorState details 3.4 ExecutorState 在执行器的执行图计算的时候,需要一个结构来保存当前计算的即时信息,TF为此设计了类ExecutorState,它被用来保存每一个对ExecutorImpl::Run调用的状态信息.它会在一个节点已经准备好之后调度…
本篇主要介绍TF的分布式运行时的基本概念.为了对TF的分布式运行机制有一个大致的了解,我们先结合/tensorflow/core/protobuf中的文件给出对TF分布式集群的初步理解,然后介绍/tensorflow/core/distributed_runtime路径下的核心概念. TF分布式集群 集群定义和理解 在研读TF的分布式运行时代码之前,我们需要先看下TF分布式运行的基本架构.TF的集群(cluster)由作业(job)构成,作业由任务(task)构成.举个例子,一个由两个作业构成的…
目录 什么是op op_def定义 op注册 op构建与注册辅助结构 op重写 关系图 涉及的文件 迭代记录 1. 什么是op op和kernel是TF框架中最重要的两个概念,如果一定要做一个类比的话,可以认为op相当于函数声明,kernel相当于函数实现.举个例子,对于矩阵相乘,我可以声明一个op叫做MatMul,指明它的名称,输入,输出,参数,以及对参数的限制等.op只是告诉我们,这个操作的目的是什么,操作内部有哪些可定制的东西,但不会提供具体实现.操作在某种设备上的具体实现方法,是由ker…
目录 核心概念 direct_session direct_session.h direct_session.cc 1. 核心概念 读过之前文章的读者应该还记得,session是一个执行代理.我们把计算图和输入交给session,由它来调度执行器,执行计算产生结果.TF给我们提供了一个最简单的执行器direction_session.按照当前的理解,我们觉得direction_session的实现应该是非常简单而直接的,毕竟执行器的复杂结构我们在executor那篇已经见到了.但实际上,问题的难…
目录 核心概念 session session_factory 1. 核心概念 session可以认为是一个执行代理.我们在客户端构建计算图,提供输入,然后把计算图丢给session去执行.因此,session应该具备一定的执行功能.另外TF还提供了session的工厂类,session_factory,用于产生session. 2. session session没有提供头文件声明,直接在session.cc文件中提供了实现,我们略去空实现,如下: Status Session::Run(co…
目录 什么是tensor tensor继承体系 与Eigen3库的关系 什么是tensor_reference tensor_shape tensor_slice 其它结构 关系图 涉及的文件 迭代记录 1. 什么是tensor TF全称叫做TensorFlow,可见tensor的重要性.它本质上是一个对高维数据的封装,提供了丰富的API.在线性代数中,我们常用向量.矩阵来表示数据,而在深度学习应用中,有对更高维数据的需求.比如在对图像进行处理时,彩色图像本身就带有三维的信息(长.宽.颜色通道)…
目录 什么是graph 图构建辅助函数 graph_transfer_info 关系图 涉及的文件 迭代记录 1. 什么是graph graph是TF计算设计的载体,如果拿TF代码的执行和Java代码执行相比,它相当于Java的字节码.关于graph的执行过程,我们在这里简单介绍一下.在graph构建完成,并进行了一些简单优化之后,会对图进行分割,实际上就是执行一个节点分配的过程,然后在各设备上分别对子图进行运行前的优化,最后调用各设备的执行器,调度运行运行子图.在node章节我们讲过,node…
目录 核心概念 graph_optimizer function optimization_registry 1. 核心概念 本篇主要讲图的优化迭代器.我们在构建原始图的时候,专注于达到目的,但不会去考虑图的执行效率.如果把图的设计过程比喻为高级语言的编写,那么图的优化过程就相当于,将高级语言编译为机器语言的过程中,为了能够加速进行的编译优化.比如,将相同的常数折叠,将Identity节点去除等等.本节主要用来讨论,跟图优化相关的类和函数. 2. graph_optimizer 进行图优化,需要…
目录 核心概念 device device_factory device_mgr device_set 1. 核心概念 在framework部分,我们介绍了DeviceAttributes和DeviceBase两个结构,这些其实是为了我们今天要介绍的Device类做准备的.感兴趣的读者可以去回顾下前面讲过的内容.Device类只是对DeviceBase类的继承,没有添加更多新的数据成员,但提供了Compute计算接口.DeviceSet是一个设备集合类,而DeviceMgr与DeviceSet的…
目录 什么是形状推断 InferenceContext 关系图 涉及的文件 迭代记录 1. 什么是形状推断 前面我们讲到op的时候,提到了操作的注册器OpRegistry,并且提到,其中注册的数据是一个结构OpRegistrationData,这个结构中除了OpDef之外,还包含了一个OpShapeInferenceFn,这个数据是做什么用的呢? 我们知道,op只是定义了操作的输入输出和参数,但并没有定义操作具体的输入形状,举个例子,MatMul操作,代表矩阵乘法,这只是一个抽象的表示,没有具体…
目录 什么是function FunctionDef 函数相关类 关系图 涉及的文件 迭代记录 1. 什么是function 在讲解function的概念之前,我们要先回顾下op.op是规定了输入和输出的操作声明,在研究node的时候我们也看到,NodeDef是包含OpDef的,那么是不是op就只能是节点级别的操作呢?并非如此,操作是可以嵌套的,也就是说,操作A可能内部包含了操作B.C.D.从这个角度理解function就容易了,function其实就是一些大的op.函数的本质是给定输入,经过计…
目录 什么是设备 设备属性描述 device_base 关系图 涉及的文件 迭代记录 1. 什么是设备 "设备"是一个很容易引起混淆的概念,在TF中,设备device专指能够执行实际计算的计算设备,比如CPU,GPU,SYNC设备等等.因此,一定要跟机器的概念区分开,一台机器可以包含多个设备. 2. 设备属性描述 对设备有了一个清晰的概念之后,我们看下TF为了描述设备属性准备的proto,DeviceAttributes: message DeviceAttributes { stri…
目录 什么是resource 如何使用resource 如何管理resource 常用resource 其它结构 关系图 涉及的文件 迭代记录 1. 什么是resource 我们知道,TF的计算是由设备完成的.每个设备包含若干个节点,由这些节点完成实际的计算.有些时候,我们需要在不同的节点之间,共享一些内容,比如,张量值,kv存储表,队列,读取器等等,这些被同设备上的节点共享的内容,就是资源. 所有的资源类都继承自一个基类,ResourceBase,下面看下它的实现: class Resourc…
目录 什么是node node_def 关系图 涉及的文件 迭代记录 1. 什么是node TF中的计算图由节点组成,每个节点包含了一个操作,表示这个节点的作用,比如,如果一个节点的作用是做矩阵乘法,那么它的输入是两个矩阵,输出是两个输入矩阵相乘的结果.节点是自带结构的,每个节点都包含了输入的来源,因此若干节点的集合就能无需其它信息的生成一张图.节点必须被放置在某一个设备上,为了减少跨设备传输数据,也为了提高计算效率,节点的放置是一个受限条件下的优化问题,为此TF还专门开发了相应的节点放置算法.…
[源码解析] TensorFlow 分布式环境(5) --- Session 目录 [源码解析] TensorFlow 分布式环境(5) --- Session 1. 概述 1.1 Session 分类 1.2 会话流程 1.2.1 MasterSession 生命周期 1.2.2 WorkerSession 生命周期 2. GrpcSession 2.1 定义 2.2 注册&工厂类 2.3 创建GrpcSession 2.4 创建MasterSession 2.4.1 GrpcRemoteMa…
[源码解析] TensorFlow 分布式之 MirroredStrategy 分发计算 目录 [源码解析] TensorFlow 分布式之 MirroredStrategy 分发计算 0x1. 运行 1.1 基类 Strategy 1.2 StrategyExtendedV1 1.3 MirroredExtended 0x2. mirrored_run 2.1 call_for_each_replica 2.2 建立线程 2.3 线程定义 0x3. Context 3.1 ensure_ini…
TF Prepare [图解tensorflow源码] 入门准备工作 [图解tensorflow源码] TF系统概述篇 Session篇 [图解tensorflow源码] Session::Run()流程图 (单机版) [图解tensorflow源码] Session::Run() 分布式版本 Graph 篇 [图解tensorflow源码] Graph 图模块 (UML视图) [图解tensorflow源码] Graph 图模块 —— Graph Loading [图解tensorflow源码…
[源码解析] TensorFlow 分布式环境(1) --- 总体架构 目录 [源码解析] TensorFlow 分布式环境(1) --- 总体架构 1. 总体架构 1.1 集群角度 1.1.1 概念 1.1.2 示意图 1.1.3 创建 1.1.3.1 创建集群 1.1.3.2 创建任务 1.1.3.3 指定设备 1.2 分布式角度 1.2.1 概念 1.2.2 示意图 1.3 系统角度 1.3.1 概念 1.3.2 示意图 1.4 图操作角度 1.5 通信角度 2. Server 2.1 接…
[源码解析] TensorFlow 分布式环境(2)---Master 静态逻辑 目录 [源码解析] TensorFlow 分布式环境(2)---Master 静态逻辑 1. 总述 2. 接口 2.1 接口规范 2.2 MasterInterface 2.3 调用 3. LocalMaster 3.1 定义 3.2 注册 3.3 查找 3.4 功能 4. GrpcRemoteMaster 4.1 定义 4.2 功能 4.2.1 CreateSession 4.2.2 Master Service…
[源码解析] TensorFlow 分布式环境(3)--- Worker 静态逻辑 目录 [源码解析] TensorFlow 分布式环境(3)--- Worker 静态逻辑 1. 继承关系 1.1 角色概念 1.2 接口 1.3 WorkerInterface 派生类 2. GrpcRemoteWorker 2.1 定义 2.2 生成 2.3 发送请求 3. Worker Service 3.3.1 WorkerInterface 3.3.2 概念梳理 3.3.4 WorkerInterface…
[源码解析] TensorFlow 分布式环境(6) --- Master 动态逻辑 目录 [源码解析] TensorFlow 分布式环境(6) --- Master 动态逻辑 1. GrpcSession 1.1 运行 1.2 GrpcRemoteMaster 2. Master 2.1 总体概述 2.2 建立 & 剪枝 2.2.1 建立计算图 2.2.2 剪枝 2.3 切分注册 2.2.1 原理 2.2.2 配置 2.2.3 切分 2.2.3.1 Partition 2.2.3.2 AddD…
[源码解析] TensorFlow 分布式环境(7) --- Worker 动态逻辑 目录 [源码解析] TensorFlow 分布式环境(7) --- Worker 动态逻辑 1. 概述 1.1 温故 1.2 知新 2. 注册子图 2.1 GrpcWorker 2.2 GraphMgr 2.2.1 定义 2.2.2 注册图 3. 运行子图 3.1 Service 3.2 GrpcWorker 3.3 GraphMgr 3.4 小结 4. 总结 0xFF 参考 前文中,Master 在流程之中先…
[源码解析] TensorFlow 分布式环境(8) --- 通信机制 目录 [源码解析] TensorFlow 分布式环境(8) --- 通信机制 1. 机制 1.1 消息标识符 1.1.1 定义 1.1.2 创建 1.2 Rendezvous 1.2.1 接口类 1.2.2 基础实现 Rendezvous 1.2.3 跨进程 RemoteRendezvous 1.2.4 BaseRemoteRendezvous 1.2.5 RpcRemoteRendezvous 1.3 管理类 1.3.1…