TVM的安装过程

2023-11-02

最近在看深度学习编译器相关的工作,其中FlexTensor给我留下了比较深刻的印象,加上这项工作是开源的,所以想看看这份工作的源码。首先是怎么把工程跑起来,FlexTensor倚仗TVM做代码生成,所以首先得安装TVM。

首先给出官方网站的安装教程TVM安装流程-从源码安装,最好的安装步骤就是从上面一步步来,正如教程所说,整个安装过程分两个大步骤:

1.从C++代码构建共享库
2.安装语言支持

首先是获取源码到本地并解压:
在这里插入图片描述在这里插入图片描述在写这篇文章时,tvm源码的版本是v0.8.0,下载下来解压之就可以了,我使用的是WSL2来做这些事情。(写完这篇博客后回头看,奉劝各位能用虚拟机的用虚拟机,能用正儿八经的Ubuntu的就用Ubuntu,WSL这个过程走的有点坎坷,WSL旨在Windows平台下体验Linux开发环境,写轻量级代码没问题,做这种破活确实坑很多)

如果是开发者,这里也可以从GitHub上下载源码,按下不表:
在这里插入图片描述
随后进入第一步,构建共享库
一、构建共享库
首先文档中给出了一些对工具链的最低要求,要完成对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

这块插入一个小消息,如果按照这个版本来安装工具链,cmake的最低版本应该达不到llvm安装的最低配置,所以cmake应该到官网上下载一个比较新的版本。我是按照一个网上的教程来做的,其实也很简单,你可以选择下载源码到本地来编译,也可以选择下载预编译好的版本来下载,我下载的是预编译好的版本。
在这里插入图片描述
解压之,然后给一个软链接让cmake指向这个解压之后的文件夹中的/bin/cmake
在这里插入图片描述
然后查看一下当前的cmake版本,应该是已经能正确找到cmake了:
在这里插入图片描述
完成这一步之后就是配置config.cmake,在这里可以对TVM进行编译选项配置,这一步也可以通过在命令行里向TVM传入选项来实现,两者均可。
在这里插入图片描述
这里可以根据自己的需求来配置config.cmake文件,比如在后端开启CUDA、开启debug帮助、对中间表示(IR)进行debug等。 我在自己的辣鸡轻薄核显本上搭TVM, CUDA这方面有是不可能有的,这辈子不可能有的 很多选项我暂时没有动,但是这里注意TVM在后端使用LLVM为CPU做代码生成,所以config.cmake中的LLVM支持应该是要打开的,如下图:
在这里插入图片描述
所以这里引入的另一个问题就是安装LLVM了,和cmake一样,可以从官网上下载源码到本地编译,不过这个花费的时间很长。还可以从官网上下载预编译好的版本,我是下载的预编译版本。
在这里插入图片描述
因为TVM对LLVM的版本要求并不高(>=Version 4.0),所以在官网上找一个适合自己系统的版本就可以了,我选择的是10.0.0:
在这里插入图片描述
下载预编译版本到本地后,可以参考这篇博客中的步骤来完成LLVM的配置。安装完成之后应该可以直接在命令行中找到LLVM,如下图:
在这里插入图片描述
随后按照教程上的要求完成接下来的配置,可以手动设置来帮助TVM找到LLVM的配置文件,或者在只有一个LLVM版本可用时,也可以直接使用set(USE_LLVM ON)来让TVM自动寻找可用版本的LLVM。还有对于pytorch用户,可以选择像第三个箭号说明的那样完成设置,这部分也是直接在config-cmake中直接添加或者简单的修改即可,因为我习惯用pytorch,所以在最后加入了:

set(USE_LLVM "PATH/TO/LLVM-CONFIG --link-static")
set(HIDE_PRIVATE_SYMBOLS_ON)

这两行,注意PATH/TO/LLVM-CONFIG用改替换成自己的路径。
在这里插入图片描述
然后就可以去编译TVM源码和相关支持库了:
在这里插入图片描述
也就是在build目录下分别执行这两个命令:

cmake ..
make -j4	# 启用四个线程编译,如果

这将会花费一段时间,请安静等待,完成之后应该如下所示:
在这里插入图片描述
然后这里提到,其实tvm文件夹中已经有一个写好的makefile文件可以帮助我们完成上述的所有动作。还说明了可以将build文件夹的位置建立在其他地方,但是这样需要在环境变量中使用TVM_BUILD_PATH指明一下build文件夹的位置,如果不指明的话就默认在tvm文件夹下,等等。
在这里插入图片描述
二、安装语言支持
注意,这里需要python的版本大于3.8,起码我这边是这样的,可能是因为我用的是WSL2,所以在最上面的工具链最低要求安装是满足不了的,安装的python是3.6的版本,故在此出错。如果你没有遇到这个坎,说明你可能用的是虚拟机或者真正的Ubuntu系统,这里可以略过。

嗯,还有就是要提前安装numpy…,否则也会直接寄:

sudo apt install python3-numpy
sudo apt install python3-scipy	# 唉,顺手把这个也装了吧
# 如果你不确定软件包的名字可以执行下面的命令行,看看有哪些numpy的软件包可用
apt-cache search numpy

然后看官方文档,这里提到有两种方法安装python语言支持,我们选择第二种:
在这里插入图片描述
也就是进入TVM目录下的python文件夹,执行以下命令行:

python setup.py install --user
# python3.8 setup.py install ---user

等待它执行完成,这时候应该会如下图所示:
在这里插入图片描述
接下来就是安装具体的依赖库,依照官方教程所言有些是可选的
在这里插入图片描述
其中必要的依赖就是第一条,也就是在命令行中执行以下命令:

pip3 install --user numpy decorator attrs

我当时出了一点小错误
在这里插入图片描述
如果你也遇到了同样的问题(没有就算了),说明还需要安装一些库:

 sudo apt install python3.8-dev # 不一定叫python3.8-dev,你得找最适合自己的

然后再执行安装依赖库的命令行,这下应该可以了:
在这里插入图片描述
RPC Tracker和auto-tuning可以按照自己的喜好来添加,我安装了一个auto-tuning,因为这是AutoTVM的精华所在。也就是执行以下命令行即可:

pip3 install --user tornado psutil xgboost cloudpickle

在这里我也多少踩了一些小坑,执行官方文档中的命令行时出现了以下报错:
在这里插入图片描述
那就去安装pybind11去呗:
在这里插入图片描述
安装完之后发现,又有新的报错:
在这里插入图片描述
接着安呗,这些都是安装scipy需要的一些库,从这里找到的解决方案:

sudo apt install gfortran libopenblas-dev liblapack-dev

然后呢,就是另外一个错误:
在这里插入图片描述
然后接着安装pythran:

pip3 install --user pythran

然后就是开始安装scipy,这里应该也有些依赖要准备一下,可以参考一下这篇文章的做法,我们从源码去安装一下scipy可能会好一点,在这里我选择的是scipy v1.4.0的这个版本,我下载的是这个:
在这里插入图片描述
下载到本地之后安装一下,应该是可以行得通的:
在这里插入图片描述
说了一大堆,这其实都是在执行完:

pip3 install --user tornado psutil xgboost cloudpickle

这个命令行之后的一些小错误和其解决方案,现在可以再试着执行一下上面的命令行,看看还有没有什么问题,我这儿是没问题了:
在这里插入图片描述
到这应该该做的都做了,看看tvm能不能用吧:
在这里插入图片描述

BTW,这里貌似对cmake的版本有点要求,cmake version > 3.10,WSL上从apt里安装的cmake貌似不太行,不过正如前面所述,我使用的是3.17的预编译版本,这里应该没啥问题,xgboost是Tianqi Chen et al做的一篇漂亮的工作,可以去读一下他们的这篇paper。

最后还有一些在MacBook M1上的额外tips,在此按下不表,有需求的自己可以去摸索一下。

大概就是这些东西,最后就是TVM还有docker提供,也可以用那个,当然也欢迎踩上面的坑。写在最后是不是很气人?:)

Have fun with TVM!

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

TVM的安装过程 的相关文章

  • Markdown/Github:作为列表子项的代码块的语法突出显示

    在Github MD中 如果我们想在列表的子级时启用代码块 我们需要用8个空格来表示它 但是如何让该代码块具有语法高亮功能呢 以下代码无法按预期工作 1 foo python print bar 2 bar python print bar
  • 自定义 github 页面的预览图像

    是否可以自定义在将链接发布到 github 页面时看到的预览图像 我觉得他们专门解决了 github 存储库的问题here https docs github com en github administering a repository
  • git commit 给出错误:空提交集已通过

    当尝试恢复到以前的提交时 我尝试了 git revert no commit 0766c053 HEAD 然而这给出了一个错误 empty commit set passed 问题 该错误是什么意思 以及出了什么问题revert命令 删除
  • 从 Git 中的分支父级中提取更改

    如何从 Git 中的分支的父级中提取更改 特别是在 github 配置的项目中 例如 假设我分叉了http github com originaluser originalproject http github com originalus
  • 如何从 Visual Studio 2013 将现有解决方案添加到 GitHub

    我浏览了许多关于 VS 2013 中新的 Git 集成的网页 它们不涉及向 Github 添加现有解决方案 事实上 我找不到太多关于使用 GitHub 而不是 Visual Studio Online 的信息 谁能告诉我如何从现有解决方案开
  • 对 git Push 运行单元测试,对 Pull 请求运行集成测试

    在构建 R 包时 我们使用 testthat 来编写测试 我们有 2 个文件 特定包的测试文件 特异性R 我们用它来确保所有包继续一起工作并且总体结果良好 整体R 当前 当我们推送到 github 或通过 Travis 创建 PR 时 都会
  • 自动更改 github 文件

    我制作了一个带有白名单的应用程序 withelist 位于 github 存储库上 只有一个文件 即 withelist 每次下载我的应用程序的用户想要被允许使用该应用程序时 都必须向我发送一个消息插入白名单 现在这个过程真的很慢 我想加快
  • 在 git 中编辑分支?

    我在 github 网站上创建了一个分支 该分支不在我的本地存储库中 如何将该分支带到我的本地计算机 对其进行编辑 然后将其推送回我的 github 帐户 在本地工作目录中输入 git fetch origin newbranch git
  • GitHub Web UI 中的“base”和“head”存储库是什么?

    GitHub 的 UI 相当不直观且考虑不周 所以这里有一个问题 什么是 头 回购 什么是 基础 回购 不知道是从哪一个抄来的 基础 和 头部 这两个词的意思是相同的 链表的 头 类似于树的 基 GitHub 有叉树和文件树 Head 和
  • “user-images.githubusercontent.com”中的图像是否有过期时间?

    我正在使用博客提供服务GitHub 页面 https pages github com 博客服务有很多图像文件需要上传 所以我需要一个存储图像的存储库 在搜索存储库时 我发现了一种使用 github issues 的方法 我首先捕获图像 然
  • Github README.md 和 readme.md - 如何删除其中一个?

    不知何故 我最终在 github 上有了 README md 和 readme md 现在这两者相互影响 所以我的 GitHub app 完全混乱了 Github网站没有任何文件删除功能 如何删除这些文件之一 只需删除其中一个文件并提交删除
  • 从 git 中删除历史记录 - git 命令失败

    我正在尝试从 Git 历史记录中清除项目 bin 目录 我已经将 bin 添加到 gitignore 并运行 git rm cached r bin成功地 现在我尝试使用 GitHub 帮助页面中推荐的命令来清除历史记录 git filte
  • 受保护分支设置中的检查列表中缺少 Github 操作状态检查

    我有以下 github 操作设置 可以在创建 Pull 请求时正常触发 但它不会出现在受保护分支 主分支 的状态检查列表中 我不确定我做错了什么 name Python application on pull request branche
  • 忽略 git 中的本地配置文件

    Rails 应用程序中有一些本地文件 属于我们存储库的一部分 我希望 git 忽略它们 基本上 我希望 git 忽略我对 config environments 目录和 config application rb 文件中的任何内容所做的所有
  • 在 github 上的 fork 中跟踪上游的最佳实践

    摘要 对于要维护一组本地更改的上游存储库 处理长期运行跟踪的最佳实践是什么 我想让 github 上的 fork 与上游保持同步 但仍然允许清晰跟踪 fork 特有的更改 对于本次讨论 假设upstream指向主项目存储库并且origin指
  • git 显示已添加到 gitignore 的文件中的更改?

    我已经将 log2 文件夹和 main js 文件添加到 gitignore 如屏幕截图所示 但即使执行后git rm cached r我仍然可以看到 git 正在检测 main js 和 log2 文件夹内文件的更改 怎么会 这些的常见问
  • Git - 创建拉取请求而不分叉

    使用 git 已经有一段时间了 关于 git pull request 有很多教程和解释 其动机是什么等等 我遇到两种情况 1 分叉 git 仓库 我查看了一些公共 git 存储库并决定我想要做出贡献 所以我 通过以下方式创建重复的存储库F
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • 使用终端时 Git 推送在总计后卡住了?

    我尝试将一些文件推送到Github 总大小只有22 2M 我不知道为什么它在总行之后卡住了 我读过推送到 Github 时 Git 推送挂起 https stackoverflow com questions 16906161 git pu
  • Netbeans 和 Git,.obj 文件被忽略

    我正在开发一个涉及 obj 文件的小型 git 项目 当我查看 项目选项卡 时 我发现它们被忽略了 但如果我查看我的 gitignore 我无法理解为什么 DepthPeeling nbproject private DepthPeelin

随机推荐

  • 除了中国好声音,星空华文冲刺港股IPO还有其他王牌吗?

    回顾国内的综艺节目发展史 中国好声音 曾是里程碑式的存在 曾一度稳坐各大省级卫视综艺节目收视率的头把交椅 更是民间歌手们心中殿堂级的存在 但它背后的制作公司 星空华文似乎却江河日下 5月13日 星空华文再次发起IPO 这一回选择登陆的是港交
  • JSP中,AJAX使用POST方式提交中文乱码问题解决

    本人原创 欢迎转载 转载请保留本人信息 作者 wallimn 电邮 wallimn sohu com 博客 http blog csdn net wallimn 时间 2006 11 15 本人原创 欢迎转载 转载请保留本人信息 今天终于解
  • Python编程:从入门到实践(基础知识)

    第一章 起步 计算机执行源程序的两种方式 编译 一次性执行源代码 生成目标代码 解释 随时需要执行源代码 源代码 采用某种编程语言编写的计算机程序 目标代码 计算机可执行 101010 编程语言分为两类 静态语言 使用编译执行的编程语言 C
  • java.library.path属性在代码中设置不生效问题

    http www blogjava net gembin archive 2008 10 29 237377 html from http daimojingdeyu blogbus com logs 28617218 html 可是在使用
  • 如何用wps制作地图分布图_如何用Power BI制作自己的可视化地图

    作者 AgnesJ 在之前的文章中介绍过Power BI的形状地图 使用形状地图我们可以导入自己想要的任何地图 只要找到对应的TopoJson格式地图文件就可以 但是当我们需要分析某一个销售区域 或服务范围时 如何获取或者创建自己的Json
  • 让div撑满整个屏幕的方法(css)

    在body只有一个div的时候 可以通过这样的方式让div撑满整个屏幕 1 给div设置定位 复习一下 css中position有五种属性 static 默认值 没有定位 absolute 绝对定位 相对于父级元素进行定位 relative
  • aop统一日志输出controller出入参及部分参数

    输出使用的jackson 其中获取iputil放在另一篇文章 gt gt gt gt IpUtil获取ip author cy c date 2022 5 19 16 28 统一日志处理 Component Aspect public cl
  • JTS:04 读取数据库数据

    版本 org locationtech jts jts core 1 19 0 链接 github 数据库 创建数据库方式 postgresql 使用postgis插件 kartoza postgis 15 3 3 使用docker容器 创
  • C++中#pragma once与#ifndef的区别

    为了避免同一个文件被include 多次 可以使用两种方式 1 方式一 ifndef SOMEFILE H define SOMEFILE H 声明语句 endif 2 方式二 pragma once 声明语句 两者的区别 ifndef方式
  • Struts2识别与漏洞利用

    Struts2框架识别 1 通过网页后缀来进行判断 如 do或者 action Struts2漏洞验证 Struts2 045漏洞介绍 安恒信息安全研究院WEBIN实验室高级安全研究员nike zheng发现著名J2EE框架 Struts2
  • 3.【Python】分类算法—Softmax Regression

    3 Python 分类算法 Softmax Regression 文章目录 3 Python 分类算法 Softmax Regression 前言 一 Softmax Regression模型 1 Softmax Regression模型
  • 2023华为od机试真题B卷Python【矩阵里的非一元素】

    题目 假设存在一个m n的二维数组 其成员取值范围为0 1和2 1具有同化特性 它具体的同花步骤是 每经过1秒 如果其上下左右值为0 那么修改为1 而值为2的元素不会有任何变化 初始时 将数组的 0 0 元素修改为1 经过足够长的时间后 需
  • 应用于SSVEP脑电信号识别的CCA算法

    应用于SSVEP脑电信号识别的CCA算法 1 SSVEP信号 2 应用于SSVEP信号的CCA算法 1 SSVEP信号 SSVEP是指当受到一个固定频率的视觉刺激的时候 人的大脑视觉皮层会产生一个连续的与刺激频率有关 刺激频率的基频或倍频处
  • phpstudy站点404访问遭到拒绝 首页可以访问 接口不能访问

    问题描述 新站站点可以使用 关机再开不能使用 新建站点 不能访问接口 可以访问首页 接口404 直接入正题 入口文件夹里有一个文件 htaccess 这个文件打开如果没有内容 问题就出现在这
  • 清华汪玉创始公司浮出水面,要做大模型一体机,仍是“深鉴式”师生组合拳...

    衡宇 发自 凹非寺量子位 公众号 QbitAI 清华大学电子工程系系主任汪玉 再一次躬行实践 产学结合 具体领域 与大模型紧密相关 量子位获悉 汪玉担任创始人身份的新公司无问芯穹 主要做大模型推理用一体机 以及工具链软件 公司旨在解决大模型
  • J-Tech Talk | 编写Dockerfile的最佳实践

    J Tech Talk 由 Jina AI 社区为大家带来的技术分享 工程师们将深入细节地讲解具体的问题 分享 Jina AI 在开发过程中所积累的经验 不论是个人开发者还是企业 上云已经成为基本的需求 使用 Dockerfile 构建 D
  • debug assertion failed 的一种解决方法

    在使用C 编写程序时 使用到了如同以下的程序 scene addItem originalPixmap 出现debug assertion failed错误 查找原因 发现代码并没有问题 罪魁祸首是 变量 scene 的声明在 origin
  • Centos搭建k8s

    在CentOS 7上搭建Kubernetes集群 kubeadm官方文档 https blog 51cto com zhangxueliang 4952945 前置步骤 所有结点 CentOS 7 9 物理机或虚拟机三台 CPU 内核数量大
  • MATLAB常用函数汇总

    一 基本函数 函数 作用 举栗子 clear 清除工作区中的所有变量 clc 清除命令行中的所有代码 help 函数名 或 doc 函数名 查找函数帮助 syms 定义符号变量 syms x y sym f 定义符号表达式 sym x y
  • TVM的安装过程

    最近在看深度学习编译器相关的工作 其中FlexTensor给我留下了比较深刻的印象 加上这项工作是开源的 所以想看看这份工作的源码 首先是怎么把工程跑起来 FlexTensor倚仗TVM做代码生成 所以首先得安装TVM 首先给出官方网站的安