下面为记录人工智能推理加速过程,基于TVM
总体脉络:
- 1. TVM 安装
- 2. TVM 测试及使用
- 3. Auto TVM 使用
- 4. 编译导出 so/dll
- 5.在C++中调用生成的so/dll
零、什么是TVM
TVM是apache基金会开放的人工智能模型编译框架,由华人 陈天琦博士 初始开发。陈博士本科毕业于上海交大ACM班,有极深的计算机理论基础,有名的xgboost就是出自他手。
通常我们使用人工智能模型进行前向推理的方式是这样:
1. 训练模型
这一步骤对于广大炼丹师来说非常熟悉了,可以使用tensorflow或pytorch之类工具进行模型训练,得到模型文件(网络结构和参数)。
2. 使用推理引擎部署模型
推理一般我们可以使用上面提到的人工智能框架的前向推理功能进行处理。稍讲究一点的可以使用专用的人工智能推理框架,比如onnxruntime (ORT), NCNN (腾讯出品)等。 这种方式可以理解为解释方式(类比于python语言的解释运行方式)。在这一方式下,我们需要先加载模型,用通过的推理引擎创建网络结构并加载好网络参数,再将需要推理的数据输入模型,得到最后的推理结果。
另一种方式就是所谓的 JIT 方式, 类似java或其它带JIT的语言(如php 8.0) ,比如你可以直接在java中创建代码并调用tvm进行推理。 这种情况下TVM引擎没有完全发挥优化能力。
第三种方式,最复杂但是最高效的方式: TVM编译。 将推理引擎和模型编译优化成native code方式。你可以想象成自己写的一套函数,函数中已经硬编码了网络模型的参数,可以从整体上对整个模型加参数进行编译优化,得到最好性能的推理功能函数(算子和模型已经融为一体)
第三四方式: 在IOT设备上,可以使用裸金属方式,即不需要操作系统支持的程序下,生成推理库,只依赖c运行库,无需操作系统介入,适合IOT设备。
我们将一步一步引导 大家测试第二三种方式的使用,终极目标是在auto TVM基础上实现第三种方式。
Auto TVM 使用模板创建搜索空间来帮助我们进一步优化算法,以达到性能调优的目的。即auto-tunning。
auto-tuning分两个步骤:第一步定义搜索空间;第二步是运行搜索算法来探索这个空间。在本教程中,你可以了解如何在TVM中执行这两个步骤。下面通过矩阵乘法
展示auto-tuning的完整工作流程。
本文可能会涉及autoTVM实作手法。
一、TVM 安装
请参考 官方文档: https://tvm.apache.org/docs/install/index.html
在ubuntu 18.04下安装:
1. 安装基础环境
sudo apt-get update
sudo apt-get install -y python3 python3-dev python3-setuptools gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-dev
2. 下载源码
git clone --recursive https://github.com/apache/tvm tvm
3. 进入tvm目录
mkdir build
cp cmake/config.cmake build
3.下载llvm 预编译包:
https://releases.llvm.org/download.html
从下面下载自己需要的包,解压后放到某个目录,我放到了/opt下
我的路径是:
/opt/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04/
注意上面的路径依使用的llvm版本有不同而不同。
4. 修改刚才复制的 config.cmake 文件
修改这行: set(USE_LLVM /path/to/your/llvm/bin/llvm-config)
我的值 是 set(USE_LLVM /opt/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/llvm-config)
注意上面的路径,依自己的clang的解压目录而变化 (clang和llvm在本文中的意思相同,不作区别)
5. 编译
cd build
cmake ..
make -j4
6. 安装 tvm库
mkdir /opt/tvm
将build目录下的 libtvm打头的so文件复制到/opt/tvm 下
当前的两个文件是:
libtvm_runtime.so libtvm.so
至少编译完成,下面安装python下的tvm
二、安装python版本TVM
切换到刚才下载的tvm源码的目录,即那个tvm目录。在此目录下还有先前创建的build目录的。
确保你的python命令运行后提示是 python3 版本。
cd python; python setup.py install --user; cd ..
安装完成后,运行python
输入 import tvm 并回车
如果没有报错,刚表明安装tvm成功。
三、TVM测试
git clone https://github.com/google/googletest
cd googletest
mkdir build
cd build
cmake ..
make
sudo make install
切换到刚才的tvm源码目录(下面有我们创建的build)
运行测试脚本:
./tests/scripts/task_cpp_unittest.sh
或
make cpptest
四、Auto TVM 自动调优
https://blog.csdn.net/hw5226349/article/details/92019491
五、C++端部署及导出so
https://zhuanlan.zhihu.com/p/60981432
六、后记
关于 四、五节的内容,为了内容完整,引用了几个网上的文章,后面会完善。