文章目录

  • TensorFlow 优势
  • TensorFlow发展历程
  • TensorFlow设计目标
    • 灵活通用
    • 云端结合
    • 高性能
  • 基本架构
    • 工作形态
    • 基本框架

TensorFlow 优势

  1. 运算性能高。TensorFlow1.0加入线性代数编译器XLA,它可以帮助TensorFlow在CPU, GPU, TPU, 以及嵌入式设备等平台上更快速地运行机器学习模型。TensorFlow提供了大量针对不同软硬件环境的优化配置参数。
  2. 通用化框架。TensorFlow最初用于机器学习和深度神经网络方面的研究。但是其灵活的设计也可用于其他领域。同时TensorFlow提供high level wrapper:Slim, Keras, TF Layers等,也提供底层原生API,可以实现更灵活且高效的分布式并行模式。
  3. 支持生产环境部署。注,这一点不太能够体会到。
  4. 语言接口丰富。TensorFlow核心层由C++实现,应用层使用SWIG等技术封装,提供了多语言API支持:Python, C, C++, Java, Go等。同时还有非官方的语言支持:Node.js, Julia, R。
  5. 端云协同计算。TensorFlow同时支持云侧和端侧运行。在云侧,它提供多种并行模式和编译优化等技术,以提升算法模型的运算性能。在端侧,他提供轻量级部署和8bit压缩等技术,以提升计算和存储资源利用效率。

TensorFlow发展历程

2017年2月,Google发布了TensorFlow 1.0.0,该版本标志着TF已经初步成熟并支持生产环境部署。TF 1.0.0作为第一个正式版本,加入了许多关键特性:

  1. 线性代数编译器XLA,一定程度上解决了内存消耗大、计算速度慢的问题;
  2. 命令行调测工具TF Debugger,初步解决了算法模型调测困难的问题;
  3. Android支持,能够将TF模型部署到移动设备上;

2017年4月,TensorFlow 1.1.0整合了Keras 2到tf.contrib.keras,Keras是一套类似于TF Slim的high level wrapper。但是Keras不能实现所有TF功能,例如分布式运行、灵活的计算模式等,需要利用TF原生API实现。

2017年7月,TensorFlow 1.2.0加入了RDMA支持,有效解决了大规模分布式训练的通信瓶颈。相较于TCP/IP通信,RDMA能够减少一半的网络通信开销。

2017年8月,TensorFlow1.3.0允许用户使用新增的Estimator库,以开箱即用的方式快速实现了深度神经网络分类器深度神经网络回归器线性分类器、以及深度神经网络和线性混合分类器。同时,默认使用cuDNN6,进一步提升了GPU上的运算性能。

2017年11月,TensorFlow 1.4.0新增了tf.data模块,为数据读入和处理提供了便捷高效的解决方案。同时,增强了Estimator的能力,使其能够支持简单的分布式模型训练和评估。

以上都是《深入了解TensorFlow》中的TF发展例程,到今天我写此Blog时,Google已经推出了TensorFlow 2.5.0,TF v2的编程范式相较于v1有了较大的变化,但是由于我看的一些论文源码还是基于TF v1,因此重新拜读此书,以方便理解old paper’s code。想深入了解TF v2的同志,可以参考《Learn TensorFlow 2.0: Implement Machine Learning and Deep Learning Models with Python》。

TensorFlow设计目标

TensorFlow的设计目标并非局限于一套深度学习库,而是面向多种应用场景和编程范式、支持异构计算平台、具有优异性能和可伸缩性的通用AI Engine。

灵活通用

  1. 算子(Operator)定义。TF提供的算子粒度更细,数量更多,能够支撑上层灵活多变的算法和模型。很多Traditional ML method也可以基于TF实现,如SVM, DT,RF等。TF对于新算子的支持也足够灵活,允许用户通过组合已有operators来构造new operator。此外,可以使用C++和CUDA等底层函数库实现新的算子并在Runtime动态加载使用,以满足专用算法需求并保持高效率。
  2. 编程范式。TF支持声明式编程,将模型的定义和执行解耦。模型以数据流图结构表示,经过编译和优化之后才会执行。以数据流图抽象为核心的设计在保证模型执行效率的同时,使得编程更加灵活。例如:通过添加控制依赖边(?)来制定算子执行顺序;通过添加自定义变量管理数据流图的输入输出;通过队列控制多设备间的数据传输和子图执行时序;
  3. Runtime框架。TF在具备隐式并行计算能力的同时,还提供细粒度显式控制接口,允许灵活地控制模型在多节点易购设备商分布式执行。用户在编写DL Model时,可以自由将模型中的每个算子绑定到任意的计算设备上。TF Runtime负责将模型对应的数据流图按照设备进行切分,并自动插入必要的通信操作。
  4. 多语言支持。之前已经提到,这里不做赘述。

云端结合

云计算和大数据技术以集约化的资源管理、动态弹性的资源供给,为持续膨胀的应用提供了高水平、可伸缩的算力,同时降低了服务提供者的准入门槛。因此,传统服务器端软件必须适用云化部署场景,以水平扩展、无状态、微服务等方式构建高内聚、低耦合的系统架构。

随着以智能手机为代表的移动终端的高速普及,以及IOT,ROBOT等智能化技术的不断渗透,用户对于data privacy and security逐渐重视,应用场景对于服务的实时性和可用性要求愈发严苛。

在这些背景下,算力边缘化和云化同样重要的。因此,提供服务的软件需要适应体系结构多样、计算资源有限,功耗受到制约的终端硬件环境,并具有一定的自治和协作能力。
TensorFlow在云侧的优势主要体现在:

  1. 提供多种标准化installler, construct scripts and container,支持在不同Linux发行版(Ubuntu, RedHat, Centos等)以及Windows Server等操作系统上部署。既允许以二进制包方式快速安装,也允许对特定环境编译安装。
  2. 支持对接多种常用的公有云和私有云服务,并为对接其他类似服务预留可扩展设计。
  3. 兼容常见的高性能计算和通信硬件,能够有效利用云环境的既有投资并提升应用软件对高端硬件资源的利用率。支持NVIDIA GPU,cuDNN,支持RDMA网络协议,能够充分发挥InfiniBand等高速网络设备的带宽潜力。

TensorFlow在端侧的优势主要体现在:

  1. 推理态代码能够运行于多种主流终端平台,包括Android, iOS, ARM Linux等等,为形态多样的终端设备提供AI认知和决策能力支持。
  2. 通过XLA AOT(ahead-of-time)编译技术及其他软硬件解耦技术,显著地简化底层异构计算设备的对接方式,实现对神经网络芯片等新型ASIC硬件的快速支持能力。
  3. 提供量化参数和低精度代数等算法层即使,适配算力、存储和功能受限终端,从而实现低端边缘设备的智能化。
  4. 提供模型和框架一体化的精简版Runtime(?),具备完全的OFFLINE能力,有助于实现端侧计算的私密性和实时性。

高性能

硬件设计者正在广泛采纳新型器件、三维电路、应用定制、众核并行等多元化思路满足应用不断增长的算力需求,这位软件开发者提供了机会以及挑战。如何将软件架构和算法有效适配到硬件体系结构、充分利用硬件资源发挥其设计性能,称为基础平台层软件开发者所面临的重要问题。

TF的高性能设计首先体现在他对高端和ASIC的深入支持。TF将英伟达显卡作为训练态的硬件加速器,同时兼顾OPENCL GPU设备。Google工程师基于CUDA Driver API实现了控制细粒度更细、并行性能更优的StreamExecutor异构计算库,并对cuBLAS、cuDNN等库的函数变种进行了精确适配。在推理态上,TF的开放性设计已经促使多家芯片厂家实现了对接,这为智能化定制设备提供了保障。据我所者,HUAWEI的Ascend芯片,也是支持TensorFlow的,同时他们自行开发的MindSpore框架和TensorFlow也比较相似。针对高性能计算环境中常用的InfiniBand, RoCE等高速网络设备,以及NVLink等片间高速互联技术,TF引入了RDMA、NCCL等协议,较好地解决了多终端通信时延问题,推进了分布式计算作业。

系统层的优化技术是TF性能提升的重要来源。XLA这种融合了编译器设计理论的优化框架就是非常典型的例子。它引入JIT编译机制,能够在数据流图运行过程中实时创建二进制代码,将其中大量细粒度操作抽象为少量粗粒度的专用核函数,从而减少图中operations执行时的内存分配和上下文切换开销,极大地提升了计算速度。(注,一般利用GPU运行CUDA代码时会存在上下文启动,但是上下文切换是什么?)

算法层的优化设计也是TF高性能不可或缺的组成部分。TF采用自顶向下,全栈优化的思路,而operator便是贯穿上下层的核心要素。在DL model中,the logic of each operator都可以采用多种方式实现。为此,TF内置了多种优化后的基础算子和模型组件。以图像领域最常见的卷积算子,cuDNN提供了Winograd等8中算法。针对不同的输入数据大小,卷积计算超参数以及内存等资源限制,TF会为每个卷积操作选择最快的实现方案。针对RNN等模型,TF也支持Fold解决方案,是的动态批处理成为可能,极大提高了模型的计算速度。

基本架构

工作形态

在众多平台设计模式中,存在两类基础模式库模式框架模式

  1. 库模式
    平台层软件以静态或动态的开发库形式存在(Linux系统即.a & .so文件)。应用层开发者需要编写程序调用这些库提供的API。典型的库模式如:Eigen, Numpy,MPI,ZereMQ等。基于这些库开发应用时,编程方式比较灵活,部署模式轻量化。
  2. 框架模式
    平台层软件以可执行文件的形式存在,并以前端交互式程序或者后端守护进程方式独立运行。应用层开发者需遵守从平台规定的接口约束,开发包含计算逻辑在内的子程序,交由平台层软件调度执行。程序的入口以及整体流程控制权由框架把握。典型的框架模式如:Hadoop, Spark, 基于SQL的数据库等。开发者工作相对轻松,只需要编写与业务逻辑密切相关的算法代码,不用关心Runtime机制的复杂性。

TensorFlow是采用的库模式,以便于与各种既有的框架协同工作,不对软件的Runtime组件添加新的约束,应用范围不受制约。除了依赖最基本的编程语言库和操作系统调用之外,TF可以和其他环境因素解耦,从而实现高度可移植性。

基本框架

构成TensorFlow的主体是Runtime核心库,即动态链接库文件。该核心库包括三个层次:分布式Runtime,公共Runtime和算子核函数。

公共Runtime:实现数据流图计算的基本逻辑;
分布式Runtime:在公共Runtime基础上,实现数据流图跨进程协同计算逻辑;
算子核函数:数据流图上具体Operations的代码实现。

TensorFlow核心库底层是各种计算库和通信库。这些库有的是外部组件(如Eigen),有的是作为源码集成在TF中(如StreamExecutor)。

《深入了解TensorFlow》笔记——Chapter 1th TensorFlow概述相关推荐

  1. 人工智能实践:TensorFlow笔记学习(一)—— 人工智能概述

    概  述 一. 基本概念  1.什么是人工智能  人工智能的概念:机器模拟人的意识和思维 重要人物:艾伦·麦席森·图灵(Alan Mathison Turing) 人物简介:1912年6月23日-19 ...

  2. tensorflow笔记:多层CNN代码分析

    tensorflow笔记系列:  (一) tensorflow笔记:流程,概念和简单代码注释  (二) tensorflow笔记:多层CNN代码分析  (三) tensorflow笔记:多层LSTM代 ...

  3. 中国大学MOOC-人工智能实践:Tensorflow笔记-课程笔记 Chapter6

    本篇博客为学习中国大学MOOC-人工智能实践:Tensorflow笔记课程时的个人笔记记录.具体课程情况可以点击链接查看.(这里推一波中国大学MOOC,很好的学习平台,质量高,种类全,想要学习的话很有 ...

  4. tensorflow笔记:流程,概念和简单代码注释

    tensorflow是google在2015年开源的深度学习框架,可以很方便的检验算法效果.这两天看了看官方的tutorial,极客学院的文档,以及综合tensorflow的源码,把自己的心得整理了一 ...

  5. 人工智能实践:TensorFlow笔记学习(八)—— 卷积神经网络实践

    大纲 7.1  复现已有的卷积神经网络 7.2  用vgg16实现图片识别 目标 掌握复现已有网络,用vgg16实现图片识别 7.1  复现已有的卷积神经网络 VGGNet是Karen simonya ...

  6. 人工智能实践:TensorFlow笔记学习(六)—— 全连接网络实践

    输入手写数字输出识别结果 大纲 6.1 输入手写数字图片输出识别结果 6.2 制作数据集 目标 1.实现断点续训 2.输入真实图片,输出预测结果 3.制作数据集,实现特定应用 6.1  输入手写数字图 ...

  7. 人工智能实践:TensorFlow笔记学习(五)—— 全连接网络基础

    MNIST数据集输出手写数字识别准确率 大纲 5.1 MNIST数据集 5.2 模块化搭建神经网络 5.3 手写数字识别准确率输出 目标 利用MNIST数据集巩固模块化搭建神经网路的八股,实践前向传播 ...

  8. 人工智能实践:TensorFlow笔记学习(四)—— 神经网络优化

    神经网络优化  大纲 4.1 损失函数 4.2 学习率 4.3 滑动平均 4.4 正则化 4.5 神经网络搭建八股 目标 掌握神经网络优化方法 4.1 损失函数 神经元模型:用数学公式表示为:,f为激 ...

  9. 人工智能实践:TensorFlow笔记学习(三)——TensorFlow框架

    搭建神经网络 大纲 3.1 张量.计算图.会话 3.2 前向传播 3.3 反向传播 目标 搭建神经网络,总结搭建八股 3.1 张量.计算图.会话 一.基本概念 基于Tensorflow的NN:用张量表 ...

最新文章

  1. 【计算摄影】计算机如何学会自动裁剪图片(自动构图)?
  2. java sql server 存储过程_修改SQL SERVER内置存储过程
  3. Fedora 13 的新特性
  4. PureMVC(AS3)剖析:吐槽
  5. 【IOI2018】会议【笛卡尔树】【dp】【线段树】
  6. 【学神】1-4 用户及用户组管理
  7. 微信公布朋友圈9月十大谣言 包括新型手机病毒出现等
  8. Python自然语言处理------分类和标注词汇
  9. 对话陆奇:用产品思维变革百度工程师文化,欣赏腾讯内部赛马机制
  10. mapreduce task与spark task对比
  11. 深度学习:什么是自编码器(Autoencoder)
  12. Python实现汉译英
  13. [无忧网络验证]代理使用教程
  14. 引导工业物联网变革 中国占据有利位置
  15. 懂中文就能学会的高薪职位,你猜对了吗?
  16. 计算机专业在经济社会的应用,计算机技术对社会发展的影响
  17. python uiautomator2控制手机点击_uiautomator2 python远程操作Android
  18. 2019全国大学生信息安全竞赛—Web
  19. 【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
  20. 再谈P2P技术:网络拓扑结构、核心技术分析

热门文章

  1. 20175308 实验三《敏捷开发与XP实践》
  2. 小菜狗探索新世界——第一篇博客
  3. 强烈推荐这款神器,把网站转pdf还能编程高级定制!【建议收藏】
  4. 【AUTOSAR】【信息安全】CSM
  5. How to fix corrupt HDFS FIles
  6. ArrayList的遍历方式与fail-fast
  7. 性能测试:个人和公司性能测试成长阶段
  8. 我的G1拯救记--2.1ROM刷写过程。
  9. IP报文格式及各字段意义
  10. liquibase介绍,liquibase这一篇就够了