手把手教你在 Ubuntu22.04 上安装TVM
文章目录
- 1 安装依赖
- 2 下载源码,配置并编译
- 3 作为 python 包安装,并验证
目前运营的自媒体账号如下:
- 哔哩哔哩 【雪天鱼】: 雪天鱼个人主页-bilibili.com
如果觉得有所收获的话,可以点击我的主页 -> 充电 -> 自定义充电 支持一下,十分感谢!
- CSDN 【雪天鱼】: 雪天鱼-CSDN博客
QQ 学习交流群
- FPGA科研硕博交流群 910055563 (进群有一定的学历门槛,长期未发言会被请出群聊,主要交流FPGA科研学术话题)
- CNN | RVfpga学习交流群(推荐,人数上限 2000) 541434600
- FPGA&IC&DL学习交流群 866169462
- 视觉 Transformer 学习交流群 764608673
官方安装教程:Install from Source — tvm 0.20.dev0 documentation
CUDA版本:12.2
安装的是最新版本(0.20.0 dev)的 TVM。
1 安装依赖
TVM的核心代码都是C++编写,所以编译的目的是生成 libtvm.so
和 libtvm_runtime.so
等动态链接库,当使用python脚本进行模型编译优化时,实际上调用的libtvm.so
,运行模型时调用libtvm_runtime.so
。因此安装TVM本质上是正确生成对应平台的动态库并让python脚本找到它。
在各系统中从 0 到 1 构建和安装 TVM 软件包包括两个步骤:
- 从 C++ 代码中构建共享库(Linux:
libtvm.so
;macOS :libtvm.dylib
;Windows:libtvm.dll
)。 - 为编程语言包进行设置(如 Python 包)。
相关依赖如下:
- Python (>= 3.8)
- CMake (>= 3.24.0)
- LLVM (>= 15)
- Git
- Conda
- GCC(GNU Compiler Collection)7.1
可通过 conda 快速安装以上依赖
# 删除同名环境,确保创建的是空白新环境
conda env remove -n tvm-build
# 指定从 conda-forge 通道安装指定版本的软件包,“-c” 用于指定从哪个通道获取包
# 需要大概 2-5min
conda create -n tvm-build -c conda-forge "llvmdev>=15" "cmake>=3.24" git python=3.11
# 激活创建好的环境
conda activate tvm-build
pip install cython # 3.0.12, 编译tvm时需要
检查版本(可选)
gcc -v
g++ -v
cmake --version
python3
# 查看cuda版本
cat /usr/local/cuda/version.txt
nvidia-smi
which nvcc
2 下载源码,配置并编译
(1)从仓库下载TVM源码
# 直接下载压缩包会丢失依赖的子模块,必须通过 git 克隆
# 添加 –recursive 选项,使得子模块代码可以一同下载
git clone --recursive https://github.com/apache/tvm.git tvm
cd tvm
# 更新子模块源码
git submodule update --init --recursive
(2) 配置并编译
cd tvm
# 删除 build目录再重建, 然后进入
rm -rf build && mkdir build && cd build
# 复制配置文件 config.cmake到build目录下
cp ../cmake/config.cmake .
配置文件用【文本编辑器】打开,修改如下项:
49行 set(USE_CUDA OFF) --> set(USE_CUDA ON) # 如果想使用 GPU 的话,需要改
146行 set(USE_LLVM OFF) --->set(USE_LLVM ON) # 必须要改的
然后在 build 目录下执行下述命令进行编译:
# 如果执行下条命令报错,提示找不到CXX编译器,则执行这两条指令可解决
sudo apt-get update
sudo apt-get install -y build-essential
# 运行 CMake 配置命令,指定源代码目录为当前目录的上一级目录(`..`)。
cmake ..
# 运行 CMake 构建命令,在当前目录进行并行构建, 线程数根据 CPU核数设置
# 需要 10 min
cmake --build . --parallel 8
如果最终成功编译,生成 libtvm.so
和 libtvm_runtime.so
。
3 作为 python 包安装,并验证
如果想把成功编译好的 tvm 安装到其他 conda环境中,有以下两种方法:
- 通过 pip 本地项目进行安装(已尝试,可行)
conda activate your-own-env
conda install python # python已安装, 则无需执行此命令
export TVM_LIBRARY_PATH=/path-to-tvm/build
pip install -e /path-to-tvm/python # 会自动安装相关依赖
- 通过环境变量安装
export TVM_HOME=/path-to-tvm
export PYTHONPATH=$TVM_HOME/python:$PYTHONPATH
- 验证
# 1 查看 tvm 包位置
python -c "import tvm; print(tvm.__file__)" # 没有报错,则说明安装成功
输出 /path/tvm/python/tvm/__init__.py
# 2 验证 tvm 库是否被实现
python -c "import tvm; print(tvm._ffi.base._LIB)"
输出 <CDLL '/path/tvm/build/libtvm.so'>, handle ...
# 3 检查 TVM 设备检测是否正常
python -c "import tvm; print(tvm.cuda().exist)"
输出 True 表示显卡可用
# 4 查看 tvm 的构建选项(不重要)
python -c "import tvm; print('
'.join(f'{k}: {v}' for k, v in tvm.support.libinfo().items()))"