环境:vmware 16 pro + ubuntu20.04
1. LLVM+CLANG安装
源码安装llvm比较复杂,而且在国内很难下载llvm源码以及子仓源码,所以直接使用llvm社区发布的二进制包安装。下载地址:https://github.com/llvm/llvm-project/releases/tag/llvmorg-13.0.0
下载后直接使用tar命令解压
tar vxf clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz
为了使用方便,解压后可以使用mv命令改名为llvm
mv clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-20.04 llvm
在/etc/profile中这是llvm环境变量
export LLVM_HOME=/home/study/llvm
export PATH=$LLVM_HOME/bin:$PATH
执行命令
source /etc/profile
使配置生效。然后使用clang --version检查下是否安装成功:
study@ubuntu:~/llvm/bin$ clang --version
clang version 13.0.0 (https://github.com/llvm/llvm-project/ 24c8eaec9467b2aaf70b0db33a4e4dd415139a50)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/study/llvm/bin
2. TVM编译安装
2.1 TVM源码下载
TVM源码地址为 https://github.com/apache/tvm。我的网络从github clone代码非常慢,基本是下载一半就断链了,所以使用的是gitee的镜像源
git clone https://gitee.com/apache/tvm.git
完整的代码还需要下载子仓。同样因为网络问题,直接clone下载这些子仓几乎不可能成功。我是将这些子仓在gitee上都fork了一份,然后将tvm的子仓配置中对应的地址修改为gitee上fork的地址。
clone下来的tvm源码中.gitmodules和.git/config中有子仓的地址配置,将这些地址修改为对应的gitee fork地址,例如我的环境中的.git/config配置:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = https://gitee.com/apache/tvm.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
remote = origin
merge = refs/heads/main
[submodule "3rdparty/cutlass"]
active = true
url = https://github.com/NVIDIA/cutlass
[submodule "dlpack"]
active = true
url = https://gitee.com/zxros10/dlpack.git
[submodule "dmlc-core"]
active = true
url = https://gitee.com/zxros10/dmlc-core.git
[submodule "3rdparty/libbacktrace"]
active = true
url = https://gitee.com/zxros10/mirror-tlc-pack-libbacktrace.git
[submodule "3rdparty/rang"]
active = true
url = https://gitee.com/zxros10/mirror-rang.git
[submodule "3rdparty/vta-hw"]
active = true
url = https://gitee.com/zxros10/tvm-vta.git
注意.git/config和.gitmodules中都要修改。修改后下载子仓
git submodule init
git submodule update
2.2 编译环境准备
安装编译依赖包
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.3 tvm源码编译
mkdir build
cp cmake/config.cmake build
config.cmake中配置了需要编译的组件,因为我的环境没有GPU,虚拟机环境也用不GPU,所以确定config.cmake中set(USE_CUDA OFF)。同时set(USE_GRAPH_EXECUTOR ON)、set(USE_PROFILER ON)、set(USE_RELAY_DEBUG ON)。这些配置需要根据开发环境和需求决定打开还是关闭。特别需要注意的是,如果要使用llvm必须将set(USE_LLVM OFF)的值修改为你的llvm-config文件路径,例如我的设置是set(USE_LLVM /home/study/llvm/bin/llvm-config)
然后在build目录下执行编译命令
cd build
cmake ..
make -j4
2.4 设置TVM环境变量
在~/.bashrc中使用tvm代码路径设置TVM_HOME环境变量,并将tvm的python库路径加入PYTHONPATH。例如我的配置:
export TVM_LOG_DEBUG="ir/transform.cc=1;relay/ir/transform.cc=1"
export TVM_HOME=$HOME/tvm/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}
然后执行
source ~/.bashrc
2.5 测试安装是否成功
执行命令
study@ubuntu:~/tvm/tvm$ python3
Python 3.8.10 (default, Nov 26 2021, 20:14:08)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tvm
>>>
如果没有错误回显,表示安装成功。如果有报错找不到某个module,可以使用pip3 install安装即可
参考
【clang+LLVM】环境配置 二进制包安装步骤(release) 基于ubuntu18.04的llvm10.0.0
https://blog.csdn.net/qq_45335399/article/details/112715897
TVM-安装说明
https://tvm.apache.org/docs/install/from_source.html
https://blog.csdn.net/zghforever/article/details/117748979
git中submodule修改子模块的git地址
https://blog.csdn.net/liaoyanyunde/article/details/114883670