ubuntu18.04 TVM编译安装

因为tvm版本变化较大,v5.0-v6.0目录结构都不一样,所以安装要参照官方文档

https://tvm.apache.org/docs/install/from_source.html

 

之前在服务器上按照官方文档装都装不上,在运行sudo apt-get update命令时候一直无法更新软件列表,我也没把这个问题放到心上,后来发现公司的代理不能连上阿里源,所以我把源换回了官方,后来按照官方文档装就好了,但是还有几个python的依赖没装上,以后再说吧。

源文件 /etc/apt/sources.list

换源的时候记得要备份以前的源文件,换完了不好使也可以直接换回去

 

ubuntu18.04官方源

# deb cdrom:[Ubuntu 18.04.3 LTS _Bionic Beaver_ - Release amd64 (20190805)]/ bionic main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://us.archive.ubuntu.com/ubuntu/ bionic main restricted
# deb-src http://us.archive.ubuntu.com/ubuntu/ bionic main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://us.archive.ubuntu.com/ubuntu/ bionic-updates main restricted
# deb-src http://us.archive.ubuntu.com/ubuntu/ bionic-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://us.archive.ubuntu.com/ubuntu/ bionic universe
# deb-src http://us.archive.ubuntu.com/ubuntu/ bionic universe
deb http://us.archive.ubuntu.com/ubuntu/ bionic-updates universe
# deb-src http://us.archive.ubuntu.com/ubuntu/ bionic-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu 
## team, and may not be under a free licence. Please satisfy yourself as to 
## your rights to use the software. Also, please note that software in 
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://us.archive.ubuntu.com/ubuntu/ bionic multiverse
# deb-src http://us.archive.ubuntu.com/ubuntu/ bionic multiverse
deb http://us.archive.ubuntu.com/ubuntu/ bionic-updates multiverse
# deb-src http://us.archive.ubuntu.com/ubuntu/ bionic-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://us.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src http://us.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu bionic partner
# deb-src http://archive.canonical.com/ubuntu bionic partner

deb http://security.ubuntu.com/ubuntu bionic-security main restricted
# deb-src http://security.ubuntu.com/ubuntu bionic-security main restricted
deb http://security.ubuntu.com/ubuntu bionic-security universe
# deb-src http://security.ubuntu.com/ubuntu bionic-security universe
deb http://security.ubuntu.com/ubuntu bionic-security multiverse
# deb-src http://security.ubuntu.com/ubuntu bionic-security multiverse

换源之后进行更新

sudo apt-get update
sudo apt-get upgrade

 

新建目录存放tvm源码

sudo mkdir tvm

 

clone代码到本地

sudo git clone --recursive https://github.com/apache/tvm tvm

--recursive一定要加上

 

 

查看一下源码结构

 

 

安装需要的库

sudo apt-get install -y python3 python3-dev python3-setuptools gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-dev

 

在tvm目录中新建build文件夹,后面再build文件夹中进行编译

sudo mkdir build

将配置文件拷贝到build文件夹中

sudo cp cmake/config.cmake build

 

在开始编译前需要下载llvm

下载地址:https://releases.llvm.org/download.html

直接选择自己系统对应的版本

 

 

 点击下载,下载到对应目录中,查看下文件的全名然后进行解压

sudo xz –d clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz
sudo tar –xvf clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar

我的路径是这样的

 

 接下来将路径添加到环境变量中,完整路径可以进入到llvm文件夹中,然后用pwd命令获取

sudo vim ~/.bashrc

在.bashrc文件的末尾加上llvm的路径,每个人的路径不一样,要看自己解压的位置

 

 然后

source ~/.bashrc

输入命令

llvm-config --version

查看配置是否成功

 

 成功

 

然后要修改build文件夹中的config.cmake文件,将如下选项改为ON

 

 因为我用llvm所以llvm设置为ON,如果用到其他东西,对应选项都要置为ON,详细参照官方文档

修改完成后开始编译tvm

 

先进入到build目录

cd /home/montage/tvm/build

开始编译

sudo cmake ..

 

如果编译的时候出现找不到llvm-config的情况,如下:

CMake Error at cmake/utils/FindLLVM.cmake:47 (find_package):
  Could not find a package configuration file provided by "LLVM" with any of
  the following names:

    LLVMConfig.cmake
    llvm-config.cmake

  Add the installation prefix of "LLVM" to CMAKE_PREFIX_PATH or set
  "LLVM_DIR" to a directory containing one of the above files.  If "LLVM"
  provides a separate development package or SDK, be sure it has been
  installed.
Call Stack (most recent call first):
  cmake/modules/LLVM.cmake:31 (find_llvm)
  CMakeLists.txt:337 (include)


-- Configuring incomplete, errors occurred!
See also "/home/aiteam/tvm/build/CMakeFiles/CMakeOutput.log".
See also "/home/aiteam/tvm/build/CMakeFiles/CMakeError.log".

说明你的服务器中安装了多个版本的llvm,cmake不能找到明确位置

解决方法:

找到之前llvm下载安装的位置,然后将这个llvm-config文件的位置加到tvm/build/config.cmake中

 

 

 

 把ON替换成llvm的位置,如红线所示

再编译就没问题了

 

 

sudo make -j4

 编译完成

 

安装conda环境

服务器上已经装了anaconda,所以直接运行命令就可以了

 

 出现问题,是网络问题,anaconda是一个集成环境,所以我觉得不装在conda中,直接装在python里应该也不影响,所以继续安装python包

 

安装python包

官方文档一共提供了两种方法

 

方法1

在~/.bashrc中加入路径,然后保存退出,这里TVM_HOME路径通过pwd查看

 

方法2

在环境变量中加入

export MACOSX_DEPLOYMENT_TARGET=10.9

进入tvm文件夹中的python文件夹执行如下命令

python setup.py install --user

 方法2失败,我在自己的虚拟机上也试过这么装,也是同样的错误,所以还是推荐用第一种方法

 

安装python依赖

pip3 install --user numpy decorator attrs

这个是必需的依赖

 

pip3 install --user tornado

使用RPC Tracker需要安装依赖

 

pip3 install --user tornado psutil xgboost cloudpickle
使用自动debug需要安装的依赖

就只有前两个包能找到,其他的都找不到
尝试运行一下官方demo
from __future__ import absolute_import, print_function

import tvm
import tvm.testing
from tvm import te
import numpy as np

# Global declarations of environment.

tgt_host = "llvm"
# Change it to respective GPU if gpu is enabled Ex: cuda, opencl, rocm
tgt = "cuda"


n = te.var("n")
A = te.placeholder((n,), name="A")
B = te.placeholder((n,), name="B")
C = te.compute(A.shape, lambda i: A[i] + B[i], name="C")
print(type(C))

 

 在spyder中也可以运行

 

基本上算是成功了,docker安装官网的文档似乎有些问题,所以还是得自己编译安装

 

如果编译都成功了,但是在python中导入tvm时出现如下错误

 

 可能是你的python版本过低,这是我在虚拟机上安装tvm遇到的情况,在python3.6中运行就正常了

 

posted @ 2021-01-08 11:11  Wangtn  阅读(2279)  评论(0编辑  收藏  举报