踩坑记 如何编译所有版本的TVM
TVM环境配置¶
前言¶
笔者把tvm v0.9、v0.8、v0.6、v0.5、v0.4、v0.3、v0.2、v0.1都本地安装编译了,也就是除了v0.7没有本地编译以外所有版本都测试了,docker也测试了。遇到了好多小问题,故记录一下。然后测试dlsys的课的作业,原link为dlsys-course/assignment2-2018: (Spring 2018) Assignment 2: Graph Executor with TVM (github.com)
两种方式:
- docker方式
- 本地源码编译
一、docker版本¶
这个tvm版本是v0.6¶
nvidia-docker run --rm -v /home/zhangxiaoyu/OneFlowWork/tvm/:/home/tvm_learn -it tvmai/demo-gpu bash
root@6813267b08b0:/# python3
Python 3.6.8 (default, Oct 9 2019, 14:04:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tvm
>>> tvm.__version__
'0.6.dev'
>>>
或者¶
docker pull tvmai/demo-gpu
nvidia-docker run --rm -it tvmai/demo-gpu bash
一、安装下载v0.4~v0.9版本环境¶
0. 安装llvm¶
sudo apt install llvm
本地环境:ubuntu 18.04¶
总结:¶
1. 安装v0.9到v0.4版本,都是一样改cmake的配置,设置相应的后端为ON,我这边测试的dlsys是USE_LLVM = ON;¶
2. 安装v0.3到v0.1是改make的配置,我测试的是dlsys,直接是LLVM_CONFIG = llvm-config,而且make的位置不一样;¶
3. tvm v0.7之后,不能直接import topi,要改成import tvm.topi, 0.1到0.6可以直接import topi,但会有新问题,topi这个lib损坏了,需要自己重新安装,方法如下:cd tvm/topi/python;python setup.py install,就可以修复。¶
下载v0.4~v0.9版本¶
v0.4可以直接import topi
# 创建虚拟环境
conda create -n tvm python=3.7
conda activate tvm
# 下载源码
git clone --recursive -b v0.4 https://github.com/apache/tvm tvm #-b 这个-b就是修改你要clone哪个版本
cd tvm
git submodule init
git submodule update
# 更新lib
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
看pip是python2还是python3,这步可选¶
which pip # /home/ml/.local/bin/pip
which python # /home/ml/anaconda3/envs/tvm_v9/bin/python
修改pip的python¶
vim /home/ml/.local/bin/pip
#!/home/ml/anaconda3/envs/tvm_v9/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())
编译tvm¶
mkdir build;cp cmake/config.cmake build
# 修改 tvm/build/config.cmake, 讲USE_LLVM设置成ON即set(USE_LLVM ON)
cd build;cmake ..;make -j4
环境变量¶
export TVM_HOME=/path/to/tvm # 注意这个/path/to/tvm是用户本地的路径
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}
因为这个版本的topi lib坏了,需要自己重新安装¶
cd tvm/topi/python
python setup.py install
安装一些库¶
pip install numpy decorator scipy nose
测试tvm是否配置成功¶
python
import tvm
tvm.__version__
import topi
# or
import tvm.topi
测试代码¶
测试这个dlsys的代码时候,v0.1v0.4的版本代码不用修改,v0.5v0.9的需要更改好多api,这部分我也修改完了,放在这个git里面。
git clone -b tvm_v4 https://github.com/RobertLuobo/tvm_dlsys_test.git #tvm版本v0.1~v0.4的版本用这个
# or
git clone -b tvm_v9 https://github.com/RobertLuobo/tvm_dlsys_test.git #tvm版本v0.5~v0.9的版本用这个
nosetests -v tests/test_tvm_op.py
python tests/mnist_dlsys.py -l -m logreg
python tests/mnist_dlsys.py -l -m mlp
安装下载v0.1~v0.3版本环境¶
下载v0.2版本¶
这边我clonev0.3好像直接也是v0.2,v0.1我也本地编译安装了一遍
# 创建虚拟环境
conda create -n tvm python=3.7
conda activate tvm
# 下载源码
git clone --recursive -b v0.2 https://github.com/apache/tvm tvm
cd tvm
git submodule init
git submodule update
# 更新lib
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
看pip是python2还是python3,这步可选¶
which pip # /home/ml/.local/bin/pip
which python # /home/ml/anaconda3/envs/tvm_v9/bin/python
修改pip的python¶
vim /home/ml/.local/bin/pip
#!/home/ml/anaconda3/envs/tvm_v9/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())
编译tvm,这里不是cmake,是make,这是跟前面不一样的地方¶
# 在 tvm 主目录下即可/path/to/tvm
cp make/config.mk .
# 修改 /path/to/tvm/config.mk, 改LLVM_CONFIG = llvm-config,即可要执行这段
# 直接make,不需要cmake ..
make -j4
环境变量¶
export TVM_HOME=/path/to/tvm # 注意这个/path/to/tvm是用户本地的路径
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}
因为有些版本的topi lib坏了,需要自己重新安装¶
cd tvm/topi/python
python setup.py install
安装一些库¶
pip install numpy decorator scipy nose
测试tvm是否配置成功¶
python
import tvm
tvm.__version__
import topi
测试代码¶
git clone -b tvm_v4 https://github.com/RobertLuobo/tvm_dlsys_test.git
nosetests -v tests/test_tvm_op.py
python tests/mnist_dlsys.py -l -m logreg
python tests/mnist_dlsys.py -l -m mlp
三、粗略地看看dlsys里面的测试代码¶
1、看看有什么文件¶
├── dl_stack.png
├── python
│ └── dlsys
│ ├── autodiff.py
│ ├── __init__.py
│ └── tvm_op.py
├── README.md
└── tests
├── dlsys
│ ├── autodiff.py
│ ├── __init__.py
│ └── tvm_op.py
├── mnist_dlsys.py
├── mnist.pkl.gz
└── test_tvm_op.py
2.测试了什么¶
matrix_elementwise_add
matrix_elementwise_add_by_const
matrix_elementwise_mul
matrix_multiply
conv_2d
relu
relu_gradient
softmax
softmax_cross_entropy
reduce_sum_axis_zero
broadcast_to
3. 小小的跑了3层mlp的训练,对是训练,python tests/mnist_dlsys.py -l -m mlp¶
本文总阅读量次