1. 概述
本文主要讲述TVM的源码安装流程,以及安装过程遇到的问题详细流程建议参考官方文档Install from Source。
2. 下载
首先从TVM的Github仓库下载源码,注意添加--recursive
选项,使得子模块代码可以一同下载。
$ git clone --recursive https://github.com/apache/tvm tvm
由于国内网络墙等原因,下载过程大概率会被中断,请多次尝试或者换个稳定的网络环境。下载中断后,可以进入tvm
目录重新拉取子模块的源码。
- 初始化子模块
该命令根据.gitsubmodules
文件配置初始化。
$ git submodule init
- 更新子模块源码
$ git submodule update
注意:有时
update
提示完成,但是子模块文件里面仍然是空的,此时需要将该文件夹删除,重新update
2. 编译
TVM的核心代码都是C++编写,所以编译的目的是生成libtvm.so
和libtvm_runtime.so
等动态链接库,当使用python脚本进行模型编译优化时,实际上调用的libtvm.so
,运行模型时调用libtvm_runtime.so
。因此安装TVM的目的变成了正确生成对应平台的动态库并让python脚本找到它。
2.1. 依赖工具安装
制作TVM所需的“食材”[源码]已经准备完毕,下面检查做菜的相关工具是否齐全。TVM的源码编译主要依赖cmake
和make
工具,编译器gcc
和交叉编译工具build-essential
等。
$ 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.2. 编译选项配置
2.2.1. 创建编译目录
创建一个用于盛放TVM的容器,并将这个容器命名为build
。
$ mkdir build
注意:不要随意修改目录命名,否则python脚本识别不到
libtvm.so
,导致import tvm
错误等。
2.2.2. 编译配置文件
除了食材和工具,想做好TVM这道菜我们还需要一份菜谱,根据这个菜谱我知道要加入哪些食材,加不加香菜,要不要辣。将这个菜谱从cmake/config.cmake
拷贝到build
。
$ cp cmake/config.cmake build
将这个菜谱打开,看看到底有些啥?
2.2.2.1. 后端支持
TVM支持很多后端的部署,可以根据实际需要选择性开启相关后端支持。
比如常见的
CUDA
,可以将set(USE_CUDA OFF)
变成set(USE_CUDA ON)
,将CUDA
加入编译。
- 后端配置默认列表
CUDA | ROCM | OpenCL | METAL | VULKAN | OpenGL |
---|---|---|---|---|---|
OFF | OFF | OFF | OFF | OFF | OFF |
2.2.2.2. RPC服务
默认开启RPC服务,但是关于C++和IOS的RPC默认关闭。
2.2.2.3. 调试
为了便于调试,确保嵌入式图像可执行器和调试函数功能使能。
set(USE_GRAPH_EXECUTOR ON)
set(USE_PROFILER ON)
为了便于IR调试,set(USE_RELAY_DEBUG ON)
,并设置环境变量
$ export TVM_LOG_DEBUG=1
2.2.2.4. LLVM
关于llvm
的版本需要4.0或者更高的版本
- 预编译安装
- 进入LLVM Download Page
根据自己的系统选择较新版本的LLVM进行下载; - 指定LLVM配置文件路径;
set(USE_LLVM /path/to/your/llvm/bin/llvm-config)
- 源安装
- 需取得数字证书
$ wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key|sudo apt-key add -
-
查找更新源
进入LLVM Debian/Ubuntu nightly packages页面,找到自己系统的安装源; -
添加更新源
打开/etc/apt/sources.list
文件,如果系统是ubuntu20.04,可以添加如下:
deb http://apt.llvm.org/focal/ llvm-toolchain-focal-12 main
deb-src http://apt.llvm.org/focal/ llvm-toolchain-focal-12 main
$ sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-12 main'
具体添加内容根据自己的系统选择。
- 系统源更新
$ sudo apt-get update
- 安装LLVM
sudo apt-get install clang-12 lldb-12
注:如果提示提示无法安装,
kill
相应apt apt-get
进程
$ sudo killall apt apt-get
3. 开发环境
3.1. 永久配置
- 打开
.bashrc
文件,添加下述环境变量
export TVM_HOME=/path/to/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}