• 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 那么证明这一步完成。

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

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

    1. tvmc compile \
    2. --target "llvm" \
    3. --input-shapes "data:[1,3,224,224]" \
    4. --output resnet50-v2-7-tvm.tar \
    5. 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 后,可以出现

     

  • 相关阅读:
    【全网首发】【Python】Python控制parrot ARDrone 2.0无人机
    JAVA SPI
    盛最多水的容器,三数之和 ,有效的括号
    LeetCode每日一题(2216. Minimum Deletions to Make Array Beautiful)
    题目0056-员工出勤
    Spring(六)- BeanFactoryPostProcessor 与 BeanPostProcessor 后处理器
    8.MySQL内外连接
    [计算机组成原理] 考试前突击挂科训练
    建筑施工员证怎么考?报名条件及报考时间是什么?
    [附源码]计算机毕业设计JAVA基于JSP社区生鲜配送系统
  • 原文地址:https://blog.csdn.net/chwei20002005/article/details/127786861