在哪个网站可以自助建站免费广州seo
TPU-MLIR 项目源码结构分析
本文用作学习记录和交流分享,主要内容为 TPU-MLIR 的源码框架分析和构建流程分析。源码地址:https://github.com/sophgo/tpu-mlir
文件结构
从最外层开始分析
envsetup.sh 该脚本用于配置和初始化开发环境,其中对路径等环境变量进行设置,自定义了一些函数等操作。
build.sh 该脚本负责工程的构建,以及构建前的准备工作。
unittests 路径下存放的是单元测试集,包含以下内容:Backend,Linalg,Support,Target
tools 其中主要是开发和调试过程中可能用到的辅助工具
third_party 是依赖的一些第三方库:
- CV18xx:CV18xx 芯片相关的一些库文件;
- atomic_exec:其中包含一些链接需要的 .so 动态链接库文件;
- cnpy:该项目是让 C++ 文件能够读写 .npy 文件,例如权重相关就使用该类型文件存储;
- customlayer:其中主要和模型框架转换有关;
- nntoolchain:算能的深度学习工具链;
- or-tools:OR-Tools 是一个用于进行优化的开源软件套件,经过调整,可解决车辆路线、数据流、整数和线性编程以及约束编程方面到问题;
- ppl:应该也是一个算能的工具;
- progressbar:一个非常简单、完全可定制的、用于 C++ 循环的进度条(带百分比)。
regression 中是一些用于回归的测试的数据集等
python 该路径下有很多 Python 脚本文件,而且通过目录中的 CMakeLists 文件分析得出,这部分代码主要是关于连接 C++ 代码实现和 Python 脚本调用的。最后暴露给用户的都是 Python 脚本,以便于用户使用。用户主要使用的 model_transform.py
,model_deploy.py
,model_deploy.py
等 python 脚本也存放在该目录中。
lib 该目录中存放的是 TPU-MLIR 的核心 C++ 实现源码,有以下关键内容:
- Interfaces:定义接口相关的模块。
- Traits:定义与类型特征或属性相关的模块。
- Dialect:定义 MLIR 方言的模块包含 TOP 和 TPU。
- Support:提供各种工具或支持功能。
- Conversion:包含将操作或方言转换成其他形式的代码。
- Backend:与后端硬件或执行环境相关的模块。
- Builder:关于构建 TPU 最终运行的 bmodel 文件。
- CAPI:C++ API 与 Python 脚本建立关联相关。
include 其中为对应 lib 中实现的模块的头文件,以供其他模块调用,TOP 和 TPU 这两个 Dialect 的关键实现也存放在这里:include/tpu_mlir/Dialect/Top/IR/TopOps.td ,include/tpu_mlir/Dialect/Tpu/IR/TpuOps.td
ignore 存放一些没有实际使用到但可供参考的文件,有一些开发日志之类的文档。
experimental 应该是一些尚处于试验或开发阶段的功能和模块。
docker 项目依赖一些 Docker 环境配置。
capi 该路径下存放了 https://github.com/sophgo/tpu-mlir/blob/master/capi/runtime_cpu.c 是一个C语言实现的从输入文件读取数据,将其传递给模型进行推理,然后将推理结果写入输出文件。但是从 CMake 文件分析,该 .c 文件并没有实际参与编译,推测是一个示例代码。
bindings 其中主要是通过 PyBind11 将 C++ 中的功能实现暴露给 Python,方便用户调用。
以上内容,均为个人分析推测,使用AI工具辅助,不是官方解释。如有分析错误或不足的地方,欢迎指正交流。
Refer:
- https://github.com/sophgo/tpu-mlir
- https://onnx.ai/onnx-mlir/