[Linux] 在Ubuntu 18.04 上安裝CUDA、CuDNN - Clay ...

文章推薦指數: 80 %
投票人數:10人

今天我將在Ubuntu 18.04 的系統上安裝GPU 的驅動程式,為了能夠進行機器學習,故也安裝了CUDA 以及CuDNN 的環境配置。

在安裝的過程中,也順手將這些 ... [Linux]在Ubuntu18.04上安裝CUDA、CuDNN Clay2019-11-022021-05-12Keras,Linux,MachineLearning,Python,Tensorflow 如果今天我們的電腦上有好的GPU,那麼,我們通常都很希望這可以拿來進行深度學習。

基本上安裝相關的環境並不複雜,通常第一次嘗試也只需要幾個小時就可以上手。

主要的步驟只有4個,分別是以下數項: 將gcc版本為7.x,我們需要重新安裝gcc6.x版下載安裝GPU的驅動(Driver)下載安裝CUDA(推薦版本為10.0)下載安裝CuDNN 也許中途會再遇到各式這樣的問題也說不定,畢竟每個人安裝時的環境、套件都有所不同。

至少我的話,這一年來重灌系統的次數已經快要逼近十次了。

當然,是不同的電腦啦,並不是我每次都搞爆我自己的電腦XD 然而,就連自認重灌許多次、有問題就Google一定可以穩穩地找到解答的我——昨天都在重灌系統時遇到GNUGRUBversion2.02的問題——然後查了查網路,並沒有找到有效的解決手段,最後拔掉了疑似有問題的硬碟,這才終於重灌成功。

話題扯遠了。

那麼以下,我就開始闡述我的安裝方法吧!如有我的心得沒有紀錄到的部份,一定要仔細確認發生了什麼報錯、並且查詢網路上是否有人提供解決方法哦! 安裝gcc 之所以建議安裝gcc6.x的版本,而非Ubuntu18.04默認的gcc7.x,是因為之後在編譯一些CUDA的套件時gcc6.x比較順利,我便曾經遇過gcc7.x報錯的問題。

gcc6.x的安裝我是參考這裡:https://gist.github.com/zuyu/7d5682a5c75282c596449758d21db5ed 這個安裝步驟幾乎是我看過最簡便的: sudoapt-getupdate&&\ sudoapt-getinstallbuild-essentialsoftware-properties-common-y&&\ sudoadd-apt-repositoryppa:ubuntu-toolchain-r/test-y&&\ sudoapt-getupdate&&\ sudoapt-getinstallgcc-6g++-6-y&&\ sudoupdate-alternatives--install/usr/bin/gccgcc/usr/bin/gcc-660--slave/usr/bin/g++g++/usr/bin/g++-6&&\ gcc-v 直接複製貼上即可,只要Output為6.x,那便大功告成了。

下載安裝GPU驅動程式 現在大部份要使用的GPU都是Nvidia的,你可以直接到他們官方的驅動程式下載處選擇自己需要的版本:https://www.nvidia.com.tw/Download/index.aspx?lang=tw 選好自己所需要的版本後便開始下載。

例如我的話,現在我電腦上裝著2080Ti的GPU,並且我是64位元的Ubuntu,所以我的選擇如上圖。

你也要選擇適合自己的版本。

下載好後,直接來到下載資料夾,使用以下指令安裝: sudoshNVIDIA-Linux-x86_64-430.50.run 這時候,應該會出現"Thedistribution-providedpre-installscriptfailed!Areyousureyouwanttocontinue?"這樣的問題。

我記得我第一次裝驅動程式的時候就遇過這樣的問題、然後接下來每一次裝基本上遇到這個問題。

我不太確定這到底是怎麼回事,不過曾經看過英文論壇上的一個討論說『這是Nvidia的工程師跟大家開的一個玩笑!測驗你安裝的決心!』 哇靠,有夠鬼扯的哈哈哈哈(我只是想表達我的驚嘆,那名這樣說的網友很有可能說對了哈哈哈),不過我每次都直接選擇Continueinstall,目前也沒有遇過什麼樣的問題。

持續安裝,一路ok繼續,等到Kernel裝完,這時候我們需要重新啟動,來讓新的驅動正常運作。

sudoreboot 打開後,現在應該可以用: nvidia-smi 這個指令來查看GPU了。

下載CUDA10.0 推薦10.0其實是我的私心,因為我現在跑什麼幾乎都是CUDA10.0比較穩。

當然,你可以任意挑你想要的版本。

https://developer.nvidia.com/cuda-10.0-download-archive 你可以從這裡選擇你要的版本下載。

下載好了之後來到下載的資料夾,使用: sudoshcuda_10.0.130_410.48_linux.run 開始進行安裝。

安裝過程中,因為剛才已經事先安裝過GPU的驅動,所以在這邊,我們便不要再安裝GPU的驅動了。

(當然,如果不小心一路同意下去也沒關係,至少CUDA自動幫忙裝的驅動沒道理無法運行。

) 那麼接下來,就來安裝CuDNN吧! CuDNN下載安裝 下載CuDNN比較麻煩,需要有它們的會員。

這裡建議還是加入一下,像是我,就下載了CuDNN好幾次。

https://developer.nvidia.com/rdp/form/cudnn-download-survey 這裡選擇自己的作業系統、然後挑選適用於CUDA10.0的版本(如果你前面真的跟我一樣裝CUDA10.0的話)。

然後同樣,點擊了下載。

下載好了之後,如果是.deb檔,我們來到下載資料夾後,需要用以下指令安裝。

sudodpkg-ilibcudnn7_7.6.4.38+cuda10.0_amd64.deb 安裝好之後重開機一下,這時候多半就已經可以正常訓練模型了。

測試 不知道能不能訓練模型怎麼能安心呢?這裡給大家一段簡單的SampleCode來測試是否有用到GPU。

首先,我們可能需要安裝四個套件: sudopip3installtensorflow-gpu sudopip3installkeras sudopip3installmatplotlib sudopip3installpandas 安裝好之後,應該可以執行底下的程式碼: #coding:utf-8 importos fromkeras.modelsimportSequential,load_model fromkeras.layersimportDense,Dropout,Flatten,Conv2D,MaxPool2D fromkeras.utilsimportnp_utils,plot_model fromkeras.datasetsimportmnist importmatplotlib.pyplotasplt importpandasaspd #MnistDataset (X_train,Y_train),(X_test,Y_test)=mnist.load_data() x_train=X_train.reshape(60000,1,28,28)/255 x_test=X_test.reshape(10000,1,28,28)/255 y_train=np_utils.to_categorical(Y_train) y_test=np_utils.to_categorical(Y_test) #ModelStructure model=Sequential() model.add(Conv2D(filters=32,kernel_size=3,input_shape=(1,28,28),activation='relu',padding='same')) model.add(MaxPool2D(pool_size=2,data_format='channels_first')) model.add(Flatten()) model.add(Dense(256,activation='relu')) model.add(Dense(10,activation='softmax')) print(model.summary()) #Train model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy']) model.fit(x_train,y_train,epochs=10,batch_size=64,verbose=1) #Test loss,accuracy=model.evaluate(x_test,y_test) print('Test:') print('Loss:%s\nAccuracy:%s'%(loss,accuracy)) #Savemodel model.save('./CNN_Mnist.h5') #LoadModel model=load_model('./CNN_Mnist.h5') #Display defplot_img(n): plt.imshow(X_test[n],cmap='gray') plt.show() defall_img_predict(model): print(model.summary()) loss,accuracy=model.evaluate(x_test,y_test) print('Loss:',loss) print('Accuracy:',accuracy) predict=model.predict_classes(x_test) print(pd.crosstab(Y_test.reshape(-1),predict,rownames=['Label'],colnames=['predict'])) defone_img_predict(model,n): predict=model.predict_classes(x_test) print('Prediction:',predict[n]) print('Answer:',Y_test[n]) plot_img(n) #coding:utf-8 importos fromkeras.modelsimportSequential,load_model fromkeras.layersimportDense,Dropout,Flatten,Conv2D,MaxPool2D fromkeras.utilsimportnp_utils,plot_model fromkeras.datasetsimportmnist importmatplotlib.pyplotasplt importpandasaspd #MnistDataset (X_train,Y_train),(X_test,Y_test)=mnist.load_data() x_train=X_train.reshape(60000,1,28,28)/255 x_test=X_test.reshape(10000,1,28,28)/255 y_train=np_utils.to_categorical(Y_train) y_test=np_utils.to_categorical(Y_test) #ModelStructure model=Sequential() model.add(Conv2D(filters=32,kernel_size=3,input_shape=(1,28,28),activation='relu',padding='same')) model.add(MaxPool2D(pool_size=2,data_format='channels_first')) model.add(Flatten()) model.add(Dense(256,activation='relu')) model.add(Dense(10,activation='softmax')) print(model.summary()) #Train model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy']) model.fit(x_train,y_train,epochs=10,batch_size=64,verbose=1) #Test loss,accuracy=model.evaluate(x_test,y_test) print('Test:') print('Loss:%s\nAccuracy:%s'%(loss,accuracy)) #Savemodel model.save('./CNN_Mnist.h5') #LoadModel model=load_model('./CNN_Mnist.h5') #Display defplot_img(n): plt.imshow(X_test[n],cmap='gray') plt.show() defall_img_predict(model): print(model.summary()) loss,accuracy=model.evaluate(x_test,y_test) print('Loss:',loss) print('Accuracy:',accuracy) predict=model.predict_classes(x_test) print(pd.crosstab(Y_test.reshape(-1),predict,rownames=['Label'],colnames=['predict'])) defone_img_predict(model,n): predict=model.predict_classes(x_test) print('Prediction:',predict[n]) print('Answer:',Y_test[n]) plot_img(n) COPY 記得另外開一個Terminal來查看是否有吃到GPU: watch-n1nvidia-smi 這個功能會每一秒刷新nvidia-smi的界面,基本上,上面的MNIST小程式大概吃約3%-10%左右的GPU而已。

希望大家都能順利安裝! 分享此文:分享到Twitter(在新視窗中開啟)按一下以分享至Facebook(在新視窗中開啟)分享到LinkedIn(在新視窗中開啟)分享到Reddit(在新視窗中開啟) 相關 Tags:KerasLinuxMachineLearningPythonTensorflow LeaveaReply 取消回覆 Language 中文(台灣) English Search Searchfor... CategoriesCategories 選取分類 AndroidStudio  (5) Apple  (39)    AppleScript  (6)    iPad  (3)    MacOS  (36) C/C++  (105)    C  (10)    C++  (96) C#  (1) Computer  (4) CSS  (3) Dart  (3) Database  (9)    MySQL  (6)    SQLite  (2) Excel  (1) Flutter  (44)    IntellijIDEA  (2) Game  (21)    NS  (6)    PS4  (13)    PS5  (2) Git  (10)    Github  (9) GoogleSheets  (1) HTML  (10) Java  (1) JavaScript  (9) Kotlin  (3) LeetCdoe  (79) Linux  (133) MachineLearning  (80)    Keras  (7)    PyTorch  (51)    Scikit-Learn  (7)    Tensorflow  (3) Movie  (1) News  (4) NLP  (27) Novel  (9) Others  (6) PHP  (14) Python  (342)    Flask  (4)    Others  (4)    Packages  (55)    PyCharm  (11)    Pygame  (5)    PyQt5  (35)    PySide6  (4)    PythonTutorial  (17) Ruby  (1) Tools  (16) Unity  (26) VisualStudio  (2) VisualStudioCode  (2) Windows  (12) Word  (5) WordPress  (57) 圍棋  (3) 未分類  (6) 漫畫  (2) 資料結構  (4) 隨筆  (2) Archives Archives 選取月份 2022年3月 (15) 2022年2月 (17) 2022年1月 (28) 2021年12月 (21) 2021年11月 (14) 2021年10月 (20) 2021年9月 (11) 2021年8月 (20) 2021年7月 (24) 2021年6月 (24) 2021年5月 (32) 2021年4月 (26) 2021年3月 (31) 2021年2月 (14) 2021年1月 (18) 2020年12月 (17) 2020年11月 (25) 2020年10月 (24) 2020年9月 (21) 2020年8月 (17) 2020年7月 (21) 2020年6月 (19) 2020年5月 (28) 2020年4月 (31) 2020年3月 (24) 2020年2月 (25) 2020年1月 (32) 2019年12月 (39) 2019年11月 (53) 2019年10月 (34) 2019年9月 (15) 2019年8月 (18) 2019年7月 (15) 系列文章 隨筆散記 機器學習筆記 Python筆記 TAGSAndroidStudio(5) Apple(29) AppleScript(6) C#(1) C++(96) Comic(2) CSS(3) C語言(10) Dart(3) Database(9) Docker(2) Excel(1) Flask(4) Flutter(43) Game(18) Git(6) Github(9) GoogleSheets(1) HTML(10) IntellijIDEA(2) iPad(3) Java(1) JavaScript(10) Keras(7) Kotlin(3) LeetCode(79) Linux(132) MachineLearning(76) MacOS(36) Microsoft(6) Movie(1) MySQL(6) News(4) NLP(28) Novel(9) NS(6) Others(8) PHP(14) PS4(13) PS5(2) PyCharm(11) PyQt5(34) PySide6(3) Python(331) PythonPackages(53) PythonTutorial(14) PyTorch(51) Qt(1) Ruby(1) RuneFactory4(2) Scikit-Learn(7) SQLite(2) Tensorflow(3) Tools(16) Unity(25) VIM(7) VisualStudio(2) VisualStudioCode(2) Windows(9) Word(5) WordPress(56) 圍棋(3) 資料結構(4) 軌跡(4) 隨筆(1) 電腦(4) RecentPosts LeetCode:763-PartitionLabels解題紀錄 LeetCode:1007-MinimumDominoRotationsForEqualRow解題紀錄 LeetCode:895-MaximumFrequencyStack解題紀錄 LeetCode:316-RemoveDuplicateLetters解題紀錄 LeetCode:856-ScoreofParentheses解題紀錄 Calender 2019年11月 一 二 三 四 五 六 日  123 45678910 11121314151617 18192021222324 252627282930   «10月   12月» SubscriptionName*Email* SocialMedia Follow@clayatlas2022 ClicktoCopy



請為這篇文章評分?