Windows 安装TVM 及各种报错解决!无GPU版本

2023-05-16

这篇先来一个不用GPU的下次,再整一个带GPU的!

系统基本信息

Windows 11 

Anaconda 4.12

Python 3.8.13

Visual Studio 2022 

这几天在Windows 下安装TVM,走了各种弯路,最终终于解决了所有问题,下面根据各种问题一一解决!

先说一下我的安装方法

第一步

先下载llvm 下载地址 https://winlibs.com/

 下载后解压缩,重命名mingw64,并且添加环境变量,mingw64/bin 

弄好了在命令窗口输入 llvm-config --version 应该是14.0.6 那么证明这一步完成。

关键点来了:这是第一步坑,先这么做,后面有解决方案!

这一步导致的问题是:实现官方案例时候报错 

tvmc compile \
--target "llvm" \
--input-shapes "data:[1,3,224,224]" \
--output resnet50-v2-7-tvm.tar \
resnet50-v2-7.onnx

 clang: error: linker command failed with exit code 1 (use -v to see invocati),后面说解决方案。

第二步

下载官方的TVM Source Code 

出于保守我没用最新的版本,用的0.9.0。

Download (apache.org)

 

下载后,需要解压,这个需要管理员权限解压,从开始里面搜索WinRAR,然后以管理员身份运行

 对apache-tvm-src-v0.9.0.tar.gz 解压缩。解压后打开文件夹,建立一个build 文件夹。

 此外,我们可以在conda 文件夹下面找到 build-environment.yaml

里面的name默认是tvm-build 这个名字就是conda 建立虚拟环境的名字,不喜欢可以改,此外他这里默认llvmdev是10.0.0版本,而我们刚才在第一步安装的是14.0.6。

注意我强烈怀疑这里是第二个坑,我当时装的时候,这一块没有改直接默认10.0.0 ,所以后续也发现了问题,这里可以不改,还是那句话后面有解决方法!如果有小伙伴直接改成14.0.6成功了,欢迎评论告诉我,我已经整这个TVM整了三天多了,每天都是到晚上1点多,实在不想再试了。

第三步

这步就两个步骤 

(1)创建虚拟环境 ,这一步很慢,因为网速的原因,中间还会断,多试几次吧 !

conda env create --file conda/build-environment.yaml

(2)激活这个环境 

conda activate tvm-build 其中tvm-build 是 build-environment.yaml 中的name,上文已经提到了,如果你改了,这一块也要改

第四步 

在apache-tvm-src-v0.9.0文件下面的cmake 文件夹找到 config.cmake文件

 并把这个文件复制到 这个build 文件夹里面 

 

 在build 文件夹下打开 刚刚复制过来的config.cmake ,对其136行进行修改 

 OFF 改为llvm 地址 。

这一步其实也是一个坑,原因在于现在有两个llvm的地址,

(1)mingw64\bin 里面有一个版本为14.0.6 

(2) anaconda3\envs\tvm-build\Library\bin 里面也有一个 10.0.0 

我这里选择的是第(2)种 ,虽然我不确定这样对,不过还是那句话,后面出了问题,可以解决!把OFF 替换为 D:/anaconda3/envs/tvm-build/Library/bin/llvm-config(根据自己实际情况替换地址,有时候这个地址需要加引号,有时候不需要,可以根据自己实际情况试试)

接下来第一个关键点出现了, 

Step 1  cd D:\apache-tvm-src-v0.9.0\build 

Step 2  cmake -A *64 -Thost=x64 ..    

这一步报错,大概率就是OFF替换为地址加不加引号产生的

Step 3 cmake --build build --config Release -- /m 

这一步我刚开始是失败的,报错是这样的 

tvm inject_rolling_buffer.cc 报错

\src\tir\transforms\inject_rolling_buffer.cc(79,13): error C2065:

反正乱七八糟一大堆 

具体如下图 

 

经过分析我觉得其实是warning 导致的,所以先要处理warning 。

这里warning 报的是 

warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为

具体方法为:

(1) 直接用VS2022打开工程build文件夹下面的ALL_BUILD.vcxproj,

 (2) 右击下图中结尾为objs的工程,选择属性 

 并在命令行的位置填写/utf-8 

 完成后,直接右击tvm工程,点击重新生成

 如果最后显示4个成功,那么你离成功就很近了! 如果出现2个成功大概率会出现下面的情况 

import tvm 成功 ,

from tvm import relay 报错如下面

1)AttributeError: module 'tvm.relay._ffi_api' has no attribute 'Any'

2)AttributeError: module 'tvm.relay._make' has no attribute 'Any'

注,这一步先别试import , 因为还没有pip install ,这里只是为了提前告知,编译有失败情况下会发生的现象。

第五步

假如第四步的编译成功了,

cd D:\apache-tvm-src-v0.10.0\python 

python setup.py install

这步完成后,你再试 

import tvm 

from tvm import relay

理论上是都可以成功的

但是有些教程会说看是否安装成功用 tvmc -h 

如果你用了大概率会报错 

tvm.driver.tvmc.config_options.ConfigsJsonNotFoundError

这个问题我找遍全网也没有人解决,于是我就把源码读了一下发现其实是找了config文件 我们需要把这个文件放到正确的位置,

具体操作如下:

(1)复制apache-tvm-src-v0.9.0 下面的configs 

 (2) 把这个东西复制到 

D:\Anaconda3\envs\tvm-build\Lib\site-packages\tvm-0.9.0-py3.8-win-amd64.egg\tvm

里面去,这里具体位置大家可以自己找一下,结果如下,这样以后就保证tvmc -h 不报错了!

 

到这里我自己都认为我完全成功了,但是忘记了一件事就是我conda 环境下llvm-config是10.0.0版本,但是windows 环境变量下的版本是14.0.6 。

所以当我用官方案例时候,报错了!

tvmc compile \
--target "llvm" \
--input-shapes "data:[1,3,224,224]" \
--output resnet50-v2-7-tvm.tar \
resnet50-v2-7.onnx

报错主要就是

clang: error: linker command failed with exit code 1 (use -v to see invocati)

TVMMod :(.text+0xefe8): undefined reference to `__chkstk'

接下来说一下我是如何解决的,

第一步 把以前添加的环境变量移除 D:\mingw64\bin 

第二步 下载 LLVM 14.0.6 并且安装时候添加他到环境变量 

下载地址如下 

Release LLVM 14.0.6 · llvm/llvm-project (github.com)

 

经过以上所有的步骤,基本上实现了windows 上面的tvm使用 。

按照官方案例编译renet 后,可以出现

 

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

Windows 安装TVM 及各种报错解决!无GPU版本 的相关文章

随机推荐

  • 腾讯2014校园招聘软件后台开发类笔试题

    转http www itmian4 com forum php mod 61 viewthread amp tid 61 3572
  • 2014暴风影音校招技术笔试题(长春站)

    转http www itmian4 com forum php mod 61 viewthread amp tid 61 3622 1 升序排列下列数值 xff1a 2 写出下列函数的返回值 int func int x 61 300 in
  • 计算100以内的素数的个数

    以下代码是用来计算100以内的素数的个数 xff0c 请把相应的空填上 struct prime number node int prime number prime number node next int calc prime numb
  • C语言除法运算符“/”和求余运算符“%”

    看似两个很简单的运算符 xff0c 却也真要掌握用好它也不容易 xff0c 本文作为关于此类运算符的各方面的问题的汇总 xff0c 希望对你我都有一些帮助 除法运算符 二元运算符 xff0c 具有左结合性 参与运算的量均为整型时 xff0c
  • 冒泡排序

    include lt stdio h gt define LENGTH 8 void main int tmp number LENGTH 61 95 45 15 78 84 51 24 12 for i 61 0 i lt LENGTH
  • 金山词霸C++笔试(北邮11月23号)

    金山词霸笔试题 xff08 北邮11月23号 xff09 xff08 一 xff09 以下输出什么 xff1f char ptr 61 34 hello world 34 cout lt lt ptr h ptr指向字符串的首地址 xff0
  • 关于计算机研究和写作的链接收集

    研究相关的资源 What is Research in Computer Science 计算科学的研究是什么 xff1f 翻译 Basic Research Skills in Computer Science 计算科学的基本研究方法 R
  • 实战笔记之C++里面双冒号和冒号及点号引用符

    标题党了额 xff0c mark一下 xff0c 有时间再整理 以下节选自多人博客 推荐博文一篇http blog csdn net gyymen article details 4962873 箭头 xff08 gt xff09 xff1
  • 在Linux中如何修改root帐户的登录用户名

    vi etc passwd 按i键进入编辑状态 修改第1行第1个root为新的用户名 按esc键退出编辑状态 xff0c 并输入 x保存并退出 vi etc shadow 按i键进入编辑状态 修改第1行第1个root为新的用户名 按esc键
  • Linux elasticsearch 安装超详细教程

    1 下载elasticsearch 7 11 2 linux x86 64 tar gz 之所以下载7 11 2版本是因为我使用了中文分词器 xff0c 对应中文分词器的版本号 2 可以官方下载 xff0c 会比较慢 xff0c 这里提供我
  • 程序员做一辈子?

    首先 xff0c 程序员真有必要干一辈子吗 xff1f 如果你是个搬砖的 xff0c 你会考虑一辈子搬砖吗 xff1f 你肯定会想着过几年挣钱了 xff0c 买个车跑运输 xff0c 或者自己做工头 对程序员来说 xff0c 真心没有必要干
  • ubuntu系统怎么使用ifconfig和开启远程连接

    在ubuntu系统刚安装好之后ifconfig命令和开启远程连接都是不起作用的 xff0c 如果需要使ifconfig起作用需要安装一个小工具 xff0c 如果想开启远程连接的话也需要安装open ssh工具 开启ifconfig xff1
  • LDMIA、LDMIB、LDMDB、LDMDA、STMIA、LDMFD、LDMFA、LDMED、LDMEA等指令详解

    关于多寄存器加载存储指令 1 LDMIA指令 LDMIB指令 LDMDB指令 LDMDA指令 xff08 1 xff09 LDMIA指令 xff0c IA表示每次传送后地址加4 xff08 2 xff09 LDMIB指令 xff0c 每次传
  • FreeRTOS-互斥信号量

    原文地址 xff1a http blog csdn net xukai871105 article details 43456985 0 前言 在嵌入式操作系统中互斥型信号量是任务间资源保护的重要手段 下面结合一个具体例子说明FreeRTO
  • 执行体线程--ETHREAD

    typedef struct ETHREAD KTHREAD Tcb 内嵌了KTHREAD对象作为第一个数据成员 LARGE INTEGER CreateTime 包含了线程创建时间 xff0c 他是在线程创建时被赋值的 union LAR
  • 显卡驱动的作用(本质作用)

    确切资料表明显卡不需要驱动也可以进行显示 xff0c 只需要将显示的内容存到对应的显存地址就可以 xff08 通过cpu直接或者间接的硬连线实现 xff09 也就是说单纯的显示像素的话不需要使用显卡驱动 xff0c 但是单纯的显示像素甚至某
  • 智能指针之make_unique与make_shared

    make unique的实现 std make shared是C 43 43 11的一部分 xff0c 但是std make unique很可惜不是 它是在C 43 43 14里加入标准库的 xff0c 但我们可以自己实现make uniq
  • NVIDIA Jetson TX1 系列开发教程之十二:libcurl、RapidJSON安装

    NVIDIA Jetson TX1 系列开发教程之十二 xff1a libcurl RapidJSON安装 转载请注明作者和出处 xff1a http blog csdn net u011475210嵌入式平台 xff1a NVIDIA J
  • 用户标签体系的搭建方法

    一 标签体系的困境 每一个需求背后都有对应的痛点和问题 xff0c 在讲具体的方法之前 xff0c 笔者想简单阐述一下标签体系搭建和实践过程中企业一般会遇到的问题 困境 xff0c 方便读者理解本文的搭建思路 目的和未来的优化方向 用户标签
  • Windows 安装TVM 及各种报错解决!无GPU版本

    这篇先来一个不用GPU的下次 xff0c 再整一个带GPU的 xff01 系统基本信息 Windows 11 Anaconda 4 12 Python 3 8 13 Visual Studio 2022 这几天在Windows 下安装TVM