記一次C#使用Onnx深度學習下呼叫Cuda的方法

0Emil0發表於2024-04-03

最近在研究深度學習,使用的是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是否成功了

相關文章