本篇主要介绍TF的分布式运行时的基本概念.为了对TF的分布式运行机制有一个大致的了解,我们先结合/tensorflow/core/protobuf中的文件给出对TF分布式集群的初步理解,然后介绍/tensorflow/core/distributed_runtime路径下的核心概念. TF分布式集群 集群定义和理解 在研读TF的分布式运行时代码之前,我们需要先看下TF分布式运行的基本架构.TF的集群(cluster)由作业(job)构成,作业由任务(task)构成.举个例子,一个由两个作业构成的…
文章索引 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是独一无…
把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调用的状态信息.它会在一个节点已经准备好之后调度…
把common_runtime中剩余的内容,按照文件名排序进行了简单的解析,时间原因写的很仓促,算是占个坑,后续有了新的理解再来补充. allocator_retry 有时候内存分配不可能一次完成,为了在内存分配失败时能够不断尝试,TF给出了一个在内存分配多次尝试的接口: class AllocatorRetry { public: AllocatorRetry(); void* AllocateRaw(std::function<void*(size_t alignment, size_t n…
目录 什么是op op_def定义 op注册 op构建与注册辅助结构 op重写 关系图 涉及的文件 迭代记录 1. 什么是op op和kernel是TF框架中最重要的两个概念,如果一定要做一个类比的话,可以认为op相当于函数声明,kernel相当于函数实现.举个例子,对于矩阵相乘,我可以声明一个op叫做MatMul,指明它的名称,输入,输出,参数,以及对参数的限制等.op只是告诉我们,这个操作的目的是什么,操作内部有哪些可定制的东西,但不会提供具体实现.操作在某种设备上的具体实现方法,是由ker…
Session概述 1. Session是TensorFlow前后端连接的桥梁.用户利用session使得client能够与master的执行引擎建立连接,并通过session.run()来触发一次计算.它建立了一套上下文环境,封装了operation计算以及tensor求值的环境. 2. session创建时,系统会分配一些资源,比如graph引用.要连接的计算引擎的名称等.故计算完毕后,需要使用session.close()关闭session,避免引起内存泄漏,特别是graph无法释放的问题…