Tensorflow 源码算子以及架构实现分析

本文参考源码来自于https://www.tensorflow.org/install/source

Tensorflow整体架构:

下载Tensorflow源码:

git clone https://github.com/tensorflow/tensorflow.git

下载完成后,可以看到,tensorflow目录结构如下:

caozilong@AwExdroid112:~/tensorflow$ tree -L 2 -d
.
├── tensorflow
│   ├── c
│   ├── cc
│   ├── compiler
│   ├── core
│   ├── distribute
│   ├── docs_src
│   ├── examples
│   ├── go
│   ├── java
│   ├── js
│   ├── lite
│   ├── python
│   ├── security
│   ├── stream_executor
│   └── tools
├── third_party
│   ├── absl
│   ├── android
│   ├── aws
│   ├── benchmark
│   ├── boringssl
│   ├── clang_toolchain
│   ├── clog
│   ├── compute_library
│   ├── cpuinfo
│   ├── dlpack
│   ├── eigen3
│   ├── farmhash
│   ├── fft2d
│   ├── flatbuffers
│   ├── FP16
│   ├── gemmlowp
│   ├── git
│   ├── googleapis
│   ├── gpus
│   ├── grpc
│   ├── hadoop
│   ├── hexagon
│   ├── highwayhash
│   ├── hwloc
│   ├── icu
│   ├── jpeg
│   ├── kissfft
│   ├── llvm
│   ├── llvm_openmp
│   ├── mkl
│   ├── mkl_dnn
│   ├── mlir
│   ├── mpi
│   ├── nasm
│   ├── nccl
│   ├── opencl_headers
│   ├── pasta
│   ├── protobuf
│   ├── psimd
│   ├── py
│   ├── python_runtime
│   ├── remote_config
│   ├── ruy
│   ├── sobol_data
│   ├── systemlibs
│   ├── tensorrt
│   ├── tf_runtime
│   └── vulkan_headers
└── tools

66 directories
caozilong@AwExdroid112:~/tensorflow$

算子实现集中分布在tensorflow/tensorflow/lite/kernels目录下:

caozilong@AwExdroid112:~/tensorflow/tensorflow/lite/kernels$ ls -l |grep test|wc -l
139
caozilong@AwExdroid112:~/tensorflow/tensorflow/lite/kernels$ ls -l |wc -l
298
caozilong@AwExdroid112:~/tensorflow/tensorflow/lite/kernels$ 

基本上,每个算子的实现都是一个独立文件,并且对应一个测试文件,基于这个假设(和实际相符),我们可以粗略统计一下算子的个数,就是

文件总数-test文件总数=298-139 = 159,也就是大概有160个算子,是否可以理解为160个算子基本能够满足所有网络的需求呢?我认为当前是的,基于的考虑是TF是一个比较全面的框架,至于未来则不一定,随着新的理论,论文,新的算法的进步,会有新的算法,新的算子出现,所以框架实现的算子也会发展,变化.

以常用的conv算子为例,简单分析一下它的实现:

对应的真正实现在 optimized_ops命名空间中的Conv函数,它在另一个文件中,我们找到它, 万恶的矩阵乘法,一眼能看明白的,肯定是数学系毕业的大佬。

补充:关于算子的个数,听芯原的一位大佬讲,当前它们实现了有130个算子,算子的增长比较缓慢,除非有新的论文,出现新的算法,但这个速度是很慢的,虽然比tensorflow的160多个少一些,但并不意味着VIP有缺失的算子,根据他的说法,VIP的算子建立在比tensorflow kernel更加抽象的层面上的,所以有的算子可以当多个算子用.基本上130多个已经很全了.


结束!

Guess you like

Origin blog.csdn.net/tugouxp/article/details/119773700