RTX3060+Win10+cuda11.1+cuDNN8.0.4+Libtorch1.9.0+Opencv3.4.6+VS2019深度學(xué)習(xí)C++配置

0前言

本博客旨在說明在顯卡RTX3060+Win10(顯卡RTX3080測試下來也可以)環(huán)境下,通過正確安裝最新驅(qū)動+cuda11.1+cudnn8.0.4來配置深度學(xué)習(xí)環(huán)境,接著在VS2019上使用Libtorch1.9.0(C++版本深度學(xué)習(xí)框架)來做深度學(xué)習(xí)的開發(fā)任務(wù),比如用C++來部署深度學(xué)習(xí)模型。

本博客的特點(diǎn)在于:

1.基本上將所有需要的操作都具體地交代了,包括一些可能出現(xiàn)的浪費(fèi)時(shí)間的坑點(diǎn),適合小白學(xué)習(xí)并快速上手;如果有已經(jīng)做好或者會的部分(比如安裝VS)請直接跳過。

2.在30系列顯卡上來使用Libtorch1.9版本的配置教程,目前網(wǎng)上系統(tǒng)介紹的資料較少,本文盡量做到全面介紹。

3.本教程所有需要下載的安裝包或者庫都有兩種下載方式:

第一種是說明如何在官網(wǎng)上找到對應(yīng)的版本,自行下載;

第二種是可以直接從本人生成的百度網(wǎng)盤鏈接下載所需要的安裝包。

鏈接:https://pan.baidu.com/s/16M66qZ3ZYY9EzXjUGf4d3g

提取碼:6666

打包的文件夾如下圖所示,勾選需要的安裝包或者庫保存下載。

我的環(huán)境配置:

顯卡RTX3060

Windows10

驅(qū)動466.77

cuda11.1

cuDNN8.0.4

Opencv3.4.6

Libtorch1.9.0

Visual StudioCommunity2019

1檢查顯卡

搜索"設(shè)備管理器",在彈出的界面中點(diǎn)擊顯示適配器,看顯示的是什么

如果顯示當(dāng)前讀取到的顯卡型號,那么說明顯卡可以使用了。

如果顯示的是下圖的Microsoft 基本顯示適配器

則說明驅(qū)動需要更新,需要安裝最新的驅(qū)動

而驅(qū)動安裝只需要記住一個(gè)原則:使用最新版本的驅(qū)動即可。

最新的驅(qū)動一定可以向下兼容。

本人提供的包:

找到466.77-desktop-win10-64bit-international-dch-whql,下載。

官網(wǎng)下載:

可以去NVIDIA官網(wǎng)下載最新驅(qū)動

比如RTX3060顯卡+Win10,就選擇如下圖所示的配置

接著點(diǎn)擊搜索,下載即可

點(diǎn)擊466.77-desktop-win10-64bit-international-dch-whql

一路安裝到底即可。

等安裝成功后再次檢查設(shè)備管理器的顯示適配器,應(yīng)該會顯示當(dāng)前讀取到的顯卡型號,如下圖所示。


2下載、安裝cuda11.1.0

2.1下載cuda11.1.0

本人提供的包:

找到cuda_11.1.0_456.43_win10.exe,下載。

官網(wǎng)下載:

建議百度搜索cuda11.1.0,會顯示cuda11.1.0的下載地址,如下圖所示。按照下圖

建議不要從英偉達(dá)官網(wǎng)進(jìn)去尋找cuda11.1.0,因?yàn)橛ミ_(dá)官網(wǎng)會顯示最新版本的cuda(目前是11.3,以后應(yīng)該會是更高的版本),不是所需要的歷史版本,而安裝太高的版本就可能需要更高版本的Libtorch。

2.2安裝cuda11.1.0

點(diǎn)擊cuda_11.1.0_456.43_win10,一路安裝到底即可

PS:最后的界面Launch Samples可以不用勾選,直接關(guān)閉。

3下載、配置cuDNN8.0.4

3.1下載cuDNN8.0.4

個(gè)人建議這里直接使用本人網(wǎng)盤里的cuDNN壓縮包,因?yàn)槿绻麖挠ミ_(dá)官網(wǎng)下載的話需要登錄,而且英偉達(dá)官網(wǎng)的速度比較慢,所以比較麻煩。

本人提供的包:

找到cudnn-11.1-windows-x64-v8.0.4.30.zip,下載。

官網(wǎng)下載:

先百度搜索cuDNN下載,進(jìn)入英偉達(dá)官網(wǎng)的cuDNN界面

點(diǎn)擊Download cuDNN,進(jìn)入以下界面。

如果沒有注冊過的話先點(diǎn)擊Join Now進(jìn)行注冊;如果注冊過的話,點(diǎn)擊Login來登錄。

登陸上之后,進(jìn)入以下界面,勾選I Agree To the Terms of the cuDNN Software License Agreement,會彈出Archived cuDNN Releases

點(diǎn)擊Archived cuDNN Releases,在新的界面中找到對應(yīng)cuda11.1的cudnn8.0.4版本,找到Win10對應(yīng)的cuDNN Library,點(diǎn)擊下載。

3.2配置cuDNN8.0.4

解壓cudnn-11.1-windows-x64-v8.0.4.30文件

打開里面的文件,點(diǎn)擊cuda,會有3個(gè)文件夾bin、include、lib

接著打開以下的路徑:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1

然后把剛剛解壓好的cudnn的3個(gè)文件夾bin、include、lib里面的文件分別復(fù)制到上面這個(gè)目錄下對應(yīng)的bin、include、lib里面去,復(fù)制完后應(yīng)該要有下圖所示的文件。

4確認(rèn)cuda是否安裝成功

鍵盤按Win+R

輸入cmd,按回車,在彈出的界面輸入nvcc -V

按回車,如果出現(xiàn)以下界面,則說明安裝cuda11.1成功。


5下載、安裝、配置Visual Studio2019

5.1下載VS2019

進(jìn)入Microsoft Visual Studio官網(wǎng)

本人選擇社區(qū)版本,下載。

5.2安裝VS2019

接著安裝VS2019,一路安裝到底,直到出現(xiàn)以下界面的時(shí)候勾選"使用C++的桌面開發(fā)"和"Visual Studio擴(kuò)展開發(fā)"。

6.下載Opencv3.4.6

Tip:

Opencv版本如果使用太高的版本可能會不兼容,本人使用Opencv3.4.6沒有報(bào)錯(cuò)。

本人提供的包:

找到opencv-3.4.6-vc14_vc15,下載,安裝后生成opencv文件夾。

官網(wǎng)下載:

操作:

進(jìn)入Opencv官網(wǎng)在Library一欄找到Releases,如下圖所示:

找到所需版本,點(diǎn)擊Windows,就可以下載opencv-3.4.6-vc14_vc15.exe,點(diǎn)擊后就可以生成opencv庫。

7下載Libtorch1.9.0

Tip:

這里需要注意由于30系列顯卡的關(guān)系,所需要的安裝cuda就得在11以上,而較高的cuda版本就需要較高的Libtorch版本,具體的關(guān)系就需要去Pytorch官網(wǎng)上查看。

結(jié)論:

顯卡型號決定cuda版本的下限,而cuda版本又決定了torch的庫(不管是C++的Libtorch還是Python的Pytorch)是需要和cuda版本匹配的。

PS:

事實(shí)上本人在第一次直接在3060顯卡上跑由Libtorch1.7.1開發(fā)的程序時(shí)死活就是沒法加載到GPU上,直到后來想下載debug模式的庫時(shí)候才想起來Libtorch有一個(gè)Compute Platform這個(gè)要求,所以這才注意到本人之前使用的Libtorch1.7.1是不支持cuda11.1的。

本人提供的包:

找到libtorch-win-shared-with-deps-1.9.0+cu111.zip,下載,解壓。

官網(wǎng)下載:

Pytorch的官網(wǎng)上可以查到目前Libtorch最新版本1.9.0可以有支持cuda11.1的版本,于是選擇最新的這個(gè)Libtorch1.9.0的Release版本。

下載,解壓。


8VS配置Opencv和Libtorch

VS配置Opencv和Libtorch總共包括頭文件,lib文件和dll文件。

操作:

1.打開VS2019,在界面上找到創(chuàng)建新項(xiàng)目,點(diǎn)擊后在彈出的界面中,點(diǎn)擊空項(xiàng)目

點(diǎn)擊右下角的下一步,接著在配置新項(xiàng)目的界面中,輸入自己想取的項(xiàng)目名稱名字和對應(yīng)的位置

再點(diǎn)擊右下角的創(chuàng)建,這時(shí)會彈出項(xiàng)目界面,此時(shí)已經(jīng)產(chǎn)生待會用于C++深度學(xué)習(xí)開發(fā)的項(xiàng)目了。

2.確定自己的編譯模式(Debug/Release)和編譯平臺(x86/x64/Any Cpu)

本人使用的是Release+x64

Tip:關(guān)于編譯模式和編譯平臺的選擇,可以參考以下資料:

Visual Studio中Debug與Release以及x86、x64、Any CPU的區(qū)別


3.配置頭文件

在項(xiàng)目界面找到右邊的項(xiàng)目名稱并右擊,找到屬性并點(diǎn)擊

在彈出的屬性頁中找到配置屬性—>VC++目錄

在包含目錄中添加opencv和Libtorch的include路徑,目的為了調(diào)用里面的h文件或者h(yuǎn)pp文件

D:\opencv\build\include

D:\libtorch190cu111\include

D:\libtorch190cu111\include\torch\csrc\api\include

點(diǎn)擊確定,再點(diǎn)擊應(yīng)用。

4.配置lib文件

還是在剛剛的屬性頁界面中找到配置屬性—>VC++目錄

在庫目錄中添加opencv和Libtorch的lib路徑,目的是為了使用里面的lib文件來鏈接

D:\opencv\build\x64\vc14\lib

D:\libtorch190cu111\lib

(以下圖示路徑是本人的路徑,請修改成自己的opencv和Libtorch的路徑)

接著繼續(xù)在屬性頁中的左邊點(diǎn)擊鏈接器—>輸入,點(diǎn)擊附加依賴項(xiàng),?編輯,

彈出的界面中添加opencv和Libtorch的lib路徑下的lib文件名

opencv_world346.lib

asmjit.lib

c10.lib

c10d.lib

c10_cuda.lib

caffe2_detectron_ops_gpu.lib

caffe2_module_test_dynamic.lib

caffe2_nvrtc.lib

clog.lib

cpuinfo.lib

dnnl.lib

fbgemm.lib

libprotobuf-lite.lib

libprotobuf.lib

libprotoc.lib

mkldnn.lib

torch.lib

torch_cpu.lib

torch_cuda.lib

torch_cuda_cpp.lib

torch_cuda_cu.lib

此外還需要再加兩行

/INCLUDE:?warp_size@cuda@at@@YAHXZ

/INCLUDE:?searchsorted_cuda@native@at@@YA?AVTensor@2@AEBV32@0_N1@Z

(本人是opencv_world346.lib,如果一開始選擇了Debug模式就是opencv_world346d.lib)

這兩行鏈接的作用是保證torch::cuda::is_available()返回True,不加的話有可能返回False

參考資料:

1.Torch::cuda::is_available return false in libtorch 1.5

2.libtorch 1.8.0 precompiled has no CUDA backend linked (Adding "-INCLUDE:?warp_size@cuda@at@@YAHXZ" no longer helps) #54131

至于上面兩具體怎么理解本人也不是很懂,希望有大佬能指出是如何理解的。

最后點(diǎn)擊右下角的應(yīng)用。


5.配置dll文件

配置dll文件可以使用3種方法:

a.將opencv和Libtorch需要調(diào)用的dll對應(yīng)的路徑(Opencv的D:\opencv\build\x64\vc14\bin和Libtorch的D:\libtorch190cu111\lib)放入系統(tǒng)環(huán)境變量中。

b.將opencv和Libtorch需要調(diào)用的dll文件復(fù)制到執(zhí)行程序的當(dāng)前目錄下(本人選擇的Release版本,所以就是復(fù)制編譯通過后生成的D:\Libtorch_test\x64\Release的目錄下)。

c.將opencv和Libtorch需要調(diào)用的dll對應(yīng)的路徑配置到VS中。

參考資料:

pytorch部署torchscript篇


而本人平常由于工作需要,經(jīng)常需要把做好的軟件放到其他工控機(jī)上測試,所以會傾向于第二種直接復(fù)制dll文件的方式,否則的話放到新的機(jī)器上又需要重新配置,會比較麻煩和低效。

而如果是采用第二種方式的話需要在編譯通過后生成包含exe的Release目錄下去復(fù)制。

所以建議讀者需要等到后面編譯成功后復(fù)制dll文件,而此項(xiàng)目需要復(fù)制的dll文件包括以下:

9代碼測試

9.1新建cpp

項(xiàng)目—>源文件,右擊—>添加—>新建項(xiàng),彈出的界面如下,然后修改名稱改為main.cpp,再點(diǎn)擊右下角的添加

9.2代碼測試

這里主要測試Libtorch是否能正常使用,可以使用以下代碼,如果返回的都是1說明配置成功了。

#include <iostream>

#include <torch/torch.h>

int main() {

????std::cout << "CUDA is available:" << torch::cuda::is_available() << std::endl;

????std::cout << "CUDNN is available:" << torch::cuda::cudnn_is_available() << std::endl;

????std::cout << "GPU counts:" << torch::cuda::device_count() << std::endl;

????return 0;

}

Tip:如果要復(fù)制代碼到main.cpp的話,建議先復(fù)制到記事本里面,然后再復(fù)制到main.cpp,否則會出現(xiàn)以下提示,導(dǎo)致cpp文件不能調(diào)用Libtorch庫。

將代碼放入main.cpp后先編譯,具體操作是右擊項(xiàng)目,點(diǎn)擊重新生成,等待一會時(shí)間,如果出現(xiàn)全部重新生成:成功1個(gè),失敗0個(gè),跳過0個(gè),就說明編譯成功。

此時(shí)Release目錄已經(jīng)生成。

接著將上面所需要復(fù)制的dll文件復(fù)制到當(dāng)前的目錄D:\Libtorch_test\x64\Release

然后回到項(xiàng)目界面,按F5運(yùn)行程序,如果運(yùn)行成功的話界面如下:

10項(xiàng)目推薦

這里給出我?guī)熜值囊粋€(gè)Libtorch的開源項(xiàng)目

包含了圖像分割從初始化模型、加載權(quán)重pt文件、訓(xùn)練模型和預(yù)測結(jié)果,是本人見到比較完整的Libtorch項(xiàng)目。

可以按照項(xiàng)目里的流程來學(xué)習(xí)如何使用Libtorch來做深度學(xué)習(xí)與圖像處理的開發(fā)任務(wù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,486評論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內(nèi)容