北京 | 深度学习与人工智能研修

12月23-24日

再设经典课程 重温深度学习
阅读全文
>

作者:刘光聪 ,中兴通讯高级系统架构师,专注机器学习算法,分布式系统架构与优化。

正文共2598个字 7张图,预计阅读时间7分钟。

Client是TensorFlow系统中的重要组件。Client负责计算图的构造,并通过Session为桥梁,连接TensorFlow后端的「运行时」,启动计算图的执行过程。

TensorFlow的前端是一个支持多语言的编程环境,支持Client使用多语言构造计算图。本文通过Session创建过程为例,揭示前端Python与后端C/C++系统实现的通道。

系统架构


TensorFlow的系统结构以C API为界,将整个系统分为「前端」和「后端」两个子系统:

  • 前端系统:提供编程模型,负责构造计算图;

  • 后端系统:提供运行时环境,负责执行计算图。

系统架构

Swig:幕后英雄


TensorFlow使用Bazel的构建工具,在编译之前启动Swig的代码生成过程。首先,Swig通过tf_session.i自动生成了两个文件:

  • pywrap_tensorflow.py: 负责对接上层Python调用;

  • pywrap_tensorflow.cpp: 负责对接下层C实现。

此外,pywrap_tensorflow.py模块首次被加载时,自动地加载_pywrap_tensorflow.so的动态链接库。从而实现了pywrap_tensorflow.py到pywrap_tensorflow.cpp的函数调用关系。

在pywrap_tensorflow.cpp的实现中,静态注册了一个函数符号表。在运行时,按照Python的函数名称,匹配找到对应的C函数实现,最终转调到c_api.c的具体实现。

Swig代码生成器

编程接口:Python


当Client要启动计算图的执行过程时,先创建了一个Session实例,进而调用父类BaseSession的构造函数。

# tensorflow/python/client/session.py
class Session(BaseSession):  def __init__(self, target='', graph=None, config=None):    super(Session, self).__init__(target, graph, config=config)
   # ignoring others

在BaseSession的构造函数中,将调用pywrap_tensorflow模块中的函数。其中,pywrap_tensorflow模块自动由Swig生成。

# tensorflow/python/client/session.py
from tensorflow.python import pywrap_tensorflow as tf_session
class BaseSession(SessionInterface):  def __init__(self, target='', graph=None, config=None):    self._session = None    opts = tf_session.TF_NewSessionOptions(target=self._target, config=config)
   try:
     with errors.raise_exception_on_not_ok_status() as status:        self._session = tf_session.TF_NewDeprecatedSession(opts, status)
   finally:      tf_session.TF_DeleteSessionOptions(opts)

# ignoring others

生成代码


在pywrap_tensorflow模块中,通过_pywrap_tensorflow将在_pywrap_tensorflow.so中调用对应的C++函数实现。

# tensorflow/bazel-bin/tensorflow/python/pywrap_tensorflow.py

def TF_NewDeprecatedSession(arg1, status):

return _pywrap_tensorflow.TF_NewDeprecatedSession(arg1, status)

在pywrap_tensorflow.cpp的具体实现中,它静态注册了函数调用的符号表,实现Python的函数名称到C++实现函数的具体映射。

// tensorflow/bazel-bin/tensorflow/python/pywrap_tensorflow.cpp
static PyMethodDef SwigMethods[] = {    ...     {"TF_NewDeprecatedSession", _wrap_TF_NewDeprecatedSession, METH_VARARGS, NULL}, } PyObject *_wrap_TF_NewDeprecatedSession(  PyObject *self, PyObject *args) {  TF_SessionOptions* arg1 = ...  TF_Status* arg2 = ...  TF_DeprecatedSession* result = TF_NewDeprecatedSession(arg1, arg2);
 // ignoring others implements

}

最终,自动生成的pywrap_tensorflow.cpp仅仅负责函数调用的转发,最终将调用底层C系统向上提供的API接口。

CAPI


c_api.h是TensorFlow的后端执行系统面向前端开放的公共API接口之一,自此将进入TensorFlow后端系统的浩瀚天空。

// tensorflow/c/c_api.c
TF_DeprecatedSession* TF_NewDeprecatedSession(
 const TF_SessionOptions*, TF_Status* status) {  Session* session;  status->status = NewSession(opt->options, &session);
   if (status->status.ok()) {
       return new TF_DeprecatedSession({session});  } else {
   return NULL;  } }

查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org

请关注人工智能LeadAI公众号,查看更多专业文章

大家都在看


LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础


点击“阅读原文”直接打开报名链接

刘光聪 | TensorFlow:揭示多语言编程的奥秘相关推荐

  1. c语言delay_C语言编程制作“古怪手电筒”,有光的时候就会亮,没光绝不会亮...

    最近重温经典喜剧电影时,发现下面这么一幕: 达文西发明了一个"古怪手电筒","在有光的时候就会亮,在没有光的情况下绝对不会亮!" 这种手电筒是怎么制作的呢,我们 ...

  2. c++与fortran混合语言编程中动态链接库的调用,[转载]C++与Fortran混合语言编程中动态连接库的调用...

    摘 要:介绍了C++和Fortran 90混合语言编程中,在C++中调用Fortran动态连接库(DLL,Dynamic Link Library)的方法以及参量传递.函数调用等的方法. 关键词:混合 ...

  3. 单片机c语言编程入门下載,系列单片机C语言编程入门.pdf

    系列单片机C语言编程入门.pdf 本文由c h e n j u n j u n j u n 3贡献 p d f 文档可能在WAP端浏览体验不佳.建议您优先选择TXT,或下载源文件到本机 查看. 维普资 ...

  4. 基于DSP的数字振荡器C语言编程,基于DSP的数字振荡器的设计与实现.pdf

    1 基于 DSP 的数字振荡器的设计与实现 基于 DSP 的数字振荡器的设计与实现 黄福莹 陈华 徐金隆 广西大学计算机与电子信息学院 南宁 530004 摘要 摘要 本文阐述了一种基于 DSP 芯片 ...

  5. SPI初始化C语言编程,SD卡spi模式读写,初始化和复位都成功了

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:SD卡spi模式读写,初始化和复位都成功了 问题详情:我用的是内存卡 12M的!有知道是怎么回事的吗?是写入数回答:应该还得格式化, ...

  6. 《C语言解惑》—— 第一篇 C语言编程中的对与错

    本节书摘来自华章出版社<C语言解惑>一 书中的第1章,第1.1节,作者:刘振安 刘燕君,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 C语言编程中的对 ...

  7. c语言delay_利用C语言编程单片机,制作可以根据环境光照调整亮度的智能灯

    上一节,我们利用C语言编程单片机仿制了达文西的"古怪手电筒",达成了"在有光的时候就会亮,在没有光的情况下绝对不会亮!"的目标. 其实在此基础上,C语言还能做些 ...

  8. c++头文件_51单片机C语言编程知多少:几人不知头文件,你要的干货在这里了

    近期写了一些比较大的单片机程序,找了很多参考资料,看了大量别人的程序.我从中发现了自己对于C语言编程还只是知道如何实现功能,但对编程规范掌握的不好,编程习惯也没有很好的养成. 学了这么久的单片机,还真 ...

  9. vc6下usb编程_5款免费的C/C++语言编程器

    C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计.目前,C/C++语言十分热门.今天小编准 ...

最新文章

  1. python使用matplotlib可视化条形图、使用barh函数可视化条形图(使用barh函数可视化多分类的并行条形图、side by side)
  2. 文件上传(上传至独立的文件服务器)
  3. web浏览器_你最常用的web测试-浏览器兼容性测试
  4. 配置kubernetes服务basic auth
  5. ubuntu adb
  6. 一步一步学习 iOS 6 编程(第四版)正式发布!
  7. python interactive slider_python3----练习题(过滑块验证)
  8. 2019web前端全新面试题库 一
  9. linux虚拟用户登录失败,用shell用户或虚拟用户登录pureftpd
  10. php操作memcache的使用测试总结
  11. 3.前端下载excel文件功能的三种方法
  12. ubuntu18.04环境系安装指定版本gitlab-ce
  13. Java构建指定大小文件
  14. 物流广告收入实现高速增长 国际投行看好京东转型潜力
  15. 目前总结最新最系统的Java程序员未来职业规划路线,请收藏
  16. android studio 中要在app名称中添加特殊符号
  17. 基于linux 的 PCI PCIe 总线分析总结
  18. 麦克马斯特计算机工程专业,麦克马斯特大学计算机专业成功录取
  19. devicemapper介绍
  20. L1和L2简单易懂的理解

热门文章

  1. 鸿蒙系统深度解析,深度解析鸿蒙内核最重要的结构体
  2. 查看代码 index.html,Javascript查看大图功能代码实现
  3. 事务不在活跃oracle,MYSQL性能优化笔记_2
  4. php 读写远程文件内容,php获取远程文件内容的函数
  5. Myeclipse10 整合SSH过程(巨详细!!!)及出错笔记
  6. python矩阵操作_Python中的矩阵操作
  7. axios post封装对象到后端_axios 使用post方式传递参数,后端接受不到
  8. android9谷歌推送,谷歌Android 9.0系统将统一推送以改善更新碎片化
  9. java web类名_带有Java的Selenium Webdriver:使用一个命令定位具有多个类名的元素
  10. basler相机的触发线是那两脚_车牌相机是怎么和LED屏联动的?