顯卡、顯卡驅動、cuda 之間的關係是什麼?
新手菜鳥小白,剛學習深度學習,安裝了caffe,打算配置gpu加速。
顯卡是geforce gtx 745(比較低端),在ubuntu系統下,安裝了cuda8.0(過程中附帶重新安裝了顯卡驅動375.26),最終顯示安裝成功。但是回到圖形界面發現ubuntu系統的解析度降低,且設置里無法更改,所有圖標、文字等等全都變得很大;使用nvidia-smi也找不到顯卡驅動,但是使用nvcc -V能查到cuda信息;官網安裝教程里還讓檢驗device node,看是否存在dev/nvidia*文件,不存在的話手動用setup script生成,我的就不存在,且無法(可能是我的方法不對)生成。結果就是:顯卡有問題,cuda安裝好了。現在我覺得是安裝的顯卡驅動的問題。
在官網上查了其他符合版本重新安裝,也還是一樣出現上述問題。想知道顯卡,顯卡驅動,和cuda之間是怎樣的關係?他們的版本對彼此有啥影響?為什麼安裝cuda之前要重新安裝顯卡驅動?
顯卡:(GPU)主流是Nvidia的GPU,深度學習本身需要大量計算。GPU的並行計算能力,在過去幾年裡恰當地滿足了深度學習的需求。AMD的GPU基本沒有什麼支持,可以不用考慮。
驅動:沒有顯卡驅動,就不能識別GPU硬體,不能調用其計算資源。但是呢,Nvidia在Linux上的驅動安裝特別麻煩,尤其對於新手簡直就是噩夢。得屏蔽第三方顯卡驅動。下面會給出教程。
CUDA:是Nvidia推出的只能用於自家GPU的並行計算框架。只有安裝這個框架才能夠進行複雜的並行計算。主流的深度學習框架也都是基於CUDA進行GPU並行加速的,幾乎無一例外。還有一個叫做cudnn,是針對深度卷積神經網路的加速庫。
驅動安裝教程:
顯卡/GPU是具體幹活的晶元,其從host端拿命令和數據。顯卡驅動,分內核態和用戶態兩部分。內核態驅動只管將用戶態驅動發過來的命令和數據準備好,通知GPU來拿,利用環形fifo來下發命令和數據指針,並追蹤命令的完成狀態。用戶態部分,負責對shader程序的編譯,編譯成GPU的二進位代碼指令。OS提供的D3D,OpenGL等函數庫,屏蔽底層不同顯卡的差異。上層程序比如遊戲,在準備好對應的模型、貼圖紋理、著色器程序等數據之後,調用統一的D3D/OpenGL介面發起繪製請求,D3D則調用顯卡用戶態驅動提供的回調函數將對應的數據傳遞給後者,後者進行運行時編譯生成底層代碼,然後傳遞給內核態驅動,內核態驅動將命令和數據發送給GPU。至於GPU怎麼算的,那就是完全另外一回事了。
那麼,GUDA又是什麼呢。CUDA就是通用計算,遊戲讓GPU算的是一堆像素的顏色,而GPU完全可以算其他任何運算,比如大數據量矩陣乘法等。同樣,程序準備好對應的數組,以及讓GPU如何算這些數組的描述結構(比如讓GPU內部開多少個線程來算,怎麼算,之類),這些數據和描述,都要調用CUDA庫提供的函數來傳遞給CUDA,CUDA再調用顯卡用戶態驅動對CUDA程序進行編譯,後者再調用內核態驅動將命令以及編譯好的程序數據傳送給GPU,算。CUDA,就是相當於一個專門與通用程序而不是圖形程序對接的庫,那麼它的角色和地位與D3D/OpenGL在系統架構層次中是齊平的。
附錄,比較有用的。
顯卡不需要解釋了吧。
顯卡驅動,是很複雜的東西,裡面包含了opengl/d3d/metal的實現。
cuda是NVIDIA設計的的通用並行計算架構,估計是從opengl/d3d的compute shader發展起來的。
大家通常說的cuda,是cuda c++。一般顯卡指的是個人電腦圖形加速顯示卡,也就是板卡硬體。
顯卡驅動是硬體與系統溝通的軟體配套。CUDA 是特定顯卡特定驅動中的一個功能聚合介面,類似API,目的是簡化開發。硬體,底層介面,應用程序介面
去nvidia官網找驅動run文件安裝,在裝cuda時候就不要重裝驅動了,也就是accept之後的第一項是no
推薦閱讀:
※深度學習在AI實現方法上是否已經形成了壟斷,這是不是一種不好的狀態?
※深度學習在路徑規划上有哪些應用?
※如何看待 Nervana 被 Intel 收購?
※計算機方向學生 MacBook Pro 128GiB 是否夠用?
TAG:NVIDIA英偉達 | 圖形處理器GPU | CUDA | 深度學習DeepLearning | Caffe深度學習框架 |