前言:作者在做深度学习模型部署过程中,遇到一些算子问题,需要在ONNX Runtime平台上实现一些自定义算子,在此过程中,onnxruntime官方给的现成的库缺少一些必要文件,遂需要下载onnxruntime源码并进行编译。
一、环境说明
windows 10
cuda V11.5
cudnn 8.8.0
cmake 3.24.3(试过其他版本,均无法编译顺利完成)Index of /files/v3.24 (cmake.org)
visual studio 2019
python 3.9(电脑需要有python环境,编译本质上是运行的build.py)
onnxruntime 1.11.1
二、编译流程
# 打开git bash
git clone -b rel-1.11.1 --recursive https://github.com/Microsoft/onnxruntime
cd onnxruntime
git submodule update --init --recursive# 管理员打开vs的工具x64 Native Tools Command Prompt for VS 2019
d:
cd onnxruntime
执行脚本编译
.\build.bat --build_shared_lib --parallel --use_cuda --cuda_version 11.4 --cuda_home "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4" --cudnn_home "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4" --cmake_generator "Visual Studio 16 2019" --skip_tests --config Release
成功后可看到如下提示:
且在onnxruntime\build\Windows\Release\Release目录下可看到如下成果文件:lib dll 等
如此,则算顺利完成编译。
三、注意事项
1.CMake版本只有3.24.3试过是顺利的,其他均遇到以下报错:
error MSB3721: 命令“ml64.exe /c /nologo /WX /Fo"onnxruntime_mlas.dir\Release\QgemmU8S8KernelAvx2.obj" /D"WIN32"
2.执行脚本时候的参数,可以参考onnxruntime\tools\ci_build\build.py中的参数列表予以选择,例如对trt的支持--use_tensorrt。
3.对于cmake这种问题并不是常规debug然后改bug的问题,解决这种问题比较考验运气,若有前人的工作,则可事半功倍;若自己苦苦寻找,并不一定能解决问题,甚至已经换版本可以编译成功了仍然不知道根本原因是为何;战术性短暂放弃,在有些时候是一种有效的方法。
四、参考资料
windows10 编译onnxruntime_onnx1.10 对应cuda-CSDN博客
[Build] met build error when building for window · Issue #15101 · microsoft/onnxruntime (github.com)