MNN icon indicating copy to clipboard operation
MNN copied to clipboard

2.x版本截止2.0.3都在win10上编译失败

Open MatchX opened this issue 2 years ago • 11 comments

平台(如果交叉编译请再附上交叉编译目标平台):

Platform(Include target platform as well if cross-compiling):

win10

Github版本:

Github Version:

2.0.3

直接下载ZIP包请提供下载日期以及压缩包注释里的git版本(可通过7z l zip包路径命令并在输出信息中搜索Comment 获得,形如Comment = bc80b11110cd440aacdabbf59658d630527a7f2b)。 git clone请提供 git commit 第一行的commit id

Provide date (or better yet, git revision from the comment section of the zip. Obtainable using 7z l PATH/TO/ZIP and search for Comment in the output) if downloading source as zip,otherwise provide the first commit id from the output of git commit

编译方式:

Compiling Method

Cmake+vs2022

请在这里粘贴cmake参数或使用的cmake脚本路径以及完整输出
Paste cmake arguments or path of the build script used here as well as the full log of the cmake proess here or pastebin

默认配置 并启用MNN_BUILD_CONVERTER

编译日志:

Build Log:

14> 正在创建库 E:/SoftWare/AI/Deploy/MNN/MNN-2.0.3/build/tools/converter/Release/MNNConvertDeps.lib 和对象 E:/SoftWare/AI/Deploy/MNN/MNN-2.0.3/build/tools/converter/Release/MNNConvertDeps.exp 14>TorchTranspose.obj : error LNK2001: 无法解析的外部符号 "private: static void (__cdeclconst * const MNN::CV::Matrix::gMapPtsProcs)(class MNN::CV::Matrix const &,struct MNN::CV::Point * const,struct MNN::CV::Point const * const,int)" (?gMapPtsProcs@Matrix@CV@MNN@@0QBQ6AXAEBV123@QEAUPoint@23@QEBU423@H@ZB) 14>TorchZeros.obj : error LNK2001: 无法解析的外部符号 "private: static void (__cdeclconst * const MNN::CV::Matrix::gMapPtsProcs)(class MNN::CV::Matrix const &,struct MNN::CV::Point * const,struct MNN::CV::Point const * const,int)" (?gMapPtsProcs@Matrix@CV@MNN@@0QBQ6AXAEBV123@QEAUPoint@23@QEBU423@H@ZB) 14>TorchSilu.obj : error LNK2001: 无法解析的外部符号 "private: static void (__cdeclconst * const MNN::CV::Matrix::gMapPtsProcs)(class MNN::CV::Matrix const &,struct MNN::CV::Point * const,struct MNN::CV::Point const * const,int)" (?gMapPtsProcs@Matrix@CV@MNN@@0QBQ6AXAEBV123@QEAUPoint@23@QEBU423@H@ZB) 14>TorchSize.obj : error LNK2001: 无法解析的外部符号 "private: static void (__cdeclconst * const MNN::CV::Matrix::gMapPtsProcs)(class MNN::CV::Matrix const &,struct MNN::CV::Point * const,struct MNN::CV::Point const * const,int)" (?gMapPtsProcs@Matrix@CV@MNN@@0QBQ6AXAEBV123@QEAUPoint@23@QEBU423@H@ZB) 14>TorchSlice.obj : error LNK2001: 无法解析的外部符号 "private: static void (__cdecl*const * const MNN::CV::Matrix::gMapPtsProcs)(class MNN::CV::Matrix const &,struct MNN::CV::Point * const,struct MNN::CV::Point const * const,int)" (?gMapPtsProcs@Matrix@CV@MNN@@0QBQ6AXAEBV123@QEAUPoint@23@QEBU423@H@ZB)

粘贴在这里
Paste log here or pastebin

我发现libprotobuf 和 libprotobuf-lite的运行库错误设置为MT应该为MD 另外BUILDING_MNN_DLL宏设置错误 导致了很多的链接问题实际就是这个宏导致了有些函数实现代码 没有被编译 我解决了一些 但是有些还是不能解决

MatchX avatar Jul 23 '22 01:07 MatchX

这边编译都是可以的。 打开命令行,运行 .\package_scripts\win\build_tools.ps1 -path MNN-CPU/tools/x64 试下?

jxt1234 avatar Jul 26 '22 06:07 jxt1234

vs版本是 Found assembler: D:/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe 会出现这个错误,2.x的各个版本都会完美复现: E:\projects\inference\MNN\MNN-2.0.0\package_scripts\win\build_tools.ps1 : 不能对 Null 值表达式调用方法。 所在位置 行:1 字符: 1

  • .\package_scripts\win\build_tools.ps1 -path MNN-CPU/tools/x64
  •   + CategoryInfo          : InvalidOperation: (:) [build_tools.ps1],RuntimeException
      + FullyQualifiedErrorId : InvokeMethodOnNull,build_tools.ps1
    

gs-ren avatar Jul 27 '22 08:07 gs-ren

这边编译都是可以的。 打开命令行,运行 .\package_scripts\win\build_tools.ps1 -path MNN-CPU/tools/x64 试下?

可以说一下编译环境和过程么?在win上编译支持torchscript 的converter实在是太难了

gs-ren avatar Jul 27 '22 09:07 gs-ren

https://www.yuque.com/mnn/cn/cvrt_windows

按这里编 converter 就行,"无法解析的外部符号" 可以通过 -DMNN_BUILD_SHARED_LIBS=OFF 解决

至于支持 torchscript ,这个 windows 上暂不好支持,可以安装 linux 虚拟器去编译

jxt1234 avatar Jul 29 '22 07:07 jxt1234

https://www.yuque.com/mnn/cn/cvrt_windows

按这里编 converter 就行,"无法解析的外部符号" 可以通过 -DMNN_BUILD_SHARED_LIBS=OFF 解决

至于支持 torchscript ,这个 windows 上暂不好支持,可以安装 linux 虚拟器去编译

不带torchscript的还是蛮好编译的,我搞个wsl试试,谢谢

gs-ren avatar Jul 30 '22 17:07 gs-ren

我编译出来的converter ,转换不出来模型!!

lvyong1943 avatar Aug 15 '22 07:08 lvyong1943

我编译出来的converter ,转换不出来模型!!

这个在新版本很少见了,是有啥不支持的算子么?可以贴出来让大佬们看看

gs-ren avatar Aug 16 '22 01:08 gs-ren

算子倒是都支持,我调试了一下源码,就是中间会有一个输入tener 是空指针,导致转换模型失败。 刚把pytorch的模型删了一个reshape发现 MNNConvert.exe -f ONNX --modelFile model.onnx --MNNModel model.mnn --bizCode MNN --saveStaticModel true --keepInputFormat true --batch 1 这样是导不出来的, MNNConvert.exe -f ONNX --modelFile model.onnx --MNNModel model.mnn --bizCode MNN --saveStaticModel true这样可以导出

lvyong1943 avatar Aug 16 '22 02:08 lvyong1943

弄明白了,pytorch模型 里有torch.nn.functional.max_pool2d 这个导出的onnx就不能运行,也不能正确的转成mnn模型。

lvyong1943 avatar Aug 16 '22 02:08 lvyong1943

解决torch.nn.functional.max_pool2d这个问题了,我输入的是[b,h,w]三维度数据,在pytorch下没问题,但是转onnx报维度问题,给输入的tenser增加一个维度就可以正确导出onnx然后成功导出mnn,我是看这个帖子尝试的 https://github.com/microsoft/onnxruntime/issues/11635。希望对大家有帮助

lvyong1943 avatar Aug 16 '22 03:08 lvyong1943

我编译出来的converter ,转换不出来模型!!

这个在新版本很少见了,是有啥不支持的算子么?可以贴出来让大佬们看看

/home/mnn/MNN-master/tools/converter/source/common/writeFb.cpp:91: These Op Not Support: ONNX::GatherElements 这个是算子不支持,很奇怪,我看里面是有的呀

lvyong1943 avatar Aug 16 '22 10:08 lvyong1943