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.solibtvm_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.solibtvm_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.solibtvm_runtime.so

我们可以重启shell或source ~/.bashrc使上述修改立即生效

5.3运行与别名

您可以通过下述命令来运行tvmc并查看帮助:

python3 -m tvm.driver.tvmc --help

为了使用方便,我们可以为shell执行构建命令别名,您可将下述内容写入~/.bashrc

alias tvmc='python3 -m tvm.driver.tvmc'

生效后,我们就可以直接执行tvmc

工作参考


TVM安装
http://example.com/posts/86ceff4c/
发布于
2022年7月26日
许可协议