前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >踩坑记 如何编译所有版本的TVM

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

作者头像
BBuf
发布2022-05-27 08:29:58
9040
发布2022-05-27 08:29:58
举报
文章被收录于专栏:GiantPandaCVGiantPandaCV

【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)

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

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

一、docker版本

这个tvm版本是v0.6

代码语言:javascript
复制
nvidia-docker run --rm -v /home/zhangxiaoyu/OneFlowWork/tvm/:/home/tvm_learn -it tvmai/demo-gpu bash
代码语言:javascript
复制
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'
>>>

或者

代码语言:javascript
复制
docker pull tvmai/demo-gpu
nvidia-docker run --rm -it tvmai/demo-gpu bash

二、安装下载v0.4~v0.9版本环境

  1. 安装llvm
代码语言:javascript
复制
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

代码语言:javascript
复制
# 创建虚拟环境
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,这步可选

代码语言:javascript
复制
which pip     # /home/ml/.local/bin/pip
which python   # /home/ml/anaconda3/envs/tvm_v9/bin/python

修改pip的python

代码语言:javascript
复制
vim /home/ml/.local/bin/pip
代码语言:javascript
复制
#!/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

代码语言:javascript
复制
mkdir build;cp cmake/config.cmake build
# 修改 tvm/build/config.cmake, 讲USE_LLVM设置成ON即set(USE_LLVM ON)
cd build;cmake ..;make -j4

环境变量

代码语言:javascript
复制
export TVM_HOME=/path/to/tvm # 注意这个/path/to/tvm是用户本地的路径
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}

因为这个版本的topi lib坏了,需要自己重新安装

代码语言:javascript
复制
cd tvm/topi/python 
python setup.py install

安装一些库

代码语言:javascript
复制
pip install numpy decorator scipy nose

测试tvm是否配置成功

代码语言:javascript
复制
python
import tvm
tvm.__version__ 
import topi 
# or
import tvm.topi 

测试代码

测试这个dlsys的代码时候,v0.1~v0.4的版本代码不用修改,v0.5~v0.9的需要更改好多api,这部分我也修改完了,放在这个git里面。

代码语言:javascript
复制
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
代码语言:javascript
复制
python tests/mnist_dlsys.py -l -m logreg
代码语言:javascript
复制
python tests/mnist_dlsys.py -l -m mlp

安装下载v0.1~v0.3版本环境

下载v0.2版本

这边我clonev0.3好像直接也是v0.2,v0.1我也本地编译安装了一遍

代码语言:javascript
复制
# 创建虚拟环境
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,这步可选

代码语言:javascript
复制
which pip     # /home/ml/.local/bin/pip
which python   # /home/ml/anaconda3/envs/tvm_v9/bin/python

修改pip的python

代码语言:javascript
复制
vim /home/ml/.local/bin/pip
代码语言:javascript
复制
#!/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,这是跟前面不一样的地方

代码语言:javascript
复制
# 在 tvm 主目录下即可/path/to/tvm
cp make/config.mk .
# 修改 /path/to/tvm/config.mk, 改LLVM_CONFIG = llvm-config,即可要执行这段
# 直接make,不需要cmake ..
make -j4

环境变量

代码语言:javascript
复制
export TVM_HOME=/path/to/tvm # 注意这个/path/to/tvm是用户本地的路径
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}

因为有些版本的topi lib坏了,需要自己重新安装

代码语言:javascript
复制
cd tvm/topi/python 
python setup.py install

安装一些库

代码语言:javascript
复制
pip install numpy decorator scipy nose

测试tvm是否配置成功

代码语言:javascript
复制
python
import tvm
tvm.__version__ 
import topi 

测试代码

代码语言:javascript
复制
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. 看看有什么文件
代码语言:javascript
复制
├── 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
  1. 测试了什么
代码语言:javascript
复制
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
  1. 小小的跑了3层mlp的训练,对是训练,python tests/mnist_dlsys.py -l -m mlp
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GiantPandaCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、docker版本
  • 二、安装下载v0.4~v0.9版本环境
  • 三、粗略地看看dlsys里面的测试代码
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档