关于搭建TVM编译器的官方文档:Install from Source — tvm 0.14.dev0 documentation (apache.org)
1. 安装Anaconda
首先我们需要安装Anaconda,因为其中包含着我们所需要的各类依赖:
进入Anaconda官网https://www.anaconda.com/products/distribution,下载Windows版本,下载完成后运行.exe,可以更改安装路径(如果安装路径不是C盘可能需要一点点额外的步骤,这个后面会提到),基本一路Next就可以了。需要注意的是,一定要把将Anaconda加入PATH勾选上,这样就可以节省配置Anaconda环境变量的步骤。
最终安装好Anaconda,可以在电脑应用菜单这里找到对应的cmd终端入口和powershell入口:
2. 编译LLVM
接下来是编译LLVM,简便行事我们可以使用已经手动编译好的库,进入https://winlibs.com/找到包含LLVM的包:
下载解压到任意目录里就行,最后把其中bin目录路径写入环境变量的PATH中,进入Anaconda的cmd终端中输入如下命令:
llvm-config --libdir
不报错并显示对应的库目录路径意味着前面的步骤都完成了,下面就开始搭建TVM。
3. 获取TVM源码
从github上获取最新版的TVM克隆到本地文件夹tvm中,记住务必要克隆而非直接下载ZIP解压否则后面编译会报错:
$ git clone --recursive http://github.com/apache/tvm tvm
新建一个build文件夹,从文件夹cmake中复制一份config.cmake拷贝到build文件夹中:
$ cd tvm
$ mkdir build
$ cp cmake/config.cmake build
当然源码获取并没有这么简单,这也是我踩的一个大坑了,如果现在查看build里的一些文件夹,你会发现很多是空的,这是因为它们是子仓库所以并没有跟随着一起将源码克隆到本地,反而只是将一个jit链接克隆了下来,我们接下来需要补充这一部分代码,进入github仓库的build文件夹下,将有蓝色链接(含有子仓库)的源码下载到本地,替换原来残缺的部分:
4. 构建虚拟环境
在Anaconda终端中切换到tvm的文件夹目录下,注意:如果你将Anaconda放在了非系统盘,那么你需要使用管理员身份进入终端。
使用如下命令构建并进入tvm-build的虚拟环境:
# Create a conda environment with the dependencies specified by the yaml
conda env create --file conda/build-environment.yaml
# Activate the created environment
conda activate tvm-build
这个过程会比较长,大概10分钟左右。
5. 使用cmake生成.dll库
打开build目录下的config.cmake文件,将USE_LLVM设为ON,修改完后保存:
进入build目录调用cmake进行生成:
cd build
cmake -A x64 -Thost=x64 ..
cd ..
cmake --build build --config Release -- /m
这里可能会有报错"No CMAKE_C_COMPILER could be found",意思就是没有编译器,我们可以去下载Visual Studio解决这个问题,如果你已经安装了Visual Studio但仍然存在这个问题,那你需要去Visual Studio Installer里下载安装一个SDK,这里我推荐最新版的windows 10 SDK。
这个步骤也要等待蛮久的,大概半小时(而且非常占用CPU,电脑风扇起飞),可以看到中途会有很多Warnings,不必理会(不是Error就知足吧Orz):
最终可以看到在tvm\build\Release目录下生成了tvm.dll的链接库:
6. python依赖库的安装
使用如下命令直接安装即可:
pip3 install typing_extensions numpy decorator attrs
pip3 install tornado psutil xgboost cloudpickle
pip3 install ml_dtypes
7. 将TVM安装到python环境
这一步看其他大佬的博客都是直接配置PYTHONPATH环境变量,但实际上我们在Anaconda终端直接运行如下脚本即可完成:
cd python
python setup.py install
运行完毕,可以打开python的IDLE输入import tvm来简单测试一下我们搭建的TVM是否可用:
如上所示,没有报错基本就成功了。
当然如果不习惯用IDLE,也可以使用VSCode、PyCharm等代码编辑器,例如在VSCode的设置的命令面板中输入:
python:select interpreter
更换python解释器为我们刚刚添加tvm包的解释器:
如下所示,没有报错:
至此,我们的TVM编译器搭建就结束了,篇幅不长但是却浓缩了我踩坑的漫长经历QAQ