这篇先来一个不用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(使用前将#替换为@)