日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

显卡、显卡驱动、CUDA、CUDA Toolkit、cuDNN 梳理

發(fā)布時(shí)間:2025/3/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 显卡、显卡驱动、CUDA、CUDA Toolkit、cuDNN 梳理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

顯卡、顯卡驅(qū)動(dòng)、CUDA、CUDA Toolkit、cuDNN 梳理

轉(zhuǎn)自:https://www.cnblogs.com/marsggbo/p/11838823.html#nvccnvidia-smi

GPU型號(hào)含義

  • 顯卡: 簡(jiǎn)單理解這個(gè)就是我們前面說(shuō)的GPU,尤其指NVIDIA公司生產(chǎn)的GPU系列,因?yàn)楹竺娼榻B的cuda,cudnn都是NVIDIA公司針對(duì)自身的GPU獨(dú)家設(shè)計(jì)的。
  • 顯卡驅(qū)動(dòng):很明顯就是字面意思,通常指NVIDIA Driver,其實(shí)它就是一個(gè)驅(qū)動(dòng)軟件,而前面的顯卡就是硬件。
  • gpu架構(gòu):Tesla、Fermi、Kepler、Maxwell、Pascal
  • 芯片型號(hào):GT200、GK210、GM104、GF104等
  • 顯卡系列:GeForce、Quadro、Tesla
  • GeForce顯卡型號(hào):G/GS、GT、GTS、GTX

gpu架構(gòu)指的是硬件的設(shè)計(jì)方式,例如流處理器簇中有多少個(gè)core、是否有L1 or L2緩存、是否有雙精度計(jì)算單元等等。每一代的架構(gòu)是一種思想,如何去更好完成并行的思想

芯片就是對(duì)上述gpu架構(gòu)思想的實(shí)現(xiàn),例如芯片型號(hào)GT200中第二個(gè)字母代表是哪一代架構(gòu),有時(shí)會(huì)有100和200代的芯片,它們基本設(shè)計(jì)思路是跟這一代的架構(gòu)一致,只是在細(xì)節(jié)上做了一些改變,例如GK210比GK110的寄存器就多一倍。有時(shí)候一張顯卡里面可能有兩張芯片,Tesla k80用了兩塊GK210芯片。這里第一代的gpu架構(gòu)的命名也是Tesla,但現(xiàn)在基本已經(jīng)沒(méi)有這種設(shè)計(jì)的卡了,下文如果提到了會(huì)用Tesla架構(gòu)和Tesla系列來(lái)進(jìn)行區(qū)分。

而顯卡系列在本質(zhì)上并沒(méi)有什么區(qū)別,只是NVIDIA希望區(qū)分成三種選擇,GeFore用于家庭娛樂(lè),Quadro用于工作站,而Tesla系列用于服務(wù)器。Tesla的k型號(hào)卡為了高性能科學(xué)計(jì)算而設(shè)計(jì),比較突出的優(yōu)點(diǎn)是雙精度浮點(diǎn)運(yùn)算能力高并且支持ECC內(nèi)存,但是雙精度能力好在深度學(xué)習(xí)訓(xùn)練上并沒(méi)有什么卵用,所以Tesla系列又推出了M型號(hào)來(lái)做專(zhuān)門(mén)的訓(xùn)練深度學(xué)習(xí)網(wǎng)絡(luò)的顯卡。需要注意的是Tesla系列沒(méi)有顯示輸出接口,它專(zhuān)注于數(shù)據(jù)計(jì)算而不是圖形顯示。

最后一個(gè)GeForce的顯卡型號(hào)是不同的硬件定制,越往后性能越好,時(shí)鐘頻率越高顯存越大,即G/GS<GT<GTS<GTX。

CUDA

CUDA英文全稱(chēng)是Compute Unified Device Architecture,是顯卡廠(chǎng)商N(yùn)VIDIA推出的運(yùn)算平臺(tái)。 CUDA?是一種由NVIDIA推出的通用并行計(jì)算架構(gòu),該架構(gòu)使GPU能夠解決復(fù)雜的計(jì)算問(wèn)題。按照Nvidia官方的說(shuō)法是,CUDA是一個(gè)并行計(jì)算平臺(tái)和編程模型,能夠使得使用GPU進(jìn)行通用計(jì)算變得簡(jiǎn)單和優(yōu)雅

cuDNN

cuDNN其實(shí)就是一個(gè)專(zhuān)門(mén)為深度學(xué)習(xí)計(jì)算設(shè)計(jì)的軟件庫(kù),里面提供了很多專(zhuān)門(mén)的計(jì)算函數(shù),如卷積等。從上圖也可以看到,還有很多其他的軟件庫(kù)和中間件,包括實(shí)現(xiàn)c++ STL的thrust、實(shí)現(xiàn)gpu版本blas的cublas、實(shí)現(xiàn)快速傅里葉變換的cuFFT、實(shí)現(xiàn)稀疏矩陣運(yùn)算操作的cuSparse以及實(shí)現(xiàn)深度學(xué)習(xí)網(wǎng)絡(luò)加速的cuDNN等等。

CUDA Toolkit

CUDA Toolkit由以下組件組成:

  • Compiler: CUDA-C和CUDA-C++編譯器NVCC位于bin/目錄中。它建立在NVVM優(yōu)化器之上,而NVVM優(yōu)化器本身構(gòu)建在LLVM編譯器基礎(chǔ)結(jié)構(gòu)之上。希望開(kāi)發(fā)人員可以使用nvm/目錄下的Compiler SDK來(lái)直接針對(duì)NVVM進(jìn)行開(kāi)發(fā)。
  • Tools: 提供一些像profiler,debuggers等工具,這些工具可以從bin/目錄中獲取
  • Libraries: 下面列出的部分科學(xué)庫(kù)和實(shí)用程序庫(kù)可以在lib/目錄中使用(Windows上的DLL位于bin/中),它們的接口在include/目錄中可獲取。
    • cudart: CUDA Runtime
    • cudadevrt: CUDA device runtime
    • cupti: CUDA profiling tools interface
    • nvml: NVIDIA management library
    • nvrtc: CUDA runtime compilation
    • cublas: BLAS (Basic Linear Algebra Subprograms,基礎(chǔ)線(xiàn)性代數(shù)程序集)
    • cublas_device: BLAS kernel interface
  • CUDA Samples: 演示如何使用各種CUDA和library API的代碼示例。可在Linux和Mac上的samples/目錄中獲得,Windows上的路徑是C:\ProgramData\NVIDIA Corporation\CUDA Samples中。在Linux和Mac上,samples/目錄是只讀的,如果要對(duì)它們進(jìn)行修改,則必須將這些示例復(fù)制到另一個(gè)位置。
  • CUDA Driver: 運(yùn)行CUDA應(yīng)用程序需要系統(tǒng)至少有一個(gè)具有CUDA功能的GPU與CUDA工具包兼容的驅(qū)動(dòng)程序。每個(gè)版本的CUDA工具包都對(duì)應(yīng)一個(gè)最低版本的CUDA Driver,也就是說(shuō)如果你安裝的CUDA Driver版本比官方推薦的還低,那么很可能會(huì)無(wú)法正常運(yùn)行。CUDA Driver是向后兼容的,這意味著根據(jù)CUDA的特定版本編譯的應(yīng)用程序?qū)⒗^續(xù)在后續(xù)發(fā)布的Driver上也能繼續(xù)工作。通常為了方便,在安裝CUDA Toolkit的時(shí)候會(huì)默認(rèn)安裝CUDA Driver。在開(kāi)發(fā)階段可以選擇默認(rèn)安裝Driver,但是對(duì)于像Tesla GPU這樣的商用情況時(shí),建議在官方安裝最新版本的Driver。

nvcc

這個(gè)在前面已經(jīng)介紹了,nvcc其實(shí)就是CUDA的編譯器,可以從CUDA Toolkit的/bin目錄中獲取,類(lèi)似于gcc就是C語(yǔ)言的編譯器。由于程序是要經(jīng)過(guò)編譯器編程成可執(zhí)行的二進(jìn)制文件,而cuda程序有兩種代碼,一種是運(yùn)行在cpu上的host代碼,一種是運(yùn)行在gpu上的device代碼,所以nvcc編譯器要保證兩部分代碼能夠編譯成二進(jìn)制文件在不同的機(jī)器上執(zhí)行。nvcc涉及到的文件后綴及相關(guān)意義如下表:

文件后綴意義
.cucuda源文件,包括host和device代碼
.cup經(jīng)過(guò)預(yù)處理的cuda源文件,編譯選項(xiàng)–preprocess/-E
.cc源文件
.cc/.cxx/.cppc++源文件
.gpugpu中間文件,編譯選項(xiàng)–gpu
.ptx類(lèi)似匯編代碼,編譯選項(xiàng)–ptx
.o/.obj目標(biāo)文件,編譯選項(xiàng)–compile/-c
.a/.lib庫(kù)文件,編譯選項(xiàng)–lib/-lib
.res資源文件
.so共享目標(biāo)文件,編譯選項(xiàng)–shared/-shared
.cubincuda的二進(jìn)制文件,編譯選項(xiàng)-cubin

nvidia-smi

nvidia-smi全程是NVIDIA System Management Interface ,它是一個(gè)基于前面介紹過(guò)的NVIDIA Management Library(NVML)構(gòu)建的命令行實(shí)用工具,旨在幫助管理和監(jiān)控NVIDIA GPU設(shè)備。

nvcc與nvidia-smi顯示CUDA版本不同

在我們實(shí)驗(yàn)室的服務(wù)器上nvcc --version顯示的結(jié)果如下:

nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2018 NVIDIA Corporation Built on Tue_Jun_12_23:07:04_CDT_2018 Cuda compilation tools, release 9.2, V9.2.148

而nvidia-smi顯示結(jié)果如下:

+-----------------------------------------------------------------------------+ | NVIDIA-SMI 410.104 Driver Version: 410.104 CUDA Version: 10.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla V100-PCIE... On | 00000000:01:00.0 Off | Off | | N/A 28C P0 26W / 250W | 0MiB / 16130MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 1 Tesla P100-PCIE... On | 00000000:02:00.0 Off | Off | | N/A 24C P0 30W / 250W | 0MiB / 16280MiB | 0% Default | +-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+

可以看到nvcc的CUDA 版本是9.2,而nvidia-smi的CUDA版本是10.0。很奇怪的是有時(shí)候絕大多數(shù)情況代碼也能整成跑起來(lái),stackoverflow上的一個(gè)解釋如下:

CUDA有兩個(gè)主要的API:runtime(運(yùn)行時(shí)) APIdriver API。這兩個(gè)API都有對(duì)應(yīng)的CUDA版本(如9.2和10.0等)。

  • 用于支持driver API的必要文件(如libcuda.so)是由GPU driver installer安裝的。nvidia-smi就屬于這一類(lèi)API。
  • 用于支持runtime API的必要文件(如libcudart.so以及nvcc)是由CUDA Toolkit installer安裝的。(CUDA Toolkit Installer有時(shí)可能會(huì)集成了GPU driver Installer)。nvcc是與CUDA Toolkit一起安裝的CUDA compiler-driver tool,它只知道它自身構(gòu)建時(shí)的CUDA runtime版本。它不知道安裝了什么版本的GPU driver,甚至不知道是否安裝了GPU driver。

綜上,如果driver API和runtime API的CUDA版本不一致可能是因?yàn)槟闶褂玫氖菃为?dú)的GPU driver installer,而不是CUDA Toolkit installer里的GPU driver installer。

runtime 與 driver API 的區(qū)別

下圖很清楚的展示前面提到的各種概念之間的關(guān)系,其中runtime和driver API在很多情況非常相似,也就是說(shuō)用起來(lái)的效果是等價(jià)的,但是你不能混合使用這兩個(gè)API,因?yàn)槎呤腔コ獾摹R簿褪钦f(shuō)在開(kāi)發(fā)過(guò)程中,你只能選擇其中一種API。簡(jiǎn)單理解二者的區(qū)別就是:runtime是更高級(jí)的封裝,開(kāi)發(fā)人員用起來(lái)更方便,而driver API更接近底層,速度可能會(huì)更快。

兩種API詳細(xì)的區(qū)別如下:

  • 復(fù)雜性

    • runtime API通過(guò)提供隱式初始化、上下文管理和模塊管理來(lái)簡(jiǎn)化設(shè)備代碼管理。這使得代碼更簡(jiǎn)單,但也缺乏驅(qū)動(dòng)程序API所具有的控制級(jí)別。
    • 相比之下,driver API提供了更細(xì)粒度的控制,特別是在上下文和模塊加載方面。實(shí)現(xiàn)內(nèi)核啟動(dòng)要復(fù)雜得多,因?yàn)閳?zhí)行配置和內(nèi)核參數(shù)必須用顯式函數(shù)調(diào)用指定。
  • 控制

    • 對(duì)于runtime API,其在運(yùn)行時(shí),所有內(nèi)核都在初始化期間自動(dòng)加載,并在程序運(yùn)行期間保持加載狀態(tài)。
    • 而使用driver API,可以只加載當(dāng)前需要的模塊,甚至動(dòng)態(tài)地重新加載模塊。driver API也是語(yǔ)言獨(dú)立的,因?yàn)樗惶幚韈ubin對(duì)象。
  • 上下文管理

    上下文管理可以通過(guò)driver API完成,但是在runtime API中不公開(kāi)。相反,runtime API自己決定為線(xiàn)程使用哪個(gè)上下文:

    • 如果一個(gè)上下文通過(guò)driver API成為調(diào)用線(xiàn)程的當(dāng)前上下文,runtime將使用它,
    • 如果沒(méi)有這樣的上下文,它將使用“主上下文(primary context)”。

主上下文會(huì)根據(jù)需要?jiǎng)?chuàng)建,每個(gè)設(shè)備每個(gè)進(jìn)程一個(gè)上下文,并進(jìn)行引用計(jì)數(shù),然后在沒(méi)有更多的引用時(shí)銷(xiāo)毀它們。在一個(gè)進(jìn)程中,所有runtime API的用戶(hù)都將共享主上下文,除非上下文已成為每個(gè)線(xiàn)程的當(dāng)前上下文。runtime使用的上下文,即當(dāng)前上下文或主上下文,可以用cudaDeviceSynchronize()同步,也可以用cudaDeviceReset()銷(xiāo)毀。
但是,將runtime API與主上下文一起使用會(huì)有tradeoff。例如,對(duì)于那些需要給較大的軟件包寫(xiě)插件的開(kāi)發(fā)者來(lái)說(shuō)者會(huì)帶來(lái)不少麻煩,因?yàn)槿绻械牟寮荚谕粋€(gè)進(jìn)程中運(yùn)行,它們將共享一個(gè)上下文,但可能無(wú)法相互通信。也就是說(shuō),如果其中一個(gè)在完成所有CUDA工作后調(diào)用cudaDeviceReset(),其他插件將失敗,因?yàn)樗鼈兪褂玫纳舷挛脑谒鼈儾恢榈那闆r下被破壞。為了避免這個(gè)問(wèn)題,CUDA clients可以使用driver API來(lái)創(chuàng)建和設(shè)置當(dāng)前上下文,然后使用runtime API來(lái)處理它。但是,上下文可能會(huì)消耗大量的資源,比如設(shè)備內(nèi)存、額外的主機(jī)線(xiàn)程和設(shè)備上上下文切換的性能成本。當(dāng)將driver API與基于runtime API(如cuBLAS或cuFFT)構(gòu)建的庫(kù)一起使用時(shí),這種runtime-driver上下文共享非常重要。

Linux中PATH、LIBRARY_PATH、LD_LIBRARY_PATH 的區(qū)別

PATH

PATH是可執(zhí)行文件路徑,是三個(gè)中我們最常接觸到的,因?yàn)槲覀兠钚兄械拿烤淠苓\(yùn)行的命令,如ls、top、ps等,都是系統(tǒng)通過(guò)PATH找到了這個(gè)命令執(zhí)行文件的所在位置,再run這個(gè)命令(可執(zhí)行文件)。 比如說(shuō),在用戶(hù)的目錄~/mycode/下有一個(gè)bin文件夾,里面放了有可執(zhí)行的二進(jìn)制文件、shell腳本等。如果想要在任意目錄下都能運(yùn)行上述bin文件夾的可執(zhí)行文件,那么只需要把這個(gè)bin的路徑添加到PATH即可,方法如下:

# vim ~/.bashrc PATH=$PATH:~/mycode/bin

LIBRARY_PATH和LD_LIBRARY_PATH

這兩個(gè)路徑可以放在一起討論,

  • LIBRARY_PATH是程序編譯期間查找動(dòng)態(tài)鏈接庫(kù)時(shí)指定查找共享庫(kù)的路徑
  • LD_LIBRARY_PATH是程序加載運(yùn)行期間查找動(dòng)態(tài)鏈接庫(kù)時(shí)指定除了系統(tǒng)默認(rèn)路徑之外的其他路徑

兩者的共同點(diǎn)是庫(kù),庫(kù)是這兩個(gè)路徑和PATH路徑的區(qū)別,PATH是可執(zhí)行文件。

兩者的差異點(diǎn)是使用時(shí)間不一樣。一個(gè)是編譯期,對(duì)應(yīng)的是開(kāi)發(fā)階段,如gcc編譯;一個(gè)是加載運(yùn)行期,對(duì)應(yīng)的是程序已交付的使用階段。

配置方法也是類(lèi)似:

export LD_LIBRARY_PATH=LD_LIBRARY_PATH:XXXX

多版本CUDA切換

1 CUDA下載與安裝方式的選擇

到 CUDA Toolkit Download 下載所需版本,以cuda_9.0.176_384.81_linux.run為例:

建議選擇使用 .run 文件安裝,因?yàn)槭褂?.deb可能會(huì)將已經(jīng)安裝的較新的顯卡驅(qū)動(dòng)替換。

2 安裝

進(jìn)入到放置 cuda_9.0.176_384.81_linux.run 的目錄:

sudo chmod +x cuda_9.0.176_384.81_linux.run # 為 cuda_9.0.176_384.81_linux.run 添加可執(zhí)行權(quán)限 ./cuda_9.0.176_384.81_linux.run # 安裝 cuda_9.0.176_384.81_linux.run

在安裝過(guò)程中截取其中比較重要的幾個(gè)選擇:

Do you accept the previously read EULA? accept/decline/quit: acceptInstall NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81? (y)es/(n)o/(q)uit: n # 如果在這之前已經(jīng)安裝好更高版本的顯卡驅(qū)動(dòng)就不需要再重復(fù)安裝,如果需要重復(fù)安裝就選擇 yes,此外還需要關(guān)閉圖形界面。Install the CUDA 9.0 Toolkit? (y)es/(n)o/(q)uit: yEnter Toolkit Location[ default is /usr/local/cuda-9.0 ]: # 一般選擇默認(rèn)即可,也可以選擇安裝在其他目錄,在需要用的時(shí)候指向該目錄或者使用軟連接 link 到 /usr/local/cuda。/usr/local/cuda-9.0 is not writable. Do you wish to run the installation with 'sudo'? (y)es/(n)o: yPlease enter your password: Do you want to install a symbolic link at /usr/local/cuda? # 是否將安裝目錄通過(guò)軟連接的方式 link 到 /usr/local/cuda,yes or no 都可以,取決于你是否使用 /usr/local/cuda 為默認(rèn)的 cuda 目錄。 (y)es/(n)o/(q)uit: nInstall the CUDA 9.0 Samples? (y)es/(n)o/(q)uit: n

前面選擇的一些匯總:

Driver: Not Selected Toolkit: Installed in /usr/local/cuda-9.0 Samples: Not SelectedPlease make sure that- PATH includes /usr/local/cuda-9.0/bin- LD_LIBRARY_PATH includes /usr/local/cuda-9.0/lib64, or, add /usr/local/cuda-9.0/lib64 to /etc/ld.so.conf and run ldconfig as rootTo uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-9.0/binPlease see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-9.0/doc/pdf for detailed information on setting up CUDA.***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 9.0 functionality to work. To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:sudo <CudaInstaller>.run -silent -driver

安裝完成后可在/usr/local目錄下看到:

cuda-8.0 # 筆者之前安裝的cuda-8.0 cuda-9.0 # 剛剛安裝的cuda-9.0 cuda # cuda-8.0 的軟連接

3 多個(gè)CUDA版本間的切換

將~/.bashrc 或 ~/.zshrc 下與cuda相關(guān)的路徑都改為 /usr/local/cuda/ 而不使用 /usr/local/cuda-8.0/ 或/usr/local/cuda-9.0/。

#在切換cuda版本時(shí) rm -rf /usr/local/cuda#刪除之前創(chuàng)建的軟鏈接 sudo ln -s /usr/local/cuda-8.0/ /usr/local/cuda/ nvcc --version #查看當(dāng)前 cuda 版本nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2016 NVIDIA Corporation Built on Mon_Jan_23_12:24:11_CST_2017 Cuda compilation tools, release 8.0, V8.0.62#cuda8.0 切換到 cuda9.0 rm -rf /usr/local/cuda sudo ln -s /usr/local/cuda-9.0/ /usr/local/cuda/ nvcc --version

總結(jié)

以上是生活随笔為你收集整理的显卡、显卡驱动、CUDA、CUDA Toolkit、cuDNN 梳理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。