记一次C#使用Onnx深度学习下调用Cuda的方法
最近在研究深度学习,使用的是onnx架构,然后笔记本正好是N卡的,想着可以调用显卡来加速学习过程
调用显卡进行深度学习也遇到了一些问题,主要的问题是报这个错误 LoadLibrary failed with error 126 " when trying to load onnxruntime_providers_cuda.dll
那这篇文章也主要是为了解决如何使用C#部署cuda的Onnx而写的
在项目的Nuget里安装 Microsoft.ML.OnnxRuntime.Gpu
同时,如果之前安装了Microsoft.ML.OnnxRuntime的话,需要先删除Microsoft.ML.OnnxRuntime,只保留 Microsoft.ML.OnnxRuntime.Gpu就够了
然后注意一下版本,我这边最新的是1.17.1的,所以就按照1.17.1的来说
然后我们到https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html这里去
主要是注意这两个,ONNX的版本1.17支持的CUDA是12.2的(事实上 只要大版本是12就行,比如12.4也是可以使用的)
然后我们就要去Nvidia 的官网下载相关驱动了
首先我们去https://developer.nvidia.com/cuda-downloads,这里 下载最新的cuda 工具包,需要注意工具包的版本是否对应
比如当前工具包是12.4的,版本上和onnx 1.17.1要求的12.2属于同一个大版本下的,所以可以使用
这里需要下载3G的安装包,安装完成后
我们再去https://developer.nvidia.com/rdp/cudnn-download,这里下载cuDNN
cuDNN相当于cuda插件一般的存在,主要是为了深度学习使用的,
同样要注意版本,我们下载的是给cuda12使用的
下载完后,是一个压缩包
我们不用管,直接把压缩包里的全部文件都解压到cuda的默认安装路径就行(默认是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4,如果你在上一步安装cuda的时候,更改了cuda的安装路径,那解压的路径也要相应的改成自己设置的安装路径)
然后 这个时候,我们还需要下载一个的东西 https://forums.developer.nvidia.com/uploads/short-url/e76PYqafTHaGM1XQhQumCSL4vqb.zip
将这里下载到的zlib123dllx64.zip压缩包里的zlibwapi.dll解压到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\bin这个文件夹里面去,
最后,我们需要在环境变量里,将
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\include\
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\lib\x64\
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\extras\CUPTI\lib64\
这三个路径添加进去,至此cuda和cuDNN的安装便算是完成了。
然后接下来,我们需要做另外一个工作,之前在Nuget里安装了Microsoft.ML.OnnxRuntime.Gpu,但是这个Nuget自动安装的运行库其实我们是用不了的,会报错
这个时候,然后我们需要先浏览https://github.com/microsoft/onnxruntime/releases
手动下载onnxruntime-win-x64-cuda12-1.17.1.zip压缩包
将压缩包里的文件全部解压到覆盖C:\Users\{User Name}\.nuget\packages\microsoft.ml.onnxruntime.gpu.windows\1.17.1\runtimes\win-x64\native\ 里面
然后这个时候,在VS里清理项目并重新生成
通过Pinvoke调用该命令就能检查ONNX调用cuda是否成功了