【开发环境】Windows下搭建TVM编译器
关于搭建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 yamlconda env create --file conda/build-environment.yaml# Activate the created environmentconda activate tvm-build
这个过程会比较长,大概10分钟左右。
5. 使用cmake生成.dll库
打开build目录下的config.cmake文件,将USE_LLVM设为ON,修改完后保存:
进入build目录调用cmake进行生成:
cd buildcmake -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 attrspip3 install tornado psutil xgboost cloudpicklepip3 install ml_dtypes
7. 将TVM安装到python环境
这一步看其他大佬的博客都是直接配置PYTHONPATH环境变量,但实际上我们在Anaconda终端直接运行如下脚本即可完成:
cd pythonpython setup.py install
运行完毕,可以打开python的IDLE输入import tvm来简单测试一下我们搭建的TVM是否可用:
如上所示,没有报错基本就成功了。
当然如果不习惯用IDLE,也可以使用VSCode、PyCharm等代码编辑器,例如在VSCode的设置的命令面板中输入:
python:select interpreter
更换python解释器为我们刚刚添加tvm包的解释器:
如下所示,没有报错:
至此,我们的TVM编译器搭建就结束了,篇幅不长但是却浓缩了我踩坑的漫长经历QAQ
相关文章:

【开发环境】Windows下搭建TVM编译器
关于搭建TVM编译器的官方文档:Install from Source — tvm 0.14.dev0 documentation (apache.org) 1. 安装Anaconda 首先我们需要安装Anaconda,因为其中包含着我们所需要的各类依赖: 进入Anaconda官网https://www.anaconda.com/products/d…...

了解Unity编辑器之组件篇Video(二)
Video Player组件:用于在游戏中播放视频的组件。它提供了一系列属性来控制视频的播放、显示和交互。 1.Source(视频源):用于指定视频的来源。可以选择两种不同的视频源类型: (1)Vieo Clip&#…...
安全杂记 - 状态码,DNS,编码
目录 1.状态码2.DNS解析过程3.URL编码4.HTML实体编码5.FORM表单 1.状态码 200 - 请求成功 301 - 资源(网页等)被永久转移到其它URL 302 - 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI 304 - 未修改。所请求的资源未修改&#…...

微信小程序 Page页面
新建页面只需要在app.json配置好路径,编译器自动新增了页面 项目首页,在app.json哪个页面是第一位,哪个页面就是小程序首页...

C语言实现基于Linux,epoll和多线程的WebServer服务器
代码结构: Server.h 头文件,对函数进行了声明 #pragma once #include<stdio.h> // 新建一个用于TCP监听的socket文件描述符,并返回 int initListenFd(unsigned short port);// 启动epoll int epollRun(int lfd);// accept建立连接 vo…...

微信小程序数字键盘(仿微信转账键盘)
微信小程序input自带数字输入键盘,不过是直接调用的系统键盘,无法个性化。 代码中使用使用了Vant WeappVant UI小程序版,这里就不介绍相关安装说明了,大家自行安装Vant Weapp。 json 用到的组件 {"usingComponents": …...

mac电脑强大的解压缩软件BetterZip 5.3.4 for Mac中文版及betterzip怎么压缩
BetterZip 5.3.4 for Mac 是Mac系统平台上一款功能强大的文件解压缩软件,不必解压就能快速地检查压缩文档。它能执行文件之间的合并并提供密码。使用它,用户可以更快捷的向压缩文件中添加和删除文件。它支持包括zip、gz、bz、bz2、tar、tgz、tbz、rar、7…...

Llama 2 来袭 - 在 Hugging Face 上玩转它
🤗 宝子们可以戳 阅读原文 查看文中所有的外部链接哟! 引言 今天,Meta 发布了 Llama 2,其包含了一系列最先进的开放大语言模型,我们很高兴能够将其全面集成入 Hugging Face,并全力支持其发布。Llama 2 的社…...

linux操作历史history定制
history记录 Linux中历史操作记录history是一个很有用的功能,有时忘记了,翻翻以前的命令,十分方便。 # 展示所有历史记录 history # 筛选历史记录 history | grep nginx # 清除全部记录 -c history -c # 指定删除某一行,15是行号 history -…...
微信小程序 wx.showModal
微信小程序--wx.showModal_海轰Pro的博客-CSDN博客...

Java开发中的分层开发和整洁架构
分层开发(横向拆分) 分层开发的概念: maven多模块开发项目管理.可以利用这种管理功能,实现一个项目的多层次模块开发–分层开发. 比如,当前项目HelloController依赖HelloService 这样做目的: 复杂开发过程.解耦(不调整依赖关系,无法解耦).分层开发(横向拆分)和纵向拆分的区别…...

Spring 多数据源方法级别注解实现
Spring框架提供了多种数据源管理方式,其中多数据源管理是其中之一。多数据源管理允许应用程序使用多个数据源,而不是只使用一个数据源,从而提高了应用程序的灵活性和可靠性。 多数据源管理的主要目的是让应用程序能够在不同的数据库之间切换&…...

Redis在云服务器上的安装与客户端连接配置
文章目录 Redis1.Redis的安装2.设置远程连接3.客户端连接3.1 客户端下载 Redis 1.Redis的安装 yum 安装 redis,使用以下命令,直接将 redis 安装到 linux 服务器: yum -y install redis 启动 redis使用以下命令,以后台运行方式启…...

语言模型输出端共享Embedding的重新探索
©PaperWeekly 原创 作者 | 苏剑林 单位 | 科学空间 研究方向 | NLP、神经网络 预训练刚兴起时,在语言模型的输出端重用 Embedding 权重是很常见的操作,比如 BERT、第一版的 T5、早期的 GPT,都使用了这个操作,这是因为当模型…...

Spring中事务失效的8中场景
1. 数据库引擎不支持事务 这里以 MySQL为例,MyISAM引擎是不支持事务操作的,一般要支持事务都会使用InnoDB引擎,根据MySQL 的官方文档说明,从MySQL 5.5.5 开始的默认存储引擎是 InnoDB,之前默认的都是 MyISAMÿ…...
安卓——转场动画
先创建一个名为anim的包 往里面写入两个xml页 为淡入淡出的效果 淡入效果 <alpha xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:anim/accelerate_decelerate_interpolator"android:fromAlpha...
多位数码管动态扫描显示变化数据(数码管右移1)
/*----------------------------------------------- 内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值 ------------------------------------------------*/ #include<reg52.h> //包含头文件࿰…...

充分了解java阻塞队列机制
多线程基础 1.阻塞队列1.1 什么是 阻塞队列1.2 阻塞队列的特点 1.3 阻塞队列常用方法1.3.1 抛出异常:add、remove、element1.3.2 返回结果但是不抛出异常offer、poll、peek1.3.3 阻塞put和take1.3.4 小结 1.4 常见的阻塞队列1.4.1 ArrayListBlockingQueue1.4.2 LinkedBlockingQ…...
安装使用LangChain时的报错解决
刚刚装了LangChain但是引入各种包都报错,原因貌似为 Python3.7 不支持 LangChain,需要开启一个新的Python3.10环境,再重新安装即可正常运行。 创建新的python环境 conda create -n new_env python3.10 重新安装 pip install langchain 这是当…...

【MySQL】库的操作
🌠 作者:阿亮joy. 🎆专栏:《零基础入门MySQL》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录 👉库…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...

MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...