TVM安装
在Linux上从源码安装tvm
1. 拉取源码
先把源代码拉下来,注意使用--recursive
可用来获取TVM的依赖(会下载到tvm/3rdparty
目录下):
git clone --recursive https://github.com/apache/tvm tvm
如果第三方依赖下载过慢,可以在git clone
后,进入tvm目录执行下述命令:
git submodule init
git submodule update
2.构建准备
我们的目标是从源码编译得到libtvm.so
和 libtvm_runtime.so
。
2.1 安装依赖
为保证构建过程顺利完成,我们还需要完成如下依赖的安装:
sudo apt-get update
sudo apt-get install -y gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-dev
请确保CMake version >= 3.10
。
2.2 选择构建工具
为了更快地增量编译,我们选择使用ninja
来进行构建,apt仓库的ninja
已完全可用,安装可通过如下命令进行:
sudo apt-get install ninja
安装完成后可通过ninja --version
查看。
2.3 解决python环境
由于官方文档(0.9.dev0)指出tvm的Python目前仅支持3.8.X+ 和3.7.X+,因此,我们选择使用conda
来创建tvm的python环境(conda安装请自行解决)。
conda create -n tvm python=3.8
source activate tvm
3.构建配置
3.1自定义构建选项
在tvm
下创建好build
目录,构建所需的配置文件可从tvm/cmake/config.cmake
中拷贝。
cd tvm
mkdir build
cp cmake/config.cmake build
编辑build/config.cmake
来自定义构建选项:
set(USE_CUDA ON)
启用CUDA后端(需要本地安装CUDA>=8.0)- 启用
set(USE_GRAPH_EXECUTOR ON)
、set(USE_PROFILER ON)
来帮助debug。 - 如果需要debug IRS,则需要
set(USE_RELAY_DEBUG ON)
并设置环境变量TVM_LOG_DEBUG。export TVM_LOG_DEBUG="ir/transform.cc=1,relay/ir/transform.cc=1"
3.2 安装并启用llvm
TVM 依赖 LLVM 用于 CPU 代码生成,官方强烈建议在进行构建的时候启用LLVM,且需要 llvm version >= 4.0
,而使用apt
默认安装的会低于4.0,我们选择前往llvm官页下载编译好的llvm包(Pre-Built Binaries)。
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-11.0.0/clang+llvm-11.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz
编辑build/config.cmake
,修改set(USE_LLVM <your_llvm_path>/bin/llvm-config)
。
为了后续调试方便,您可以将llvm加入环境变量:
export PATH="<your_path>/llvm/bin:$PATH"
4.编译构建
TVM 的默认配置是构建 RELEASE 版本的共享库。如果要构建 DEBUG 版本的,可以使用选项-DCMAKE_BUILD_TYPE=Debug
:
cd build
cmake -DCMAKE_BUILD_TYPE=Debug -G Ninja ..
ninja
编译成功后,生成的共享库libtvm.so
和libtvm_runtime.so
位于build
目录下。
查看生成的共享库是否是DEBUG
版本,可在构建目录中执行如下命令,看是否有with debug_info
:
$ file libtvm.so
libtvm.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=57549746b04cd3a7cb359e375db427e1b01a63a2, with debug_info, not stripped
$ file libtvm_runtime.so
libtvm_runtime.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=0101648081939d9d6b9498d47498121ecd2aba5b, with debug_info, not stripped
5. 安装tvmc (TVM命令行工具)
5.1 安装依赖
TVM命令行工具tvmc
以python包形式存在于克隆的仓库目录tvm/python/tvm/driver
下,我们需要安装如下依赖确保tvmc
正常运行:
pip install numpy decorator attrs scipy
5.2 环境变量配置
为了能使tvmc
可以被正确加载,我们需要添加如下环境变量(可写入~/.bashrc
等,请依shell类型确定):
export TVM_HOME=<your_clone_path>/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}
export TVM_LIBRARY_PATH=$TVM_HOME/build
注:
- 修改
PYTHONPATH
是为了python
能找到tvm.driver.tvmc
。 - 添加环境变量
TVM_LIBRARY_PATH
是为了tvmc
能找到所需的共享库libtvm.so
和libtvm_runtime.so
。
我们可以重启shell或source ~/.bashrc
使上述修改立即生效。
5.3运行与别名
您可以通过下述命令来运行tvmc并查看帮助:
python3 -m tvm.driver.tvmc --help
为了使用方便,我们可以为shell执行构建命令别名,您可将下述内容写入~/.bashrc
:
alias tvmc='python3 -m tvm.driver.tvmc'
生效后,我们就可以直接执行tvmc
。