官方安装方法:https://tvm.apache.org/docs/install/from_source.html
1. 安装Anaconda
https://www.anaconda.com/products/individual
2. 安装Git
sudo apt update
sudo apt install git
3. 从GitHub上下载tvm源代码
git clone --recursive https://github.com/apache/tvm tvm
4. 安装必要的依赖
sudo apt install -y gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-dev
5. 修改TVM编译配置文件
cd tvm
如果没有vim,请先安装vim,再对配置文件进行修改
sudo apt install vim
5.1、新建一个build文件夹用于存放make后的文件
mkdir build
cp cmake/config.cmake build
5.2、修改配置文件
主要修改如下几项:(vim使用/关键字
可以高亮关键字)
- 如果使用CUDA进行编译:
set(USE_CUDA ON)
或者set(USE_CUDA /path/to/your/cuda/)
- 如果使用CUDNN:
set(USE_CUDNN ON)
或者set(USE_CUDA /path/to/your/cudnn.so/)
- 如果使用CUBLAS:
set(USE_CUDNN ON)
或者set(USE_CUDA /path/to/your/cublas.so/)
- 如果要对IR进行debug:
set(USE_RELAY_DEBUG ON)
并在环境变量中加入TVM_LOG_DEBUG
的路径 - 如果要对编译过程进行debug:
set(USE_GRAPH_EXECUTOR ON)
和(USE_PROFILER ON)
其余功能可按照配置文件中的详细说明进行修改
每一次修改配置文件之后都需要把build文件夹中的除编译文件外的文件清空,重新编译!
5.3. 搭建环境
傻瓜式搭建环境:也可以自行通过apt安装llvm等环境
conda env create --file conda/build-environment.yaml
conda activate tvm-build
注意!因为傻瓜式安装会安装最新版本的python,可能会导致一系列不可控因素!因此请在虚拟环境建立之后使用
conda install python=3.x
对python版本进行降级,降级完成后再编译!
5.4、编译
cd build
cmake ..
make -j16 (数字代表使用多少个进程进行编译,可根据自己的cpu参数酌情选择)
6. 安装必要的包
conda build --output-folder=conda/pkg conda/recipe
conda install tvm -c ./conda/pkg
pip install numpy decorator attrs tornado psutil xgboost cloudpickle tensorboard
安装时请使用default源,清华源或者其他源可能会报错
查看conda源:conda config --show-source
增加conda源:conda config --add channels http://.....
删除conda源:conda config --remove channels http://.....
7. 把TVM和CUDA加入到环境变量~/.bashrc文件中
export TVM_HOME=/path/to/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}
export PATH=/path/to/cuda:$PATH
export LD_LIBRARY_PATH=/path/to/cuda/lib64:$LD_LIBRARY_PATH
8. 坑
8.1 如果出现GLIBCXX_3.4.29' not found
tvm-build/lib/./libstdc++.so.6: version `GLIBCXX_3.4.29' not found
说明tvm环境内的GCC版本过高,但动态库版本不够,只需要把新版本的libstdc++.so.6
文件覆盖此文件即可
检查
libstdc++.so.6
文件版本:
strings libstdc++.so.6 | grep GLIBC
解决方法:
通常可以使用sudo find / -name "libstdc++.so.6"
来全盘搜索本机内的所有libstdc++.so.6
文件,并逐一检查其版本是否包含GLIBCXX_3.4.29
,通常anaconda已经包含,我的最新版文件在/usr/lib/x86_64-linux-gnu/libstdc++.so.6
内,anaconda通常已经包含gcc11.2.0及gcc9.1.0的动态运行库。
如果不能解决只能从网上寻找新版本的libstdc++.so.6
文件或更新gcc后再重新覆盖。
8.2 编译时出现GTest问题
解决方法
git clone https://github.com/google/googletest.git
cd googletest
mkdir build
cd build
cmake ..
make
sudo make install