TVM:深度学习框架编译器的安装踩坑集


一、引言

4月底的时候,花了一天时间安装TVM这个东西。那时,上来就弄TVM 0.8的版本,但因为具体安装的流程不是很懂,所以出现了一些莫名其妙的问题。后来,直接改用TVM0.6版本,一路顺风。

但,今天(5月7日)时,打算仔细看下教程,发现0.6版本的,已经没了,只剩下0.8的教程,行吧!还是得回头安装0.8的,但之前怎么安装的,又给忘了,于是乎,一顿操作后,直接弄好了,打算写篇文章讲讲这个东西的安装。


二、流程

安装的流程很简单,网上也有许多教程了,这里先详细地讲下。

1°代码的获取。

使用“git clone --recursive + 网址”的方式,可以完成代码的获取。因为在tvm开源包的3rdparty文件夹中存在dlpack、dmlc-core、rang和vta-hw等库,如果不加 --recursive 选项,会缺失掉。

在我的实际测试中发现,如果使用git clone来获取源码,网速问题还是GitHub本身原因,没到一半就GG掉了,几次下来都没搞成功。也许需要解决网速上的问题,但得不偿失,用下面这个方法处理:

打开下面网址。选择版本,点击↓Code下载代码包。

https://github.com/apache/tvm

在这里插入图片描述
打开3rdparty文件夹,点击标蓝的几个库,使用↓Code把对应的文件全都下载了。
在这里插入图片描述
手动解压后,把各文件放在对应的目录下。这里我把整合后的文件打包了,放在自己的GitHub上,方便下次使用。包含0.8和0.6的版本。
在这里插入图片描述
附上打包文件的地址:https://github.com/abeitian/tvm_package

2°安装Linux的依赖。

这里使用的是WSL的Linux Ubuntu18.04、GCC7.5和Python3.7.3环境,网上有关于Windows安装的教程,但需要VS2019,我的电脑已经快承受不了了,所以在0.6没成功后,还是选择了硬刚。

安装依赖命令。这个一般不会错,如果提示少了,就再多装下。

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

3°编译共享库。

先将config文件复制到新建的build文件,修改后再进行编译。

mkdir build # 在tvm_8文件夹下创建
cp cmake/config.cmake build # 把配置文件复制到新建的build目录下

打开build下的配置文件,进行一些修改。为了支持LLVM环境,需要ON打开下,LLVM预编译版本在这里下载。

cd build
vim ./config.cmake

将LLVM功能打开,同时把LLVM的路径给配置下,可以使用set来配置,也能直接在/home/lytain(自己用户)/.bashrc下配置。这里选择后者。
在这里插入图片描述
LLVM的环境配置。

127 #LLVM
128 export LLVM_HOME=/usr/local/llvm-9.0.0/bin
129 export PATH=$LLVM_HOME:$PATH

使用cmake和make进行编译。

cmake ..
#如果要使用debug版本,可以使用下面这个命令
cmake -DCMAKE_BUILD_TYPE=Debug ..
make -j8

4°环境变量的配置。
将配置放到用户的.bashrc中。

export TVM_HOME=/usr/local/tvm_8
export PYTHONPATH=$TVM_HOME/python:$TVM_HOME/python/tvm:$TVM_HOME/build:$TVM_HOME/python/tvm/runtime:$[PYTHONPATH]

5°其他依赖的安装。
pip install numpy decorator attrs。


三、踩坑

1°在编译完成后,会在build文件夹下,产生libtvm.so和libtvm_runtime.so等文件,这些文件得放在/usr/local/sbin下面,不然会出现一些错误,我之前没移动,使用配置Python路径的方式,但没成功,根据错误提示,解决了这个问题。

产生的libtvm.so和libtvm_runtime.so文件如下。
在这里插入图片描述
如果不把最新的版本的so文件放在/usr/local/sbin下,可能会产生下面这些问题,我这里是版本的问题,在/usr/local/sbin下放的是之前0.6版本的,升级0.8的时候没注意到,后来替换了最新的so文件,就没这些问题了。
在这里插入图片描述
2°要验证tvm模块是否安装成功,需要使用python进入命令行,输入下面的指令进行验证。

>>> import tvm
>>> tvm.__version__

得到下面的结果。
在这里插入图片描述
如果报错找不到module,可能是配置不对,或者配置没有生效。简单的查看配置路径是否正确,可以按照以下命令进行。

>>> import sys
>>> sys.path

得到下面的结果。

['', '/usr/local/tvm_8/python', '/usr/local/tvm_8/python/tvm', '/usr/local/tvm_8/build', '/usr/local/tvm_8/python/tvm/runtime', '/usr/local/sbin/0', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/home/lytain/.local/lib/python3.7/site-packages', '/home/lytain/.local/lib/python3.7/site-packages/tvm-0.8.dev0-py3.7-linux-x86_64.egg', '/home/lytain/.local/lib/python3.7/site-packages/tornado-6.1-py3.7-linux-x86_64.egg', '/home/lytain/.local/lib/python3.7/site-packages/synr-0.3-py3.7.egg', '/home/lytain/.local/lib/python3.7/site-packages/scipy-1.6.3-py3.7-linux-x86_64.egg', '/home/lytain/.local/lib/python3.7/site-packages/psutil-5.8.0-py3.7-linux-x86_64.egg', '/home/lytain/.local/lib/python3.7/site-packages/numpy-1.20.2-py3.7-linux-x86_64.egg', '/home/lytain/.local/lib/python3.7/site-packages/decorator-5.0.7-py3.7.egg', '/home/lytain/.local/lib/python3.7/site-packages/cloudpickle-1.6.0-py3.7.egg', '/home/lytain/.local/lib/python3.7/site-packages/attrs-21.1.0-py3.7.egg', '/usr/local/lib/python3.7/site-packages']

如果要查看tvm模块包含的对象,可以使用下面命令。

>>> import tvm
>>> print(dir(tvm))

得到下面的结果。

['DataType', 'DataTypeCode', 'IRModule', 'Object', 'TVMError', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_ffi', '_nvcc', '_rocm', '_sdaccel', '_should_print_backtrace', 'arith', 'build', 'cl', 'container', 'contrib', 'cpu', 'device', 'driver', 'error', 'ext_dev', 'get_global_func', 'gpu', 'hexagon', 'ir', 'lower', 'metal', 'micro_dev', 'mtl', 'multiprocessing', 'nd', 'opencl', 'os', 'parser', 'register_extension', 'register_func', 'register_object', 'rocm', 'runtime', 'support', 'sys', 'target', 'te', 'tir', 'traceback', 'transform', 'tvm_wrap_excepthook', 'vpi', 'vulkan']

3°在使用import vta导入vta模块时,出现下面的错误。

No module named 'vta'

原因是PYTHONPATH中没有加入vta的路径,vta的路径在下面这里,并加入.bashrc中。

export PYTHONPATH=其他路径+$TVM_HOME/vta/python:$[PYTHONPATH] #具体内容视自己目录而定
#使用VTA,在例子中有说明,还需要导入一个VTA的环境变量
export VTA_HW_PATH=$TVM_HOME/3rdparty/vta-hw

4°在运行GEMM案例时,运行到一句import pytest导入pytest模块的话,出现了下面的错误。

ModuleNotFoundError: No module named 'pytest'

原因是python3.7自身没有安装pytest模块,这个模块可以直接通过下面命令安装,安装后导入就没有问题了。

py37 -m pip install pytest

5°在python运行示例的时,可能出现ModuleNotFoundError: No module named ‘_ctypes’问题。

这个问题是由python本身安装时,依赖库没有弄完整导致的,后面也没有执行make test进行验证。如果遇到这个问题,可以使用下面的操作,重新安装python,就不会出现这问题了。

1、sudo apt-get update
2、sudo apt-get upgrade
3、sudo apt-get dist-upgrade
4、sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
5、sudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-dev
6、sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
7、sudo apt-get install libssl-dev openssl
8、sudo apt-get install libffi-dev
9、重复编译安装:
	cd Python-3.7.5
	./configure --prefix=/usr/local/python3.7.5
	sudo make
	sudo make test
	sudo make install
10、添加环境变量:
	PATH=$PATH:$HOME/bin:/usr/local/python3.7.5/bin
	ln -s /usr/local/python3.7.5/bin/python3.7 /usr/bin/py37
	ln -s /usr/local/python3.7.5/bin/pip3 /usr/bin/pip37

6°TVM出现download的错误,比如:WARNING:root:Failed to download tophub package for llvm: <urlopen error [Errno 111] Connection refused>问题。

这个问题在社区中解决了,这里记录一下。具体的方法是去GitHub上,下载一个tophub的工程,并把这个工程放在下面的Linux路径下。重新运行,可以解决download系列的错误。

~/.tvm/tophub

在社区中,还提到下面这个警告,这个非常常见,主要是没有做一个auto tuning的结果,需要先tuning来自动探索下。但具体的流程,我自个还有些模糊,等后面懂了,来详细记录下如何解决这个问题。(换句话说,虽然我现在解决了,但由于不太懂,先不记录)
在这里插入图片描述


四、备注

踩坑记录远不止于此,但时间太长,就记住了这几点,后续觉得比较坑的,再补上。

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学不懂啊阿田

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值