前言
首先,写这篇博客的初衷是希望后续有需求人员不再像博主一样在这上面踩很多的坑,耗很长的时间,其次是为了大家都能够成功配置好开发环境,最后,感谢下面这篇博客对博主的帮助。好的,废话不多说,进入正题。
https://blog.youkuaiyun.com/futureflsl/article/details/143117942?spm=1001.2014.3001.5506
一、CUDA环境准备
在安装c++开发所需的cuda加速版onnxruntime之前,需配置好CUDA环境,并下载好Visual Studio2022。
1、安装CUDA
(1)、打开命令行,输入指令,查看驱动支持的CUDA版本
nvidia-smi
(2)、打开CUDA官网
官网链接:https://developer.nvidia.com/cuda-downloads
(3)、找到自己驱动支持版本CUDA(最好比自己驱动版本稍微低一点,这里博主选择的是12.4),点击进去
(4)、下载好后双击exe,等待一会儿,出现下图。图中路径为临时安装路径,下载后自动删除,所以直接点ok。
(5)、进度条跑完出现下图,点击“确定”,点击“同意并继续”
(6)选择“自定义”,点击“下一步”
(7)关闭Visual Studio2022,选择好安装位置后,点击“下一步”。即完成CUDA安装。
(8)打开命令行,输入指令,出现CUDA版本证明CUDA安装成功
nvcc -V
2、安装cudnn
(1)进入官网:https://developer.nvidia.com/cudnn-downloads
(2)选择与所安装CUDA相匹配的cudnn,这里博主选择的8.9.7,点击下载
(3)下载后解压缩
(4)打开CUDA安装路径,图中所示文件夹
(5)将cudnn文件夹下include的所有文件复制粘贴到CUDA的include文件夹下,cudnn中的lib文件夹中文件和bin文件夹中文件同理,至此CUDA环境准备完成。
二、CUDA加速版OnnxRuntime配置
(1)打开OnnxRunTime官网,查看与安装CUDA和cudnn版本所匹配的onnxruntime版本
官网链接:https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#install
(2)打开onnxruntime下载页面,选择匹配的版本下载,这里作者选择1.17.1的cuda版本的onnxruntime下载(需要使用cuda加速的就一定要下带cuda的zip包,反之下载gpu或cpu版本则可)
官方下载页面链接:https://github.com/microsoft/onnxruntime/releases?page=1
(3)解压缩,至此onnxruntime配置完成。
三、Visual Studio2022中配置cuda加速版onnxruntime
(1)打开VS2022,创建新项目,勾选“将解决方案和项目放在同以目录中”
(2)选择“release模式”,并创建一个源文件。
(3)在状态栏中点击“项目”,选择“属性”,点击C++,选择“常规”,出现如下界面
(4)点击“附加包含目录”,点击右侧下拉符号,选择“编辑”
(5)按图中所示步骤点击,选择onnxruntime文件下include文件夹
(6)添加好路径后点击“确定”,因为博主代码中需使用opencv,故还配置了opencv路径。
(7)接下来配置库目录,如图
(8)选择onnxruntime文件夹下lib文件夹,选择好后,点击“确定”
(9)配置附加依赖项
(10)写入onnx三个lib文件,点击“确定”
(11)跑一下代码,点击“本地调试器”(没代码或者报错都没关系,这一步是为了让他生成release文件夹而已)
(12)右击项目,选择“在文件资源管理器中打开文件夹”,出现“x64”文件夹,点击并打开release文件夹
(13)打开CUDA安装文件夹,在NVIDIA GPU Computing Toolkit\CUDA\v12.4\bin路径下找到图中三个文件,复制到项目的release文件夹下
(14)打开onnx安装文件夹,在onnxruntime-win-x64-cuda-1.17.1\lib路径下找到图中所示三个文件,复制到项目的release文件夹下
四、测试
(1)写入代码进行环境配置安装测试
#include <onnxruntime_cxx_api.h>
#include <iostream>
int main() {
try {
Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "test");
Ort::SessionOptions session_options;
Ort::ThrowOnError(OrtSessionOptionsAppendExecutionProvider_CUDA(session_options, 0));
std::cout << "CUDA provider loaded successfully!" << std::endl;
} catch (const Ort::Exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
(2)配置成功