Ubuntu14.04安裝CUDA8.0折騰之路

新購置了Dell的Tower7810服務器,出廠預裝了Ubunutu14.04,並且已經安裝好了NVIDIA的專有顯卡驅動,版本是361。
考慮給機器配置上CUDA的運行環境,以加速數據處理的速度,最大化的利用機器的性能。於是開始了幾天的折騰。。。
這個真是不容易,還是記錄一下,畢竟網上的文章不能全盤參考,還是要搞清楚關係,我幾天的痛苦經歷就是證明。
以此作爲自己下一步配置機器的參考。

  • 第一次失敗
    草草看了一下NVIDIA官方的安裝指南,滿懷信心的嘗試,結果是無限登錄循環。。。
    步驟大致如下:

    • 添加了nouveau的blacklist。
      /etc/modprobe.d中創建文件blacklist-nouveau.conf,在文件中輸入一下內容
    blacklist nouveau
    options nouveau modeset=0

    打開終端,運行$ sudo update-initramfs –u

    • 重啓,然後使用ctrl+alt+F1進入字符模式,安裝顯卡驅動,提示X-server還在運行,搜索後,輸入命令sudo service lightdm stop,可以繼續安裝顯示驅動。提示編譯內核,選擇生成新的內核簽名,加入內核,安裝32位兼容庫等等步驟之後,提示安裝成功。
    • 緊接着,安裝CUDA8,選擇了安裝驅動,y;安裝OpenGL庫,y;安裝CUDA ToolKit,y;使用nvidia-xconfig,y;其餘都是默認。
    • 提示安裝成功,但是缺失一些庫libXi.so,libXmu.so之類的,記不清了。
    • 開心的重啓電腦,好吧,無限登錄循環出現。。。
    • 百度之,告知說因爲用戶目錄下的.Xauthority文件的權限可能出錯,需要修改權限爲當前用戶所有,sudo chown user:user ~/.Xauthority。然並卵。刪除該文件也沒用。
    • 此時,惡向膽邊生,想着我已經創建了Dell的恢復光盤,我恢復一下系統好了。
    • 選擇了覆蓋系統,但保留用戶的數據的恢復選項。然而,現實很殘酷,用戶數據並沒有保留下來。。。細想之,大約是當初Dell在預裝的時候,根本沒有給/home創建單獨的分區。數據沒有了,前面剛剛安裝好的數十個大大小小的軟件包啊。。。ಥ_ಥ
  • 第二次失敗
    面對乾淨的Ubuntu14.04系統,第二次嘗試開始。看了不少網友的經驗,說是不應該安裝OpenGL庫。好吧,按照第一次的流程來,只是在安裝CUDA的時候,特意選擇不安裝OpenGL。
    結果仍然是無限登錄循環。。。我。。。(略)
  • 第三次失敗
    回想自己去年曾經在自己的Dell筆記本上成功的安裝了CUDA,好像沒有這種事情啊。爲毛??
    首先想到的是,也許Ubuntu系統不好,好吧,我換,換成曾經成功過的CentOS,反正FSL也喜歡這個系統。下載CentOS7.3,製作啓動盤,全盤刪除後,全新安裝CentOS7。
    因爲着急,安裝時大意了,沒有修改軟件包選擇,結果很快裝好,重啓,嗯??字符界面??神馬情況?startx,哦,不行。。。
    好吧,搜索後想起來,默認是最小安裝模式,不帶圖形界面,我去。。。
    重來。這次一狠心選了開發模式,順手加了很多額外看起來會用到的軟件包。嗯,2300多個軟件要裝。耐心等待安裝完成,想着這次應該是有把握的。重啓之後,進入到CentOS7配置CUDA8的流程。
    謹慎的按照某CSDN網友教程來
    • kernel開發環境(編譯cuda需要), sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
    • gcc, g++, sudo yum install gcc gcc-g++
    • 檢查nouveau驅動是否加載,lsmod | grep nouveau
    • 發現有,按照NV官網的教程,添加blacklist(和第一次Ubuntu的一樣)
    • 在終端窗口,輸入sudo init 3,進入字符界面,安裝專門下載的NVIDIA顯卡驅動,最新的版本。
    • 繼續安裝CUDA8,繼續採用全部yes的選擇。
    • 重啓,進不了圖形界面。。。(準確的描述是,在快要出現登錄界面的時候,一閃進入字符模式,顯示的是啓動過程,大概到gnome display這個地方,卡死不動了。此時可以通過ctrl+alt+F2進入新的命令行界面登錄)
    • 排查問題:
      • lsmod | grep nouveau 一直有輸出,說明沒有能夠禁用掉開源的nouveau驅動。官方手冊的方法完全不湊效。網友們說法不一,有的說安裝NV驅動的時候,會自動檢測nouveau有沒有被禁用,如果有,會貼心的幫忙禁用掉,試了下,發現確實在/etc/modprob.d/ 下面生成了nvidia-installer-no-nouveau.conf(大概是叫這個名字),裏面的內容也是和官方的一致。然而,似乎CentOS就是不買這個帳。有的說,應該建立的禁用文件是dist-blacklist.conf,這個沒有試過,總覺得不應該。
      • CentOS7的嘗試導致了3次系統重裝,反覆試,包括不安裝驅動,直接安裝CUDA,因爲CUDA就包含了顯示驅動,也不行,因爲在安裝時提示,找不到kernel source

        Installing the NVIDIA display driver...
        The driver installation is unable to locate the kernel source. Please make sure that the kernel source packages are installed and set up correctly.
        If you know that the kernel source packages are installed and set up correctly, you may pass the location of the kernel source with the '--kernel-source-path' flag.

        ,然而我已經把kernel-devel之類的都裝了。據說是要這樣安裝sudo yum install epel-release
        sudo yum install --enablerepo=epel dkms不過我並沒有嘗試;包括安裝驅動,但是CUDA時不安裝驅動;包括不安裝驅動,CUDA時安裝驅動,但不安裝OpenGL,也不行;還包括單獨安裝顯卡驅動,先不進行CUDA的安裝,重啓,依然如故。
      • 沒轍了。。。
  • 第四次失敗
    考慮CentOS 7和CentOS 6據說變化很大,想起原先在雙顯卡筆記本上成功的案例是CentOS 6.8配合CUDA6.5,於是決定照搬老版本試試。
    • 安裝CentOS 6.8,發現啓動U盤時,EFI模式不認。這個奇怪了,明明看鏡像裏面有EFI的目錄啊,官方也說支持EFI啓動。鬱悶了。
    • 不研究這個,不管啥方式啓動,反正得裝上啊。於是全盤全新安裝系統(先進BIOS禁用了secure boot,然後才能打開Legacy方式啓動選項)
    • 安裝成功,重啓。嗯???what the F??機器提示找不到可引導的操作系統。重試安裝一次,還是不行。我徹底暈了。。。
  • 第五次失敗
    到這個時候,真的內心是崩潰的。強迫讓自己冷靜下來,仔細想清楚原因再說。
    反覆折騰的結果要麼是Ubuntu出現循環登錄,要麼是CentOS7進不去圖形界面。在stackoverflow上有個回答說是對於CentOS的情況,這說明gdm掛掉了,說是可以yum安裝一個lightdm,然後進入圖形界面重新搞一下gdm,然後卸載lightdm,但是這個我沒法使用,因爲網絡需要經過iNode客戶端的認證才能連接互聯網,而iNode好像需要圖形界面才能用啊。
    繼續仔細的翻看官方的那個詳細的指導手冊,裏面說到關於那個OpenGL的庫,如果系統的顯示不是用了NVIDIA的顯卡(比如對於雙顯卡的案例,Intel集成顯卡用於顯示,NVIDIA獨立顯卡用於運算),安裝CUDA的時候是不應該安裝OpenGL的,否則會覆蓋集顯的opengl庫,造成圖形界面失敗。
    好吧,這個是個重要的知識點,但是並沒有解決我的問題,因爲我的服務器沒有集顯。
    仔細想想,出現問題的最大可能還是在顯卡驅動上,對於CentOS,系統沒有NVIDIA的驅動,所以,不管我安裝的是獨立的驅動,還是CUDA裏面的顯示驅動,而是兩個都裝上,都因爲沒有真正的禁用掉nouveau而導致重啓卡死。
    同時,想明白一個事情,顯卡的驅動和CUDA工具包實際上應該是獨立的,如果NV顯卡驅動本身已經能夠正常工作的話,理論上只要CUDA版本能夠支持顯卡驅動的版本,那麼根本不用那麼麻煩,只需要直接安裝CUDA開發包就行,不用驅動,也不用OpenGL。
    如此說來,已經預裝好NVIDIA顯卡驅動的Ubuntu纔是最容易成功的,想到這裏,再次拿起Dell恢復盤,恢復了預裝的系統。
    • 不用禁用nouveau了,因爲系統本身就已經不使用nouveau了,而是使用NVIDIA的驅動。這一點,通過lsmod | grep nouveau 可以驗證,沒有任何輸出。
    • ctrl+alt+F1進入字符模式,停用lightdm,這樣x-server就關掉了。sudo service lightdm stop
    • 修改cuda.run文件的權限,使其可執行。sudo chmod a+x ~/Desktop/cuda_xxx_linux.run
    • 安裝CUDA,注意不安裝Driver(也就不會出現opengl的詢問了)sudo ~/Desktop/cuda_xxx_linux.run
    • 可能會提示安裝成功,但是缺少一些需要的庫。先不管它
    • 重新啓動lightdm,會自動跳轉到圖形化的登錄界面。sudo service lightdm start
    • 祈禱,並輸入密碼登錄。如果這一步沒有循環登錄,那麼重啓也不會循環登錄。這一次,順利的登錄進了系統。撒花,大把的撒花
    • 驗證CUDA安裝的是否正常。這裏先配置/etc/profile文件或者~/.bashrc文件,在其中一個文件的最後,按照官方手冊,添加兩行環境變量的聲明。然後,source一下修改後的文件,讓其生效。接下來,檢查ls /dev/nvidia*,這一步應當有輸出。
    • nvcc -V,應當輸出CUDA的一些版本信息
    • 進入NVIDIA_CUDA-8.0_samples\1_Utitily\deviceQuery目錄,運行make。嗯?居然報錯了,提示說:g++:No such file or directory. 首先懷疑是LD_LIBRARY_PATH沒有設置好,是不是除了cuda的lib還要加入系統的lib?不管,先加上/usr/lib:/usr/local/lib這些路徑再說。
    • make還是不行,難道g++沒有安裝?gcc已經是最新版本了啊。試試,sudo apt-get install g++這一步和CentOS叫法不同。
    • 這次可以成功的make了。那麼進入NVIDIA_CUDA-8.0_samples\bin\linux\x86_64\release\,運行./deviceQuery,輸出的信息提示FAIL,原因是insufficient accelerate driver.也就是說,CUDA8不能正確的識別到Dell預裝的那個版本的NV顯卡驅動。(此時,Dell預裝的驅動版本是361,CUDA版本是375.26),難道361的顯卡驅動版本太低?
    • 既然如此,我想到,趁着目前還是NV驅動發揮作用,我直接卸載預裝的NV驅動,然後重新安裝CUDA中的驅動不就好了麼?
    • 卸載原有驅動sudo apt-get remove --purge nvidia*
    • ctrl+alt+F1進入字符界面,關掉lightdm,運行cuda的run文件,這次只選擇driver和OpenGL,其它都不要。再打開lightdm,登錄,好,順利進入桌面。
    • 再次運行./deviceQuery,這回終於出現了正確的信息。激動啊,終於成功了。。。???
    • 纔不是!!!!還沒有重啓呢。
    • 重啓之後,祈禱登錄界面不要無限循環,祈禱,祈禱。。。嗯?我靠怎麼還不出來登錄界面?怎麼一直黑屏沒反應?我靠,按下ctrl+alt+F1都沒反應啊。這是什麼情況?我強制再次重啓,依然如故。。。
  • 第六次,成功了一半
    沒辦法,再次恢復系統到預裝狀態。這次,吸取教訓,應該是剛纔卸載完NVIDIA驅動之後,要先重啓一下,然後再按照流程來,不能省步驟。
    • 先安裝好g++
    • 卸載顯示驅動,重啓
    • 黑屏!再重啓,黑屏!!
    • 再次重啓時, 嘗試直接進字符界面。然而一旦黑屏之後系統沒有反應,啓動的時候也沒有操作系統選擇的界面讓我選擇單用戶恢復模式。也就不可能通過網上說的修改grub配置,或者修改initab的配置來做。
    • 再次重啓,嘗試不斷的按下ESC鍵,居然出現了grub的加載選擇界面。太好了,選擇advanced選項,選擇recovery選項,再選擇resume選項,然後系統就出現了登錄界面。
    • 進入桌面後,想着,黑屏的原因可能是啓動加載的內核沒有顯卡驅動了,而內核也沒有重新回到含有nouveau驅動的狀態。但是recovery模式的可能是含有nouveau驅動的。運行lsmod | grep nouveau,果然看到了很多輸出。
    • 那麼現在就要先屏蔽nouveau了。按照最上面的方法建立black-list.conf。
    • 運行sudo update-initramfs –u,重新形成不含有nouveau驅動的initram。
    • lsmod | grep nouveau 現在沒有輸出了。那麼重啓。
    • 然後按照ctrl+alt+F1的方式,停止lightdm,安裝cuda,驅動和toolkit都裝上。中間會有個問是否需要自動運行nvidia-xconfig來配置xconfig文件以讓系統使用驅動。記不清了是選擇yes還是no了。
    • 然後再次啓動lightdm,登錄,沒有無限循環。重啓,沒有黑屏。
    • 登錄進入桌面,檢查lsmod | grep nouveau,沒有了。檢查lsmod | grep nv,有。
    • 檢查nvcc,檢查cat /proc/driver/nvidia/version應該能看到驅動版本。
    • 然後編譯一個samples試試。沒有問題。運行deviceQuery和bandwidthTest這兩個編譯出來的工具。應該可以看到詳細的顯卡設備信息和帶寬情況,這個也沒問題。
    • 終於好了!!!!

不過折騰之路還沒有結束,因爲似乎FSL的GPU加速還沒有支持到CUDA8.0??不過我看到moisess分享的bedpostx似乎有8.0版本的啊,這個要等到後續再測試了。如果不行的話,那麼,顯然我需要重新來一遍,安裝CUDA7.5或者更低版本。
等待後續更新記錄吧。

參考鏈接:
【run file方式】http://blog.csdn.net/masa_fish/article/details/51882183
【deb網絡安裝方式】http://blog.csdn.net/baiyu9821179/article/details/57412131

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章