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 一同修改即可
相关推荐
用户277844910499310 小时前
借助DeepSeek智能生成测试用例:从提示词到Excel表格的全流程实践
人工智能·python
JavaEdge在掘金12 小时前
ssl.SSLCertVerificationError报错解决方案
python
我不会编程55513 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
老歌老听老掉牙13 小时前
平面旋转与交线投影夹角计算
python·线性代数·平面·sympy
满怀101513 小时前
Python入门(7):模块
python
无名之逆13 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
你觉得20513 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
啊喜拔牙13 小时前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala
__lost15 小时前
Pysides6 Python3.10 Qt 画一个时钟
python·qt