ubuntu16.04安裝CUDA 8.0(很詳盡,包括一些坑的解決方法)


每次配置環境都頭疼得要死,總是會遇到各種各樣的問題,這次決心一勞永逸地解決這個問題,踩最多的坑,裝最穩的環境。

先介紹用於測試的電腦:操作系統是在清華鏡像上下載的ubuntu16.04LTS,內核版本是4.15.0-29-generic,電腦是聯想Y430P,顯卡我沒記錯的話是GTX850M,gcc版本是5.4.1。

本篇絕大部分操作需要管理員權限,即sudo,也許不把cuda安裝到/usr/lib而是自己的home目錄下可以不用sudo權限,但我沒有嘗試,有興趣的可以自己嘗試一下。

一、更換內核

CUDA8.0最高僅支持4.4版本內核,因此第一步工作就是更換系統內核。如你的內核不高於4.4,可以跳過整個該步驟。

先介紹兩個命令,一個是sudo dpkg --get-selections|grep linux-image,該命令會檢查apt下載的所有linux-image開頭的包,也就是內核;另外一個命令是uname -r,該命令返回結果是當前系統所用內核版本。

在我自己的電腦上,命令行敲入sudo dpkg --get-selections|grep linux-image並執行,返回了四個結果,分別為:

linux-image-4.15.0-29-generic

linux-image-4.4.0-148-generic

linux-image-generic

linux-image-generic-hwe-16.04

執行uname -r返回的結果是linux-image-4.15.0-29-generic,說明我當前使用的內核版本是第一個。

關於內核操作的詳細解釋,請參考附錄1,為保證正文簡潔,只記錄如何更換內核。

首先用grep menuentry /boot/grub/grub.cfg命令查看有哪些內核,如沒有需要的內核可以用apt-get下載(這個我沒有嘗試,因為系統自帶了一個4.4)。我執行這個命令后顯式如下圖。

 

我想要將linux-image-4.15.0-29-generic修改為linux-image-4.4.0-148-generic,執行sudo vim /etc/default/grub,打開grub設置文件,將GRUB_DEFAULT=0改為GRUB_DEFAULT='Advanced options for Ubuntu>Ubuntu, with Linux 4.4.0-148-generic'。隨后執行sudo update-grub,如無錯誤提示,即意味着/boot/grub/grub.cfg修改成功,然后sudo reboot重啟電腦。注意,重啟電腦后,本來光標默認位置應該在Ubuntu,現在光標位置默認在Ubuntu的下一行,即Advanced options for Ubuntu,直接回車進入,下一個界面光標的默認位置應該在Ubuntu, with Linux 4.4.0-148-generic,直接回車即可。進入界面,uname -r檢查顯示更改內核成功。

這里我本來是希望可以直接登入Ubuntu即是更改后的內核,但嘗試了很多方法,最終都必須通過Advanced options for Ubuntu修改加載內核,如果有高手搞定了,還請不吝賜教。

此外,如果你是強迫症患者,但又不知道如何處理這種情況,可以選擇將Kernel 4.15直接刪掉,但我個人認為這個方法不夠優雅,因此不列出了。

二、禁用nouveau

簡單介紹一下nouveau,簡單來說它和nvidia系列有沖突,不禁用的話可能會導致黑屏或循環登陸,因此一定要禁掉。

這里提供一個不太一樣的禁用方法,這種方法不需要重啟電腦。

分為四部:1.首先ctrl+alt+f1切換到命令行界面,輸入賬號密碼登錄;2.然后sudo service lightdm stop關閉圖形界面;3.sudo modprobe -r nouveau將nouveau徹底干掉;4.執行lsmod | grep nouveau返回空說明nouveau已經清理干凈。

modeprobe是內核模塊管理一個很好用的工具,這里不做具體介紹了,詳情請參考鳥哥的linux私房菜19章。

三、安裝CUDA

終於到了安裝CUDA的步驟了,在禁用nouveau后,不要急着啟用lightdm,轉到cuda安裝文件所在目錄,用sudo命令進行安裝,我的cuda安裝文件名為cuda_8.0.61_375.26_linux.run,記得要禁用opengl,所以我的命令就是sudo ./cuda_8.0.61_375.26_linux.run --no-opengl-lib,禁用opengl據說是為了防止和系統原有的opengl沖突。其余默認安裝即可。

四、測試CUDA是否安裝成功

轉到sample保存目錄,像我在安裝過程中用的默認保存位置,因此它們在我的~/NVIDIA_CUDA-8.0_Samples/目錄下,在這個目錄下,進入./1_Utilities/deviceQuery/,在這個目錄下make然后執行./deviceQuery。如果出現如下畫面說明CUDA安裝成功。

 

 

五、其他坑

說點其他比較零碎的坑。

1.首當其沖就是安裝CUDA結束時,安裝程序提醒一切就緒,但是測試不通過,nvidia-smi也無法執行,但是nvcc -V顯示結果無誤。

這個問題的解決方法是我誤打誤撞試出來的,具體為什么我也不清楚,搜了很久也沒找到答案。解決方法是這樣的,用sudo apt-get install nvidia-375安裝顯卡驅動,然后重啟兩遍(對的,重啟一遍沒用,絕望之下我又重啟了一遍),一切問題消失,出現了測試結果中的截圖,nvidia-smi也能正確工作了。

2.用blacklist方式禁用nouveau的時候,禁用掉的是4.15核的nouveau,禁不掉4.4核的,所以我一怒之下,直接把nouveau干掉了,問題解決。

至此CUDA已經順利安裝,后續會嘗試在另一台電腦上安裝CUDA,並在這個帖子更新安裝結果。此外還會在下一篇文章嘗試不用sudo安裝caffe的其他依賴。

 

附錄1:內核操作的詳細解釋(由鳥哥的linux私房菜(基礎篇)19章部分內容總結)

先簡單介紹一下系統啟動流程:1.加載BIOS的硬件信息並進行自我檢查,並根據設置讀取第一個可啟動的設備;2.讀取並執行第一個啟動設備內MBR的啟動引導程序(linux的啟動引導程序一般為grub或grub2);3.根據啟動引導程序的設置加載Kernel,Kernel會開始檢測硬件並加載驅動程序;4.余下部分主要是systemd部分,暫且不提。其中啟動引導程序又被稱為boot loader,主要提供三個功能:1.提供選項,是多重引導的重要功能;2.加載內核文件;3.轉交其他loader,是實現linux和win雙系統的重要功能。

借由boot loader讀取內核文件,內核開始從BIOS手中接管硬件,一般來說內核文件保存在/boot目錄下,以vmlinuz開頭,比如我的內核文件絕對路徑為/boot/vmlinuz-4.15.0-29-generic。除kernel以外,boot loader還會讀取initrd(虛擬文件系統),這里暫不表。

boot loader分為兩個階段:1.執行boot loader主程序,沒有安裝loader的相關配置文件;2.主程序加載配置文件,一般都在/boot/grub/(或/boot/grub2/,我的系統是/boot/grub/目錄)目錄下。其中最重要的就是配置文件grub.cfg。官方不建議手動修改grub.cfg文件,而是通過grub-mkconfig(grub2-mkconfig)命令產生新的grub.cfg文件。配置文件的內容簡介詳情見鳥哥的linux私房菜(基礎篇)19章。

 

參考文獻:

https://www.linkedin.com/pulse/installing-nvidia-cuda-80-ubuntu-1604-linux-gpu-new-victor 這篇文章介紹了很多安裝CUDA中常見的坑,囿於自身水平,其中部分方法在我這里是失效的,但我不知道原因。

https://blog.csdn.net/yhaolpz/article/details/71375762 這是一篇特別詳盡的介紹安裝caffe的博客

鳥哥的linux私房菜


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM