【开发环境】Windows下搭建TVM编译器

2023-10-31

关于搭建TVM编译器的官方文档:Install from Source — tvm 0.14.dev0 documentation (apache.org)

1. 安装Anaconda

首先我们需要安装Anaconda,因为其中包含着我们所需要的各类依赖:

进入Anaconda官网https://www.anaconda.com/products/distribution,下载Windows版本,下载完成后运行.exe,可以更改安装路径(如果安装路径不是C盘可能需要一点点额外的步骤,这个后面会提到),基本一路Next就可以了。需要注意的是,一定要把将Anaconda加入PATH勾选上,这样就可以节省配置Anaconda环境变量的步骤。

最终安装好Anaconda,可以在电脑应用菜单这里找到对应的cmd终端入口和powershell入口:

2. 编译LLVM

接下来是编译LLVM,简便行事我们可以使用已经手动编译好的库,进入https://winlibs.com/找到包含LLVM的包:

下载解压到任意目录里就行,最后把其中bin目录路径写入环境变量的PATH中,进入Anaconda的cmd终端中输入如下命令:

 llvm-config --libdir

不报错并显示对应的库目录路径意味着前面的步骤都完成了,下面就开始搭建TVM。

3. 获取TVM源码

从github上获取最新版的TVM克隆到本地文件夹tvm中,记住务必要克隆而非直接下载ZIP解压否则后面编译会报错

 $ git clone --recursive http://github.com/apache/tvm tvm

新建一个build文件夹,从文件夹cmake中复制一份config.cmake拷贝到build文件夹中:

 $ cd tvm
 $ mkdir build
 $ cp cmake/config.cmake build

当然源码获取并没有这么简单,这也是我踩的一个大坑了,如果现在查看build里的一些文件夹,你会发现很多是空的,这是因为它们是子仓库所以并没有跟随着一起将源码克隆到本地,反而只是将一个jit链接克隆了下来,我们接下来需要补充这一部分代码,进入github仓库的build文件夹下,将有蓝色链接(含有子仓库)的源码下载到本地,替换原来残缺的部分:

4. 构建虚拟环境

在Anaconda终端中切换到tvm的文件夹目录下,注意:如果你将Anaconda放在了非系统盘,那么你需要使用管理员身份进入终端。

使用如下命令构建并进入tvm-build的虚拟环境:

 # Create a conda environment with the dependencies specified by the yaml
 conda env create --file conda/build-environment.yaml
 # Activate the created environment
 conda activate tvm-build

这个过程会比较长,大概10分钟左右。

5. 使用cmake生成.dll库

打开build目录下的config.cmake文件,将USE_LLVM设为ON,修改完后保存:

进入build目录调用cmake进行生成:

 cd build
 cmake -A x64 -Thost=x64 ..
 cd ..
 cmake --build build --config Release -- /m

这里可能会有报错"No CMAKE_C_COMPILER could be found",意思就是没有编译器,我们可以去下载Visual Studio解决这个问题,如果你已经安装了Visual Studio但仍然存在这个问题,那你需要去Visual Studio Installer里下载安装一个SDK,这里我推荐最新版的windows 10 SDK。

这个步骤也要等待蛮久的,大概半小时(而且非常占用CPU,电脑风扇起飞),可以看到中途会有很多Warnings,不必理会不是Error就知足吧Orz):

最终可以看到在tvm\build\Release目录下生成了tvm.dll的链接库:

6. python依赖库的安装

使用如下命令直接安装即可:

 pip3 install typing_extensions numpy decorator attrs
 pip3 install tornado psutil xgboost cloudpickle
 pip3 install ml_dtypes

7. 将TVM安装到python环境

这一步看其他大佬的博客都是直接配置PYTHONPATH环境变量,但实际上我们在Anaconda终端直接运行如下脚本即可完成:

 cd python
 python setup.py install

运行完毕,可以打开python的IDLE输入import tvm来简单测试一下我们搭建的TVM是否可用:

如上所示,没有报错基本就成功了。

当然如果不习惯用IDLE,也可以使用VSCode、PyCharm等代码编辑器,例如在VSCode的设置的命令面板中输入:

python:select interpreter

更换python解释器为我们刚刚添加tvm包的解释器:

如下所示,没有报错:

至此,我们的TVM编译器搭建就结束了,篇幅不长但是却浓缩了我踩坑的漫长经历QAQ

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

【开发环境】Windows下搭建TVM编译器 的相关文章

随机推荐

  • JavaScript如何运行

    项目场景 一些小伙伴刚入手前端开发 对Javascript十分陌生 下面就专门总结运行js文件的几种常用方法 一 Node js Node js 就是运行在服务端的 JavaScript Node js是一个事件驱动I O服务端JavaSc
  • 最大子矩阵(动态规划c++)

    题目描述 已知矩阵的大小定义为矩阵中所有元素的和 给定一个矩阵 你的任务是找到最大的非空 大小至少是1 1 子矩阵 比如 如下4 4的矩阵 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 的最大子矩阵是 9 2 4 1 1
  • 在浏览器输入URL到页面展示发生了什么?

    输入URL后 查询缓存 DNS服务器 TCP三次握手 HTTP协议包 浏览器处理HTML文档 TCP 和 UDP 的区别 写在最后 很多前端伙伴问题有没有体系的面试题 今天为大家推荐一款刷题神奇哦 点击链接访问牛客网 各大互联网大厂面试真题
  • 图解通信原理与案例分析-24:5G NR 增强移动宽带eMBB是如何提升空口速率和频谱利用率的?

    前言 LTE通过QAM调制 OFDM调制 IQ调制 射频混频 实现了在20M空口带宽上 下行100M速率的二进制数据的通信 LTE A通过载波聚合 MIMO等技术 可以把空口的下行数据速率提升到1G 5G增强移动宽带eMBB更是厉害 把空口
  • 面向小白的深度学习代码库,一行代码实现30+中attention机制。

    Hello 大家好 我是小马 最近创建了一个深度学习代码库 欢迎大家来玩呀 代码库地址是https github com xmu xiaoma666 External Attention pytorch 目前实现了将近40个深度学习的常见算
  • Python 正则表达式匹配中文

    参照Python正则表达式指南 在使用Python的过程中 由于需求原因 我们经常需要在文本或者网页元素中用Python正则表达式匹配中文 但是我们经常所熟知的正则表达式却只能匹配英文 而对于中文编码却望尘莫及 于是我大量Google 几经
  • Ckeditor4超详细使用加配置教程

    下载地址 https ckeditor com ckeditor 4 download 4 download 下载好后解压 将文件夹放到项目目录下 引用 在需要用到的地方引用 这个就是富文本框 div style width 700px h
  • QT 软键盘

    Qt编写可换肤的中文双拼输入法 http www qtcn org bbs read htm tid 58490 html QT5的软键盘输入法实现 祥 使用了DBUS http blog csdn net tracing article
  • Docker Login 登录凭证安全存储

    文章目录 一 凭证存储场景描述 二 存储凭证产品选型 三 切换存储凭证产品 四 凭据存储使用总结 一 凭证存储场景描述 Docker 利用 docker login 命令来校验用户镜像仓库的登录凭证 实际并不是真正意义上的登录 仅仅是一种登
  • SpringBoot + MyBatis 结合 MVC框架设计 第2关:使用SpringBoot + MyBatis实现一个最简单的注册功能

    目录 任务描述 相关知识 项目创建 MVC框架 使用MVC分层实现注册 编程要求 测试说明 参考代码 任务描述 本关任务 使用SpringBoot MyBatis实现一个最简单的注册功能的小程序 相关知识 为了完成本关任务 你需要掌握 1
  • 俄语网站大全

    俄文网站大全 发表日期 2008年1月21日 已经有447位读者读过此文 转帖一些俄文网站 当然不排除一些网址可能已经打不开了 朋友们可以有选择的浏览 俄文网址 搜索引擎 语言 文学 http www weblist ru 汉俄通 http
  • FastDFS的三大误解

    FastDFS的三大误解 本篇文章转载于 FastDFS 作者 余庆 大佬的 FastDFS分享与交流 公众号 整理个别同学对FastDFS的三个误解 我将逐一澄清 误解一 FastDFS不易安装和配置 网上有人吐槽说 FastDFS 是他
  • 如何使用M33D1一体式在线氨氮传感器

    一 应用环境说明 M33D1一体式在线氨氮传感器是一种基于PVC膜制作的的铵离子选择电极 用于测量水中的铵离子含量 带有温度补偿 确保测量快速 简单 精确和经济 本册中详细介绍了氨氮传感器的技术参数 通讯协议和使用维护等内容 1 信号输出
  • String 类简述笔记

    前言 string是C java VB等编程语言中的字符串 用双引号引起来的几个字符 如 Abc 一天 字符串是一个特殊的对象 属于引用类型 在java C 中 String类对象创建后 字符串一旦初始化就不能更改 因为string类中所有
  • spring boot学习之自定义starter启动器

    starter启动器的目标 引入maven包即可自动装配配置 个人理解 如jdbc引入即可操作数据库 实现 1新建springboot工程编写实现类 2编写配置类 3配置 4打包 4新建工程引入使用
  • 移动端rem适配方案(解决1px 兼容问题)

    div style width 7 5rem height 2rem background red div
  • 使用openssl合成pfx格式证书的国密证书

    目前 openssl也已经开始支持国密协议 这边使用的是openssl 1 1 1k 进行的测试 下面记录一下自己的测试步骤 下载地址 https www openssl org source 安装编译方法参考下面地址 我也是参考下面进行安
  • JAVA学习日记(2)--找出某一个范围内完数

    完数 5分 题目内容 一个正整数的因子是所有可以整除它的正整数 而一个数如果恰好等于除它本身外的因子之和 这个数就称为完数 例如6 1 2 3 6的因子是1 2 3 现在 你要写一个程序 读入两个正整数n和m 1 lt n
  • 入门stm32简单电灯实验

    看原理图找内置LED接线 stm32f103 我这边是接的 PE5 外设时钟使能寄存器的相关配置 因为LED1接的是PE5 所以GBIO端口E 查看中文手册获取GPIOE寄存器起始地址0x4001 1800 通过查看系统架构 可以发现GPI
  • 【开发环境】Windows下搭建TVM编译器

    关于搭建TVM编译器的官方文档 Install from Source tvm 0 14 dev0 documentation apache org 1 安装Anaconda 首先我们需要安装Anaconda 因为其中包含着我们所需要的各类