Tensorflow源码解析1 -- 内核架构和源码结构 (2)

TensorFlow提供了很多种语言的前端接口,使得用户可以通过多种语言来完成模型的训练和推断。其中Python支持得最好。这也是TensorFlow之所以受欢迎的一大原因。前端多语言是怎么实现的呢?这要归功于swig包装器。

swig是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。在TensorFlow使用bazel编译时,swig会生成两个wrapper文件

pywrap_tensorflow_internal.py:对接上层Python调用

pywrap_tensorflow_internal.cc:对接底层C API调用。

pywrap_tensorflow_internal.py 模块被导入时,会加载_pywrap_tensorflow_internal.so动态链接库,它里面包含了所有运行时接口的符号。而pywrap_tensorflow_internal.cc中,则注册了一个函数符号表,实现Python接口和C接口的映射。运行时,就可以通过映射表,找到Python接口在C层的实现了。

Tensorflow源码解析1 -- 内核架构和源码结构

4 tensorflow 源码结构

TensorFlow源码基本也是按照框架分层来组织文件的。如下

Tensorflow源码解析1 -- 内核架构和源码结构

其中core为tf的核心,它的源码结构如下

Tensorflow源码解析1 -- 内核架构和源码结构

5 总结

TensorFlow框架设计精巧,代码量也很大,我们可以从以下部分逐步学习

TensorFlow内核架构和源码结构。先从全局上对框架进行理解。

前后端连接的桥梁--Session,重点理解session的生命周期,并通过相关源码可以加深理解Python前端如何调用底层C实现。

TensorFlow核心对象—Graph。图graph是TensorFlow最核心的对象,基本都是围绕着它来进行的。graph的节点为算子operation,边为数据tensor。

TensorFlow图的节点 -- Operation。operation是图graph的节点,承载了计算算子。

TensorFlow图的边 -- Tensor。Tensor是图graph的边,承载了计算的数据。

TensorFlow本地运行时。

TensorFlow分布式运行时。和本地运行时有一些共用的接口,但区别也很大。

TensorFlow设备层。主要了解设备层的定义规范,以及实现。

TensorFlow队列和并行运算。

TensorFlow断点检查checkpoint,模型保存Saver,以及可视化tensorboard。这三个为TensorFlow主要的工具。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzdfjj.html