1. 程式人生 > >Ubuntu14.04安裝CUDA8.0折騰之路

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或者更低版本。
等待後續更新記錄吧。