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

这篇先来一个不用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 后,可以出现

 

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值