大数跨境
0
0

踩坑记:如何编译所有版本的TVM

踩坑记:如何编译所有版本的TVM 极市平台
2022-05-07
1
↑ 点击蓝字 关注极市平台

作者丨LoBob
来源丨GiantPandaCV
编辑丨极市平台

极市导读

 

笔者把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) >>加入极市CV技术交流群,走在计算机视觉的最前沿

一般使用两种方式安装TVM:

  1. docker方式
  2. 本地源码编译

一、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.1~v0.4的版本代码不用修改,v0.5~v0.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

公众号后台回复“CVPR 2022”获取论文合集打包下载~

△点击卡片关注极市平台,获取最新CV干货
极市干货
数据集资源汇总:90+深度学习开源数据集整理|包括目标检测、工业缺陷、图像分割等多个方向
实操教程Pytorch - 弹性训练极简实现( 附源码)PyTorch常用代码段合集
CVPR 2022:CVPR'22 最新132篇论文分方向整理CVPR'22 最新106篇论文分方向整理一文看尽 CVPR 2022 最新 20 篇 Oral 论文


CV技术社群邀请函 #

△长按添加极市小助手
添加极市小助手微信(ID : cvmart4)

备注:姓名-学校/公司-研究方向-城市(如:小极-北大-目标检测-深圳)


即可申请加入极市目标检测/图像分割/工业检测/人脸/医学影像/3D/SLAM/自动驾驶/超分辨率/姿态估计/ReID/GAN/图像增强/OCR/视频理解等技术交流群


每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企视觉开发者互动交流~


觉得有用麻烦给个在看啦~  
【声明】内容源于网络
0
0
极市平台
为计算机视觉开发者提供全流程算法开发训练平台,以及大咖技术分享、社区交流、竞赛实践等丰富的内容与服务。
内容 8155
粉丝 0
极市平台 为计算机视觉开发者提供全流程算法开发训练平台,以及大咖技术分享、社区交流、竞赛实践等丰富的内容与服务。
总阅读3.2k
粉丝0
内容8.2k