在安裝Cuda前,首先要知道nvcc是甚麼東西,Nvidia CUDA Compiler也被稱之為nvcc,由此可知有時會聽到的“幫自己需要跑研究的電腦裝Cuda”其實就是裝這個所謂的nvcc拉,但是安裝nvcc往往是要費一番功夫的,不然就不會常常聽到有人說自己的電腦Cuda裝不上去了。
而在繼續往下講下去之前,要先分清楚nvcc其實和Cuda是不一樣的,這邊大家常常說的Cuda其實是在你安裝你顯示卡的驅動軟體時,就一併幫你安裝好的,所以在這邊我們先把Cuda當成驅動程式來理解會比較好懂一些。
假設你現在所使用的是可以使用cuda的nvidia顯示卡,為了確認在安裝驅動程式後會自動幫你安裝cuda,首先你可以在ubuntu系統下輸入
sudo ubuntu-drivers devices
以我的顯示卡是RTX 2070 super為例子
可以看到ubuntu幫我抓到了這張顯卡可以安裝的4種驅動
這邊我直接安裝最高的nvidia-driver-460版本
要注意如果你的ubuntu系統下的顯示卡已經有安裝過驅動的話,要先轉到ubuntu內建的圖形介面xserver-xorg下刪除現有的nvidia顯示卡驅動版本,然後再安裝新的驅動,如何轉換到xserver-xorg圖形介面如以下操作
開啟Software Updater
若看到以下視窗,點選setting
並選擇additional driver,選擇xserver-xorg後點選Apply Changes
最後再重新開機
在重新開機後開啟Terminal,輸入以下指令
sudo apt purge nvidia*
這個指令會把你電腦現有的nvidia driver清除乾淨,清除完後就再開啟Software Updater依照上面的過程再重新做一遍,差別只是這次在additional drivers的選單下,要選擇你要安裝的驅動版本,以我為例就是460版本,然後再重新開機就可以了
確認Nvidia Driver
重新啟動後,開啟terminal後輸入
nvidia-smi
即可看見以下資訊,在右上角可以看到Driver Version是460.32.03,CUDA Version是11.2而CUDA Version指的就是這個驅動版本之下對應的CUDA版本
這個版本的資訊在之後安裝nvcc的時候非常重要
安裝nvcc
接下來就是要安裝nvcc了,這邊我以10.2版本為舉例進行安裝
首先進入cuda toolkit官網中下載cuda10.2版本的頁面
我選擇使用deb(local)的方式來安裝
接下來只要照著官方的安裝指令就可以安裝了
要注意在最後一行sudo apt-get -y install cuda中
最後的cuda要改成cuda-10–2,若尾巴沒有加10–2的話cuda nvcc在安裝過程中發現可以update你的版本就會自動更新,但這顯然不是我要的
所以在最後輸入你要的版本來取消自動升級
若在輸入sudo apt-get -y install cuda後出現類似以下錯誤訊息
E:Error, pkgProblemResolver::Resolve generated breaks,this may be caused by held packages
上圖只是示意圖,如果碰到了類似這種錯誤訊息,就代表你安裝的Cuda nvcc版本有一些相依的套件沒有安裝
以上圖為例,錯誤訊息的重點為
cuda-runtime-10–1和cuda-drivers(>=418.39)
代表你安裝的cuda nvcc 版本需要cuda version10.1和大於等於418.39版本的nvidia驅動,這兩個資訊都可以在terminal輸入nvidia-smi來查看,若版本不夠新,就照上面重新安裝nvidia driver的步驟把你顯示卡的驅動版本往上升級就可以了。
新增環境變數
安裝成功後,最後一個步驟就是開啟家目錄中的./bashrc檔案
加入下列四句後存檔關閉
export PATH=/usr/local/cuda/bin:$PATH
export CPATH=/usr/local/cuda/include:$CPATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=/usr/local/cuda/lib:$DYLD_LIBRARY_PATH
若需要使用不同的cuda版本,只需要改變在上述路徑中的cuda,改成你已經裝好的版本資料夾名稱就行
開啟新的terminal輸入
nvcc -V
若成功顯示出你要的版本就是安裝成功了
總結
其實安裝到這邊可以知道,nvcc和Cuda是兩個不一樣的東西
但是nvidia在你安裝nvcc的時候卻一直會有Cuda的字眼出現,很容易會讓人誤導裝nvcc就是在裝Cuda。
為了方便弄清楚兩者的關係,其實可以把Cuda當成是一種語言,這種語言只有在GPU上可以被執行,所以它才會被包含在nvidia的驅動程式裡面,當然程式語言也有新舊之分,cuda version越高的顯示卡當然就可以認得較新的語法,而較新的語法就有可能無法在你的舊顯示卡上運行。
而nvcc就被當成是Cuda的編譯器,例如你用pytorch寫的一些神經網路架構,就可以經由nvcc編譯成Cuda語言放入GPU中進行加速運算,當然如果你的顯示卡版本較舊,可以裝到的Cuda version就不高,也就意味著比較新的語法你看不懂,這時候你nvcc的版本也就不能裝得太高了,避免編譯出你的硬體看不懂的語法。
由此可知nvcc和Cuda之間具有高度的相關性,但是在安裝的時候卻又是不一樣的個體,導致常常有人在安裝的時候就被搞得昏頭轉向,希望這篇文章可以幫助到正苦於安裝Cuda的人,當然我的想法也可能不完全正確,這只是我安裝過程中整理出的想法