TVM 0.9 在 ubuntu(任意版本)上的安装(简单且保姆级!)

2023-10-27

近一年来尝试过TVM在ubuntu16.04 、ubuntu18.04、 ubuntu20.04 以及windows上的安装,也看了官方教程和网上各种博客,踩坑无数,现在总结在Ubuntu上踩坑几率最小的安装流程如下。

(建议学习TVM一开始就在ubuntu上进行,windows上TVM从安装到运行都会有意想不到的bug,我曾经遇到过同样的代码在windows上报奇怪的错而在Ubuntu上就不会)

以TVM0.9 在 ubuntu16.04 的安装为例。

一、下载TVM源码

TVM官网

Install from Source — tvm 0.9.dev0 documentation

1. TVM官网提供的github下载地址:

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

注1:从github上clone到本地后的代码可能不太完整,3rdparty/ 目录下可能会是空的

        这时候就需要手动下载里面的包然后放到3rdparty/ 目录下,这部分我已上传压缩包至csdn大家可免费下载。

3rdparty/下所需包压缩文件

注2:上次我从官网下载的TVM源码在编译时遇到了C++变量重复定义的情况,大概是TVM本身源码与第三方包的变量名有重名,不知道目前这个bug解决没有,如果遇到此情况,可下载下面连接的TVM源码压缩包。

2. TVM完整源码压缩包

        TVM,0.9.dev0包含第三方库的代码-深度学习文档类资源-CSDN下载

        这是另一个博主上传的,亲测可用

二、安装所需依赖库

参照官网教程命令,安装TVM所需依赖库,终端运行以下命令即可。

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

三、下载LLVM

Ubuntu 安装LLVM的坑特别多,加上TVM坑就更多了,但如果要在cpu上用TVM进行优化加速,是一定需要LLVM的。

这里只推荐在LLVM官网下载预编译好的源码这一种方式,亲测这是踩坑几率最小的。

TVM在不同版本ubuntu上的安装流程,其实也只有这里下载的LLVM版本不一样,需要下载ubuntu版本对应的LLVM版本,除此之外,TVM安装过程中其他操作在不同版本ubuntu上都是一样的。

LLVM官方下载页:

http://releases.llvm.org/download.html

进入下载页面后选择与自己ubuntu版本所对应的LLVM预编译版本

点击连接下载压缩包(记得是点击图上紫色部分而不是(sig)

 注:TVM要求LLVM版本大于0.4就行,因此你在某个LLVM版本下找不到对应的ubuntu版本的预编译包下载时,换一个即可,只要LLVM大于0.4就行。我现在是以ubuntu16.04安装为例,因此我就下载的是图上的 LLVM9.0.0 预编译包。

下载到本地后解压。

四、修改TVM/目录下config.cmake文件

1. 进入TVM/根目录,创建 build 文件夹,将 cmake/ 下的文件 config.cmake 复制到 build文件夹下

mkdir build
cp cmake/config.cmake build/

2. 然后对 build/ 下的 config.cmake 文件里参数进行修改。

注:这里主要是根据自己对TVM使用需求来对TVM进行一些编译时的设置,其实就是选择开启TVM的哪些功能。

 例如我需要TVM编译在CUDA上可执行的代码则将  “set(USE_CUDA OFF)” 改为 “set(USE_CUDA ON)”,其他等类似。

下面是重点:把 build/config.cmake 文件中的 “set(USE_LLVM OFF)” 中的“OFF”                                  改为   前面下载的LLVM预编译包    解压后的文件里的   bin文件夹下的“llvm-config”的路径

 这里的路径一定要正确,可以先进入到 llvm/bin/ 下使用 pwd 命令查看绝对路径,然后加上“llvm-config”复制到 config.cmake 里去。

 五、编译TVM

 在 tvm/build/ 下分别运行以下命令,进行编译

cmake ..
make -j4 #几个核就j几

等待编译完成

如果一直没报错则表示安装成功。

六、添加python环境变量

TVM安装成功后,需要把TVM路径添加到python环境变量中,这样python在import tvm时才能成功导入。

终端运行  vim ~/.bashrc

在环境变量中添加以下两行,其中 “/path/to/tvm” 为tvm的根路径,即前面解压后的“tvm/”的绝对路径。

export TVM_HOME=/path/to/tvm  #/path/to/tvm 为tvm的根路径,即前面解压后的“tvm/”的绝对路径
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}

修改好后保存退出

再在终端运行 source ~/.bashrc

使环境变量生效

 至此,TVM就全部安装成功了!

七、验证python中TVM能否成功导入

终端运行以下命令

 >>  python

 >>  import tvm

 >>  print(tvm.__version__)

 如输出无误则安装成功!

参考资料:

【KAWAKO】TVM-在ubuntu服务器上的安装_KKK_KAWAKO的博客-CSDN博客_tvm ubuntu

TVM学习(一)安装TVM Ubuntu16.04安装TVM0.8+clang-llvm12.0_!学习使我快乐!的博客-CSDN博客_tvm安装

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

TVM 0.9 在 ubuntu(任意版本)上的安装(简单且保姆级!) 的相关文章

  • Vimeo API:获取下载所有视频文件的链接列表

    再会 我正在尝试从 Vimeo 帐户获取所有视频文件的列表 直接下载的链接 有没有办法在 1 GET 请求中做到这一点 好的 如果是API限制的话 就100倍 我有硬编码脚本 我在其中发出 12 个 GET 请求 1100 多个视频 根据文
  • 如何让“conda”安装程序查找“PyPi”包

    我试图使用conda http conda pydata org docs using pkgs html managing packages包管理器来安装我的 Python 包 最近 我遇到了 Anaconda org 存储库中不存在我需
  • 在函数内的 for 循环上使用 tqdm 来检查进度

    我正在使用 for 循环迭代目录树内的一大组文件 这样做时 我想通过控制台中的进度条来监视进度 因此 我决定使用 tqdm 来实现此目的 目前 我的代码如下所示 for dirPath subdirList fileList in tqdm
  • DynamodB:如何更新排序键?

    该表有两个键 filename 分区键 和eventTime 排序键 我要更新eventTime对于某些filename Tried put item and update item 发送相同的filename与新的eventTime但这些
  • pyCUDA无法打印结果

    最近 我使用 pip 为我的 python3 4 3 安装 pyCUDA 但我在测试示例代码时发现 https documen tician de pycuda tutorial html getting started https doc
  • 使用 Python 和 lmfit 拟合复杂模型?

    我想适合椭偏仪 http en wikipedia org wiki Ellipsometry使用 LMFit 将数据转换为复杂模型 两个测量参数 psi and delta 是复杂函数中的变量rho 我可以尝试将问题分离为实部和虚部共享参
  • Python,Google Places API - 给定一组纬度/经度查找附近的地点

    我有一个由商店 ID 及其纬度 经度组成的数据框 我想迭代该数据框 并使用 google api 为每个商店 ID 查找附近的关键地点 例如输入 Store ID LAT LON 1 1 222 2 222 2 2 334 4 555 3
  • Python 内置对象的 __enter__() 和 __exit__() 在哪里定义?

    我读到每次使用 with 时都会调用该对象的 enter 和 exit 方法 我知道对于用户定义的对象 您可以自己定义这些方法 但我不明白这对于 打开 等内置对象 函数甚至测试用例是如何工作的 这段代码按预期工作 我假设它使用 exit 关
  • 如何用函数记录一个文件?

    我有一个带有函数 lib py 但没有类的python 文件 每个函数都有以下样式 def fnc1 a b c This fonction does something param a lalala type a str param b
  • multiprocessing.Queue 中的 ctx 参数

    我正在尝试使用 multiprocessing Queue 模块中的队列 实施 https docs python org 3 4 library multiprocessing html exchang objects Between p
  • 使用会话在 Django 中将文件从一个视图传递到另一个视图

    我当前的工作项目要求我允许用户上传各种格式的文件 目前仅处理 CSV 格式 然后使用包含的数据来绘制图表Pandas http pandas pydata org 图书馆 我决定将图形渲染到模板的最简单方法是为图形创建特定视图 然后将图像从
  • Python在没有pandas的情况下解码excel表

    我正在尝试在 python 中读取 excel 文件而不使用pandas or xlrd 我一直在尝试将结果转换为bytes to utf 8没有任何成功 xls 文件中的数据 colA colB colC spc 1D0 20190705
  • 哪种方式最适合Python工厂注册?

    这是一个关于这些方法中哪一种被认为是最有效的问题 Pythonic 我不是在寻找个人意见 而是在寻找惯用的观点 我的背景不是Python 所以这会对我有帮助 我正在开发一个可扩展的 Python 3 项目 这个想法类似于工厂模式 只不过它是
  • Python脚本从字母和两个字母组合生成单词

    我正在编写一个简短的脚本 它允许我使用我设置的参数生成所有可能的字母组合 例如 b a 参数 单词 5 个字母 第三 第五个字母 b a 第一个字母 ph sd nn mm 或 gh 第二 第四个字母 任意元音 aeiouy 和 rc 换句
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 在Python中使用pil读取tif图像时出现值错误?

    我必须读取尺寸的tif图像2200 2200并输入 uint16 我将 PIL 库与 anaconda python 一起使用 如下所示 from PIL import Image img Image open test tif img i
  • 如何在引发异常时将变量传递给异常并在异常时检索它?

    现在我只有一个空白的异常类 我想知道如何在引发变量时给它一个变量 然后在 try except 中处理它时检索该变量 class ExampleException Exception pass 为其构造函数提供一个参数 将其存储为属性 然后
  • tf.print() vs Python print vs tensor.eval()

    看来在Tensorflow中 至少有三种方法可以打印出张量的值 我一直在读here https www freecodecamp org news debugging tensorflow a starter e6668ce72617 an
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • ProcessPoolExecutor 传递多个参数

    ESPN播放器免费 class ESPNPlayerFree def init self player id match id match id team 团队名单1 277906 cA2i150s81HI3qbq1fzi za1Oq5CG

随机推荐

  • springboot 查看各种依赖的版本(idea工具):

    说明 跟踪 ctrl mouse left
  • CopyTranslator 翻译神器的安装与使用

    download https github com copytranslator copytranslator releases guide https copytranslator github io guide 问题 第一次安装后就会默
  • macbook打印出现乱码解决方案

    macbook打印出现乱码解决方案 参考文章 1 macbook打印出现乱码解决方案 2 https www cnblogs com wenluren p 11325669 html 3 https www javazxz com thre
  • ddos攻击详解

    分布式拒绝服务攻击 DDoS 攻击 是一种网络攻击 旨在通过向目标系统发送大量的流量或请求 以使其无法正常运行或响应合法用户的请求 这种攻击通常涉及多台被感染的计算机 这些计算机被称为 僵尸 或 肉鸡 并被攻击者控制 以协同发动攻击 DDo
  • 03-java数据结构之链表的学习(单链表、双链表等)

    文章目录 1 链表 1 1 链表的介绍 2 单链表 2 1 单链表的显示 2 2 单链表的添加操作 2 2 1 直接添加到链表的尾部 2 2 2 根据no插入到指定位置 2 3 单链表节点的修改 2 4 单链表节点的删除 3 双向链表 3
  • 大数据从入门到精通(超详细版)之Hadoop详解

    前言 嗨 各位小伙伴 恭喜大家学习到这里 不知道关于大数据前面的知识遗忘程度怎么样了 又或者是对大数据后面的知识是否感兴趣 本文是 大数据从入门到精通 超详细版 的一部分 小伙伴们如果对此感谢兴趣的话 推荐大家按照大数据学习路径开始学习哦
  • Ubuntu 16.04下deb包的安装及常用命令

    如果ubuntu要安装新软件 已有deb安装包 例如 iptux deb 但是无法登录到桌面环境 那该怎么安装 答案是 使用dpkg命令 dpkg命令常用格式如下 sudo dpkg I iptux deb 查看iptux deb软件包的详
  • 数据对象总结

    JavaScript对象 对象属于一种复合的数据类型 在对象中可以存储多个不同数据类型的属性 JavaScript 中的所有事物都是对象 字符串 数值 数组 函数 此外 JavaScript 还允许自定义对象 JavaScript 提供多个
  • C++函数调用那些事

    C 函数调用 C 形参带默认值的函数 带默认值的形参必须从右往左给 给出以下实例 int sum int x int y 无默认值函数 int sum int x int y 0 y有默认值 int sum int x 0 int y 0
  • c#初级

    类 创建一个类 public class A 访问修饰符 public公有 protected 受保护的 private私有的 public 在类内和类外都可以使用 public int a 定义一个字段a protected 他只能在类内
  • 模运算

    http blog csdn net ld326 article details 7880429 模运算即求余运算 模 是 Mod 的音译 模运算多应用于程序编写中 Mod的含义为求余 模运算在数论和程序设计中都有着广泛的应用 从奇偶数的判
  • 【Flutter造轮子】Text组件显示指定行文字,若有超出加...点击查看更多

    效果如上图 如果超出 显示 点击查看更多 正好凑够4行 再添加一个字便超出4行 原理 使用TextPainter逐渐添加字尝试 该组件超出的话 其属性didExceedMaxLines为true 代码如下 文字超出一定行 自动隐藏 并添加入
  • AI绘画指南:在CentOS7中训练Lora模型

    本次训练在centos7中完成 使用的训练脚本是 https github com Akegarasu lora scripts git https github com kohya ss sd scripts git 一 安装GPU环境
  • 【动态规划】合唱队形

    题目描述 n位同学站成一排 音乐老师要请其中的 n K 位同学出列 使得剩下的K位同学排成合唱队形 合唱队形是指这样的一种队形 设K位同学从左到右依次编号为1 2 K 他们的身高分别为T1 T2 TK 则他们的身高满足T1 lt Ti l
  • 关于代码家(干货集中营)共享android端知识点综合整理

    关于代码家 干货集中营 共享android端知识点综合整理 标签 开源项目自定义控件教程特效工具 2016 03 08 13 23 8520人阅读 评论 2 收藏 举报 分类 移动开发 28 版权声明 本文为博主原创文章 未经博主允许不得转
  • 探索MySQL错误: 1241 - Operand should contain 1 column(s)问题解决方案

    AI绘画关于SD MJ GPT SDXL百科全书 面试题分享点我直达 2023Python面试题 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java python面试题 项目实战 AI文本 OCR识别最佳实践 A
  • Qt中moc问题(qt moc 处理 cpp)

    我用的是QT Designer 一般只有用到信号signals和槽slots时才会用到MOC 因为采用信号signals和槽slots是QT的特性 而C 没有 所以采用了MOC 元对象编译器 把信号signals和槽slots部分编译成C
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • libevent源码学习(5):TAILQ_QUEUE解析

    目录 前言 结点定义 链表初始化 链表查询及遍历 链表查询 链表遍历 插入结点 头插法 尾插法 前插法 后插法 删除结点 替换结点 总结 前言 在libevent中使用到了TAILQ数据结构 看了一下其他资料 发现TAILQ这一数据结构不仅
  • TVM 0.9 在 ubuntu(任意版本)上的安装(简单且保姆级!)

    近一年来尝试过TVM在ubuntu16 04 ubuntu18 04 ubuntu20 04 以及windows上的安装 也看了官方教程和网上各种博客 踩坑无数 现在总结在Ubuntu上踩坑几率最小的安装流程如下 建议学习TVM一开始就在u