啥是TensorFlow

目录

一.参考资料

二.TensorFlow中使用的语言

2.1 Starlark

2.2 MLIR

2.2.1 MLIR的官方介绍

2.2.2 TPU是Google研发的一款计算芯片

三. TensorFlow跑分

四. TensorFlow架构


一.参考资料

github地址: https://github.com/tensorflow/tensorflow

 

二.TensorFlow中使用的语言

2.1 Starlark

https://blog.bazel.build/2017/03/21/design-of-skylark.html

starlark原名叫skylark,项目地址:

https://github.com/bazelbuild/starlark

改名原因见https://github.com/google/skylark最后一行:

Skylark是Bazel项目的代号,因此Bazel团队把这门语言命名为Starlark,来反映其适用于和Bazel无关的项目。

 

2.2 MLIR

MLIR全称 Multi-Level Intermediate Representation

参考https://www.c4ml.org/中的MLIR Talk。

2019年2月17日

2020年

github项目地址https://github.com/tensorflow/mlir

最新进展是mlir已加入到LLVM项目中。

关于编译器IR(中间表示)的概念,参考资料:

https://blog.csdn.net/SHU15121856/article/details/104711426

https://www.sohu.com/a/191605477_473283

2.2.1 MLIR的官方介绍

https://tensorflow.google.cn/mlir/overview

MLIR受到LLVM很深的影响,并且毫不掩饰的重用了其中的很多理念。一个合并了多层抽象在一个编译单元的可扩展类型的系统,并且允许表示,分析,转换图形。这些抽象包括TensorFlow的操作,嵌套的多面循环区域,甚至LLVM指令以及固定的硬件操作和类型。

MLIR的受众:

  1. 指望优化机器学习模型的性能和内存消耗的编译器研究人员和开发人员。

  2. 正在寻找将硬件连接到TensorFlow方法的硬件制造商,如TPUs,手机中的便携神经硬件,以及其他自定义的专用大规模集成电路(ASIC)。

  3. 希望利用编译优化和硬件加速的语言开发人员。

 

2.2.2 TPU是Google研发的一款计算芯片

参考了如下两篇文章

http://www.elecfans.com/d/776906.html

https://zhuanlan.zhihu.com/p/101550272

TPU1.0仅支持推理 AlphoGo Lee

TPU2.0 训练+推理 柯杰

 

https://zhuanlan.zhihu.com/p/147467116

Matrix Multiply Unit

 

目前主要产品有TPUv1、TPUv2、TPUv3以及Edge TPU. 其中云端芯片TPUv1-v3不对外发售,仅提供相应云计算服务,Edge TPU用于边缘侧推理,对外销售相关开发套件。

Edge TPU 相关资料:https://blog.csdn.net/qq_30803353/article/details/94203076

 

三. TensorFlow跑分

人工智能领域日新月异,18年的跑分仅供参考。

https://blog.csdn.net/u013510838/article/details/84103503

 

四. TensorFlow架构

 

https://www.jianshu.com/p/a5574ebcdeab

OP:所谓op就是operation,“操作”的意思。在tensorflow中op不仅包括加、减、乘、除等所有计算方式,同时也包括常量定义、变量定义、占位符定义等等。例如tf.constant(),tf.add(),tf.mul()等等都是op,都要通过session运行,才能得到结果。

Client:TensorFlow通过Session为桥梁,连接Client后端的分布式Runtime,并启动计算图的执行过程。

Distributed Master:在分布式Runtime中,根据Session.run的Fetching参数,从计算图中反向遍历,找到所依赖的最小子图;再将子图分裂为多个子图片段,以便分布式运行;最后将子图片段发给Worker Service,由Worker Service启动子图片段的执行过程。

Worker Service:对于每一个任务,TensorFlow都将启动一个Worker Service。Worker Service 将按照计算图中节点之间的依赖关系,根据当前的可用的硬件环境(GPU/CPU)调用OP的Kernel完成运算。

主要实现3个方面的功能:

  1. 处理来自Master的请求。

  2. 调度OP的Kernel。尽最大可能利用多CPU/GPU的处理能力。

  3. 协同任务中的数据通信。

根据设备类型,对于设备间的SEND/RECV节点进行特化实现:

使用cudaMemcpyAsync的API实现本地CPU和GPU设备的数据传输。

对于 本地的GPU之间则使用端到端的DMA,避免了跨host CPU的昂贵的拷贝过程。

任务之间的数据传递,TensorFlow支持如gRPC over TCP, RDMA over Converged Ethernet。

Kernel:

其中,大多数Kernle基于Eigen::Tensor实现。Eigen::Tensor是一个使用C++模板技术,为多核CPU/GPU生成高效的并发代码。但是,TensorFlow也可以灵活地直接使用cuDNN实现更高效的Kernel。此外,TensorFlow实现了矢量化技术,使得在移动设备,及其满足高吞吐量,以数据为中心的应用需求,实现更高效的推理。如果对于复合OP的子计算过程很难表示,或执行效率低下,TensorFlow甚至支持更高效的Kernel实现的注册,其扩展性表现相当优越。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值