Visual Studio 编译 onnxruntime 1.14.1 更低版本兼容Win7

Visual Studio 编译 onnxruntime 1.14.1 更低版本兼容Win7

1. 下载源码

这里的下载源码,包括编译时下载第三方代码对网络环境有一定要求 ^ _ ^

shell 复制代码
# 1. 下载源码
git clone https://github.com/microsoft/onnxruntime.git
cd onnxruntime
# 2. 切换版本
# 查看所有的tag,找到自己需要的版本
git tag
# 根据我查询到的一些说明: 最高能支持win7的onnxruntime版本是 1.14.1
git checkout v1.14.1

2. 编译

shell 复制代码
# --cmake_generator根据情况而定, 示例可以给如下参数
#   "Visual Studio 15 2017", "Visual Studio 16 2019", "Visual Studio 17 2022"

# 编译64位的CPU版本动态库
.\build.bat --config RelWithDebInfo --build_shared_lib --parallel --cmake_generator  "Visual Studio 16 2019" --skip_tests

# 编译32位的CPU版本动态库
.\build.bat --config RelWithDebInfo --build_shared_lib --parallel --cmake_generator  "Visual Studio 16 2019"  --x86 --skip_tests

# GPU版本暂未测试, 给出参考网址和参考命令: https://zhuanlan.zhihu.com/p/614293644
# 需要注意 onnxruntime,cuda,cudnn等库之间的版本兼容对应关系
.\build.bat --cmake_generator "Visual Studio 16 2019" --config RelWithDebInfo --parallel 8 \
  --use_cuda --use_tensorrt --cuda_version 11.6 \
  --cuda_home "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.6" \
  --cudnn_home "D:\models\static-onnx\CUDNN-8.8.1.3" \
  --tensorrt_home "D:/models/static-onnx/TensorRT-8.5.3.1" \
  --enable_lto \
  --enable_msvc_static_runtime \
  --skip_tests --build_shared_lib

3. 编译好的库

4. 编译失败一些报错和可能的解决方案

如果以上命令编译正常, 则不需要再看了

4.1 masm.targets(70,5): error MSB3721: 命令"ml64.exe ... QgemmU8S8KernelAmx.asm"

  • 出现原因
    • 这个出现的主要原因是不能找到系统中的 ml.exe 和 ml64.exe 的一些编译汇编代码的工具
    • 用 visual studio 图形界面中开启详细的log日志可以得到更详细的报错信息, 就是找不到 ml.exe 和 ml64.exe 文件
    • 这个问题相当奇怪, 即使配置了环境变量, cmd终端中也能执行ml.exe, 但是编译是仍然会报错这个 error MSB3721

解决方案

  • 自己手动基于ml 和 ml64 工具编译相关文件即可
  • 首先在window中配置环境变量
    • ml.exe 和 ml64.exe 可以在milvus studio库文件中路径找到, 参考我的路径 (注意一些具体的版本号信息可能不一样, 其他路径一样)
    • ml64.exe 路径: C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64
    • ml.exe 路径: C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\bin\Hostx86\x86
    • 配置好环境变量后, 则可以在cmd终端中执行 ml 命令 和 ml64 命令
  • 进入编译目录
    • 我的编译命令是 --config RelWithDebInfo, 则进入 build\Windows\RelWithDebInfo 目录中
    • 编译时需要 win10 sdk 头文件, 这个需要提前知道 win10 sdk路径, 我安装在 D:\Windows Kits\10
shell 复制代码
# 需要win10 sdk 中两个头文件路径 (具体的版本号需要根据本机中实际的版本号确定)
D:\Windows Kits\10\Include\10.0.19041.0\shared
D:\Windows Kits\10\Include\10.0.19041.0\um

# ---- 64位编译报错 ------
# 从报错中拷贝出命令(必须从你的报错信息中拷贝出这条命令, 因为一些路径可能不一致)
ml64.exe /c /nologo /Zi /Fo"onnxruntime_mlas.dir\RelWithDebInfo\QgemmU8S8KernelAvx2.obj" /D"WIN32" /D"_WINDOWS" /D"CPUINFO_SUPPORTED" /D"EIGEN_HAS_C99_MATH" /D"NDEBUG" /D"GSL_UNENFORCED_ON_CONTRACT_VIOLATION" /D"EIGEN_USE_THREADS" /D"PLATFORM_WINDOWS" /D"NOGDI" /D"NOMINMAX" /D"_USE_MATH_DEFINES" /D"_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS" /D"EIGEN_MPL2_ONLY" /D"EIGEN_HAS_CONSTEXPR" /D"EIGEN_HAS_VARIADIC_TEMPLATES" /D"EIGEN_HAS_CXX11_MATH" /D"EIGEN_HAS_CXX11_ATOMIC" /D"EIGEN_STRONG_INLINE=inline" /D"WINAPI_FAMILY=100" /D"WINVER=0x0601" /D"_WIN32_WINNT=0x0601" /D"NTDDI_VERSION=0x06010000" /D"CMAKE_INTDIR="RelWithDebInfo"" /I "C:\Users\fulei\Downloads\onnxruntime\include\onnxruntime" /I "C:\Users\fulei\Downloads\onnxruntime\include\onnxruntime\core\session" /I "C:\Users\fulei\Downloads\onnxruntime\build\Windows\RelWithDebInfo" /I "C:\Users\fulei\Downloads\onnxruntime\onnxruntime" /I "C:\Users\fulei\Downloads\onnxruntime\build\Windows\RelWithDebInfo\_deps\abseil_cpp-src" /I "C:\Users\fulei\Downloads\onnxruntime\onnxruntime\core\mlas\inc" /I "C:\Users\fulei\Downloads\onnxruntime\onnxruntime\core\mlas\lib" /W3 /errorReport:prompt  /TaC:\Users\fulei\Downloads\onnxruntime\onnxruntime\core\mlas\lib\amd64\QgemmU8S8KernelAvx2.asm

# 在这行命令中添加头文件路径
/I "D:\Windows Kits\10\Include\10.0.19041.0\shared"

# 进入编译路径 (build\Windows\RelWithDebInfo) 执行即可

# 所有需要编译的文件包括:
# 参考: cmake\onnxruntime_mlas.cmake
["QgemmU8S8KernelAmx.asm", "QgemmU8S8KernelAvx2.asm", "QgemmU8U8KernelAvx2.asm", "QgemmU8X8KernelAvx2.asm",
 "QgemmU8X8KernelAvx512Core.asm", "QgemvU8S8KernelAvx2.asm", "QgemvU8S8KernelAvx512Core.asm",
 "QgemvU8S8KernelAvx512Vnni.asm", "QgemvU8S8KernelAvxVnni.asm", "ConvSymKernelAvx2.asm",
 "ConvSymKernelAvx512Core.asm", "DgemmKernelSse2.asm", "DgemmKernelAvx.asm", "DgemmKernelFma3.asm",
 "DgemmKernelAvx512F.asm", "SgemmKernelSse2.asm", "SgemmKernelAvx.asm", "SgemmKernelM1Avx.asm",
 "SgemmKernelFma3.asm", "SgemmKernelAvx512F.asm", "SconvKernelSse2.asm", "SconvKernelAvx.asm",
 "SconvKernelFma3.asm", "SconvKernelAvx512F.asm", "SpoolKernelSse2.asm", "SpoolKernelAvx.asm",
 "SpoolKernelAvx512F.asm", "sgemma.asm", "cvtfp16a.asm", "SoftmaxKernelAvx.asm", "TransKernelFma3.asm",
 "TransKernelAvx512F.asm", "LogisticKernelFma3.asm", "TanhKernelFma3.asm", "ErfKernelFma3.asm"]
 
# 只要将 编译命令中的 xxxx.obj 和 xxx.asm 一同修改即可

# ---- 32位编译报错 ------
# 从报错中拷贝出命令(必须从你的报错信息中拷贝出这条命令, 因为一些路径可能不一致)
ml.exe /c /nologo /safeseh /Zi /Fo"onnxruntime_mlas.dir\RelWithDebInfo\SgemmKernelSse2.obj" /D"WIN32" /D"_WINDOWS" /D"CPUINFO_SUPPORTED" /D"EIGEN_HAS_C99_MATH" /D"NDEBUG" /D"GSL_UNENFORCED_ON_CONTRACT_VIOLATION" /D"EIGEN_USE_THREADS" /D"PLATFORM_WINDOWS" /D"NOGDI" /D"NOMINMAX" /D"_USE_MATH_DEFINES" /D"_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS" /D"EIGEN_MPL2_ONLY" /D"EIGEN_HAS_CONSTEXPR" /D"EIGEN_HAS_VARIADIC_TEMPLATES" /D"EIGEN_HAS_CXX11_MATH" /D"EIGEN_HAS_CXX11_ATOMIC" /D"EIGEN_STRONG_INLINE=inline" /D"WINAPI_FAMILY=100" /D"WINVER=0x0601" /D"_WIN32_WINNT=0x0601" /D"NTDDI_VERSION=0x06010000" /D"CMAKE_INTDIR="RelWithDebInfo""  /I "D:\Windows Kits\10\Include\10.0.19041.0\shared" /I "C:\Users\fulei\Downloads\onnxruntime\include\onnxruntime" /I "C:\Users\fulei\Downloads\onnxruntime\include\onnxruntime\core\session" /I "C:\Users\fulei\Downloads\onnxruntime\build\Windows\RelWithDebInfo" /I "C:\Users\fulei\Downloads\onnxruntime\onnxruntime" /I "C:\Users\fulei\Downloads\onnxruntime\build\Windows\RelWithDebInfo\_deps\abseil_cpp-src" /I "C:\Users\fulei\Downloads\onnxruntime\onnxruntime\core\mlas\inc" /I "C:\Users\fulei\Downloads\onnxruntime\onnxruntime\core\mlas\lib" /W3 /errorReport:prompt  /TaC:\Users\fulei\Downloads\onnxruntime\onnxruntime\core\mlas\lib\i386\SgemmKernelSse2.asm
# 在这行命令中添加头文件路径
/I "D:\Windows Kits\10\Include\10.0.19041.0\um"
# 进入编译路径 (build\Windows\RelWithDebInfo) 执行即可

# 所有需要编译的文件包括:
# 参考: cmake\onnxruntime_mlas.cmake
["SgemmKernelSse2.asm", "SgemmKernelAvx.asm"]

# 只要将 编译命令中的 xxxx.obj 和 xxx.asm 一同修改即可
相关推荐
没有晚不了安15 分钟前
1.13作业
开发语言·python
刀客12325 分钟前
python小项目编程-中级(1、图像处理)
开发语言·图像处理·python
信阳农夫38 分钟前
python 3.6.8支持的Django版本是多少?
python·django·sqlite
冷琴19961 小时前
基于Python+Vue开发的反诈视频宣传管理系统源代码
开发语言·vue.js·python
带娃的IT创业者1 小时前
《Python实战进阶》专栏 No2: Flask 中间件与请求钩子的应用
python·中间件·flask
坚持就完事了1 小时前
Python之numpy
开发语言·python·numpy
jxf_jxfcsdn2 小时前
python读取pdf文档
开发语言·python·pdf
摆烂老大2 小时前
SWAT| 水文 | SWAT模型(四):气象数据库制备(附Python代码)
python·arcgis·水文·swat模型
晓星航2 小时前
8.python文件
python·文件·文件操作·基础语法
程序员JerrySUN3 小时前
每天设计者模式-1:基础面试题
java·linux·运维·服务器·开发语言·python·docker