TVM编译安装

2023-11-10

本文是在已大致了解tvm功能和架构的基础上,根据官方文档,在x86-64 Ubuntu 18.04,GPU,Pytorch1.8.0上安装TVM的流程。

参考文档

TVM安装官方文档
llvm下载链接

1.下载源代码

tvm官网下载源代码(建议),或者可通过github下载

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

2.构建依赖库

统一tvm所需要的环境,包括Python,gcc,cmake等,有则更新无则下载(此步可省略,运行时如果报错缺失包再安装)

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.构建

3.1复制并更改编译参数

从tvm/cmake/文件夹下复制config.cmake到新创建的build目录(tvm子目录)下

mkdir build
cp cmake/config.cmake build

在这里插入图片描述

3.2下载llvm

3.2.1下载/编译

官网下载对应的,已经构建好的(Pre-Built Binaries)的版本,我下载的是llvm9.0.0的Ubuntu18.04版本
在这里插入图片描述
解压

xz -d clang+llvm-xxx.tar.xz
tar -xf clang+llvm-xxx.tar

一些平台的型号并不在llvm pre-built列表中(如x64-redhat,安装不匹配版本执行会出现segmentation fault),此时需要下载llvm的源码进行编译安装,过程也比较简单,记录如下(需要提前安装clang):

wget https://github.com/llvm/llvm-project/releases/download/llvmorg-9.0.1/llvm-9.0.1.src.tar.xz
xz -d llvm-9.0.1.src.tar.xz
tar -xf llvm-9.0.1.src.tar
cd llvm-9.0.1.src/
mkdir build
cmake -DCMAKE_BUILD_TYPE=DEBUG -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_ENABLE_PROJECTS="clang"  -DLLVM_OPTIMIZED_TABLEGEN=ON -DLLVM_INCLUDE_TESTS=OFF ..
make 
make install

3.2.2添加路径

tvm目录下build目录下的config.cmake文件的set(USE_LLVM OFF)改为set(USE_LLVM path)
path是llvm文件下bin文件下llvm_config的路径,例如
set(USE_LLVM /path/to/your/llvm/bin/llvm-config)

3.3构建运行(tvm目录下)

cd build
cmake ..
make -j64

如果遇到gcc/g++版本不匹配的问题(一般需要cstd-17)需要安装新版本的gcc/g++,并且在CMakeLists.txt中指定编译器

set(CMAKE_C_COMPILER /pathtogcc/bin/gcc)
set(CMAKE_CXX_COMPILER /pathtogcc/bin/g++)

3.4修改Python环境

修改Python环境,加入tvm路径
根目录下的.bashrc文件末尾,加入如下两行

export TVM_HOME=/path/to/tvm # 你的TVM的绝对路径
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}

3.5加入c++ test(tvm目录下,不必需,可省略)

git clone https://github.com/google/googletest
cd googletest
mkdir build
cd build
cmake ..
make
sudo make install

4测试tutorial

可以运行tvm目录下自带的tutorials文件中,与自身硬件相匹配的程序(我选的是from_onnx.py从onnx中导出模型)。必须使用python3,如果有模块未安装,使用pip3

5.遇到问题汇总

  • make -j4过程遇到
    在这里插入图片描述
    解决:缺啥装啥,安装xml2-dev
apt-get install libxml2-dev

此外还有

apt-get install libtinfo-dev #缺linfo
apt-get install zlib1g-dev   #缺lz
  • Python导入不进来
    在这里插入图片描述
    python3.7以上版本才能用,
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
tar -zxvf Python-3.7.0.tgz
mkdir /usr/local/python3_7
cd Python-3.7.0
./configure --prefix=/usr/local/python3_7
make && make install
ln -s /usr/local/python3_7/bin/python3.7 /usr/bin/python3_7
ln -s /usr/local/python3_7/bin/pip3.7 /usr/bin/pip3
  • No module named ‘_ctypes’
apt-get install libffi-dev

重新编译Python(./configure make&& make install)

  • numpy装不上
报错:Could not fetch URL

解决方案:更改镜像源

pip3 install --upgrade pip -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip3 install numpy -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip3 install decorator -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip install xgboost==1.5.0 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com # TVM调优时会用到xgboost模型,版本建议1.5.0
pip3 install torch==1.8.0 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip3 install scipy -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip3 install attrs -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip3 install Pillow -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

此外还有

http://mirrors.aliyun.com/pypi/simple/ 阿里云

https://pypi.mirrors.ustc.edu.cn/simple/  中国科技大学

http://pypi.douban.com/simple/  豆瓣

https://pypi.tuna.tsinghua.edu.cn/simple/ 清华大学
  • autotuning时遇到
    RuntimeError: Cannot find any valid schedule for xxx
    问题是没有安装cloudpickle包

在使用cmake编译工具的时候,报错

CMake Error at /path/to/cmake/share/cmake-3.20/Modules/CMakeTestCCompiler.cmake:66 (message):
  The C compiler

    "/usr/bin/cc"

  is not able to compile a simple test program.

解决方法:
cmake后面加入下面两个选项
-DCMAKE_CXX_COMPILER=KaTeX parse error: Double subscript at position 22: … g++) -DCMAKE_C_̲COMPILER=(which gcc)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TVM编译安装 的相关文章

随机推荐

  • 推荐系统 用户画像 标签聚类 个性化搜索

    最近在做短视频推荐 和别的部门配合着做 我们部门做用户画像这一部分 回头看看 我们部门以前做的用户画像只能称之为 所谓的用户画像 如果一个人不懂用户画像还好指挥来指挥去真的让人无言 不知道其他公司的有没有这样的人儿那 哈哈 扯远了 言归正传
  • linux系统编程(五)针对linux系统中文件的IO操作

    文章目录 1 系统调用 2 C标准库文件IO函数 3 open close函数 3 1 函数原型 3 2 常用参数 3 3 open常见错误 4 文件描述符 4 1 PCB进程控制块 4 2 文件描述图表 4 3 最大打开文件数 4 4 F
  • LVS负载均衡之--Keepalived模式(具详细)

    前言 前面和拐友们一起掌握了NAT和DR模式 这章来看一下负载均衡里的最后一种Keepalived模式 在生产中这个模式用的是还是比较广泛的 目录 一 Keepalived概述 1 2Keepalived的工作原理 1 3Keepalive
  • 登录时发起的请求是Get还是Post?Get和Post的区别

    为了保证信息的安全性 注册 登录等操作通常都会使用POST请求 GET请求一般用来获取信息 1 根据HTTP规范 GET用于信息获取 GET请求的数据会附在URL之后 就是把数据放置在HTTP协议头中 以 分割URL和传输数据 参数之间以
  • CSS总结第七天

    day09 前端基础CSS第七天 学习目标 能够使用精灵图 能够使用字体图标 能够写出 CSS 三角 能够写出常见的 CSS 用户界面样式 能够说出常见的布局技巧 1 精灵图 重点 1 1 为什么需要精灵图 一个网页中往往会应用很多小的背景
  • IDEA 类名及方法名为红色,但是能正常启动-处理办法

    今天在切换分支过后 idea里面很多类名 方法名报红 提示类等找不到 但是不影响功能 解决办法 点击 idae 的 File gt Invalideate Caches Restart 清除缓存并重启即可 UG7O9VKKH6 eyJsaW
  • Spark:常用算子总结大全

    目录 park的算子的分类 从大方向来说 Spark 算子大致可以分为以下两类 1 Transformation 变换 转换算子 这种变换并不触发提交作业 完成作业中间过程处理 2 Action 行动算子 这类算子会触发 SparkCont
  • 小白的高德地图初体验(二)——聚合点

    小白的高德地图初体验 二 聚合点 说到高德地图 肯定要推荐官方文档 传送门 走你 小白的高德地图初体验 一 打点 小白的高德地图初体验 二 点聚合 小白的高德地图初体验 三 轨迹 小白的高德地图初体验 四 矢量图形 小白的高德地图初体验 五
  • Handler processing failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize

    最近把项目中es 从1 7 3 升级 到 2 2 2 遇到如下异常 exception org springframework web util NestedServletException Handler processing faile
  • Android Studio 2.4 Preview(译文)

    原文地址 http tools android com tech docs android profiler Android的探查Android Studio中预览2 4 新的Android探查器在Android 2 4工作室预览窗口代替了
  • Palindrome Partitioning

    Given a string s partition s such that every substring of the partition is a palindrome Return all possible palindrome p
  • pip 和conda

    区别 pip是Python包的通用管理器 conda是一个与语言无关的跨平台环境管理器 pip在任何环境中安装python包 conda需要安装在conda环境中装任何包 Pip代表Pip Installs Packages 是Python
  • seaborn palette参数各配色方案及显示效果

    使用方法 以采用Paired r配色方法为例 通过调用barplot palette Spectral r 来使用配色 Paired r Accent Accent r Blues Blues r BrBG BrBG r BuGn BuGn
  • STM32 基础系列教程 5 – 系统定时器

    前言 学习stm32 systime的使用 用基本定时器产生定时1ms定时中断 用于参生1ms系统时钟节拍 并实现将1ms 节拍改成500us 或其它时间功能 并实产生的时间节拍为机基准实现控制LED闪烁 示例详解 基于硬件平台 STM32
  • Centos7.5 防火墙关闭但是除22端口其他端口无法访问问题

    centos7系统 关闭 firewalld防火墙 但是除了22端口 其余端口无法被外界访问 本地访问正常 我这里是服务器缓存问题 将服务器防火墙重启刷新一下就可以正常使用了 根据下面命令 操作 firewalld 防火墙 启动 syste
  • 关于前后台日期格式化问题 ,@JsonFormat、@JSONField、@DateTimeFormat

    大家都知道可能前台表单提交后台 或者后台 实体类json 序列化到前台可能格式不是我们想要的情况 这时候可能就需要上面三个注解来帮忙 但是 本人在项目使用过程中 使用 JsonField 一直失效 百思不得其解 难道是 在springboo
  • 爬虫之添加代理(五)

    验证代理是否可用 try telnetlib Telnet 221 15 192 96 port 1080 timeout 3 except print ip无效 else print ip有效 添加代理 添加proxy属性 import
  • 【机器学习】GRU 讲解

    有任何的书写错误 排版错误 概念错误等 希望大家包含指正 在阅读本篇之前建议先学习 RNN 讲解 LSTM 讲解 3 GRU 3 1 网络结构 GRU 是循环神经网络的一种 和 LSTM 一样 是为了解决长期依赖问题 GRU 单元结构如下
  • Overleaf使用tips(自己随手记)

    使用中文输入 导入包 usepackage UTF8 ctex 切换编译器为XeLatex 另起一段 直接空几个行就行 比如 注释 选中后ctrl 标题的使用 section 这是一级标题 subsection 这是二级标题 subsubs
  • TVM编译安装

    本文是在已大致了解tvm功能和架构的基础上 根据官方文档 在x86 64 Ubuntu 18 04 GPU Pytorch1 8 0上安装TVM的流程 参考文档 TVM安装官方文档 llvm下载链接 1 下载源代码 从tvm官网下载源代码