【20.6.26更新】
注:本篇博客顯卡驅動部分對新顯卡(2080ti)已不適用,請參考以下博客:
此外,cuda和cudnn建議直接用conda安裝,無需再進行配置
0. 前言
坑爹的Ubuntu晚上運行還是好好的,第二天中午的時候打開機器發現屏幕分辨率不正常了:2K屏顯示800*600左右的分辨率(無法調節),一個圖標一拳頭大,窗口和網頁顯示不全。Google查了一下發現可能是nvidia顯卡驅動壞了(真的脆),照着幾個博客搞了一下還尼瑪進不去系統,一直循環登錄了???之后又折騰了一整個下午,最后的結果是,重裝顯卡驅動一直失敗:PPA裝顯示connect不上、run文件裝顯示build kernel module error。反正我也是不管什么奇怪的配置問題都能遇上,破系統破摔,正好沒有Win10,重新裝一個雙系統。(本文安裝配置過程僅作個人參考)
1. U盤啟動盤制作
1.1 系統下載
Win10的系統從MSDN下載,選擇 consumer edition version 1803 x64:
Ubuntu從官網下載Desktop 16.04 LTS即可(貌似是比18.04穩定?)
1.2 制作啟動盤
下載UltraISO,文件 -> 打開 -> 選中iso文件,啟動 -> 寫入硬盤鏡像 -> 寫入方式:USB-HDD+ -> 寫入,制作完成。
2. 安裝系統
2.1 安裝順序
這次雙系統先安裝Win10,之后再安裝Ubuntu。主要有兩個原因:
其次,現在唯一的系統壞了,相當於是裸機,安裝Win10之后方便后續的磁盤分區。
2.2 安裝 Win10
因為主板是華碩的,好像新版的 UEFI 操作確實都比老的 Legacy 方便。先關閉 啟動 這一項中的 安全啟動(需要刪除密碼)和 快速啟動,不是很清楚原理,但既然很多貼子都這么說,還是照做保險。再按 F8,選擇 U盤 前帶 EFI 的那一項,就能進入安裝引導。接着引導會詢問安裝在哪一個分區,有的分區不能安裝,這時候把所有的分區刪了,合成一個大分區,之后可安裝成功。之后進行分區,使用DiskGenius,分給C盤128G,D盤2T,剩下的分區用 Win10 自帶的磁盤管理刪除變為空閑空間,方便安裝 Ubuntu 系統時辨別(中間無盤符區域為留給 Ubuntu 的空間):
2.3 安裝 Ubuntu
同 Win10, 選擇帶 EFI 的 U盤啟動項。選擇 try Ubuntu without installing,可以先隨便用一下系統,連接網絡等,之后再在圖形界面中選擇安裝 Ubuntu 16.04 LTS。注意不要勾選安裝 Ubuntu 時 下載更新和安裝第三方軟件這兩項,可能會導致安裝最后的“執行安裝后執行觸發器 update-notifier-common”卡住(最后拔了網線才安裝成功)。接着引導提示:已經安裝了 Windows 10,此時勾選“其他選項”。
再之后是對系統分區,選中空閑區域,點擊 + 號,根據我的環境,空間分配如下:
3. 安裝 Ubuntu NVIDIA 顯卡驅動
(司馬顯卡驅動)
3.1 下載 run 文件
不建議通過 ppa源 安裝,因為你無法配置具體選項且成功后需要經常手動更新驅動。
官網選好分類之后下載 run 文件,並將其復制到英文目錄下,因為切換到 tty 下之后,中文全都變成實心方塊,辨認不出目錄。
3.2 卸載舊驅動
沒有安裝過 NVIDIA 驅動的主機可以省略:
sudo apt-get remove --purge nvidia*
# 卸載對應版本號
# sudo ././NVIDIA-Linux-x86_64-390.48.run --uninstall
sudo /usr/bin/nvidia-uninstall
3.3 安裝各種依賴
不是很清楚,反正照着安裝就vans了
sudo apt-get update
sudo apt-get install dkms build-essential linux-headers-generic
sudo apt-get install gcc-multilib xorg-dev
sudo apt-get install freeglut3-dev libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
3.4 禁用 nouveau
應該是將 ubuntu 自帶的顯卡驅動加入黑名單?
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
# 添加以下代碼:
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
# 保存
# 禁用nouveau 內核模塊
echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf
sudo update-initramfs -u
reboot # 重啟
lsmod |grep nouveau # 無顯示則成功,驅動沒了桌面分辨率會比較大
3.5 關閉 secure boot、fast boot
安裝系統時已經關閉
3.6 在 tty 中安裝顯卡驅動
按 Ctrl+Alt+F1 進入 tty1,輸入用戶名、密碼(無回顯),之后暫停圖像輸出服務:
sudo service lightdm stop
# 安裝驅動
chmod a+x NVIDIA-Linux-x86_64-390.87.run
sudo ./NVIDIA-Linux-x86_64-390.97.run --dkms --no-opengl-files
之后出現的 pre-script failed 是確保用戶真的要安裝驅動,屬實睿智。接着 dkms 選 yes,32 位兼容選 yes,x-org 選 no。最后居然沒有出錯,我哭了,前面被各種 build error 搞出心里陰影了。
sudo service lightdm start # 重啟服務
nvidia-smi # 輸出 GPU 信息代表安裝成功
4. 配置 cuda 和 cudnn
4.1 配置 cuda
由於項目需要且目前深度學習框架都支持了 cuda9.0,因此從官網下載 cuda9.0 的 run 文件安裝,下載完成后輸入:
sudo sh cuda_9.0.176_384.81_linux.run
輸入 accept 之后開始安裝,依次選擇不裝驅動、安裝 cuda、建立鏈接、不裝 sample。
添加路徑:
sudo gedit ~/.bashrc
# 添加下面三行
# add for cuda9.0
export PATH="/usr/local/cuda-9.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH"
source ~/.bashrc
nvcc -V # 查看 cuda 是否安裝成功
4.2 配置 cudnn
安裝cudnn比較容易,同樣從官網下載(需注冊賬號)。下載 cuDNN v7.1.4 Library for Linux,完成后選擇提取到此處,得到一個 cuda 文件夾。執行以下命令:
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
之前看到很多博客在這步之后都添加了軟鏈接,不是很理解。后來發現上面命令中第二步就是將 lib64 文件夾中的文件復制到 /usr 目錄下,而在 lib64 中的三個 libcudnn.so 文件,其中兩個都是軟鏈接,只有 libcudnn.so.7.1.4 是最終的的文件:
5. 安裝 anaconda
官網上只有 Python 3.7 版本的了,但是以前安裝的庫好像都是說在3.6的環境下測試的。對於怎么下載之前的版本,網站是這么說的:
There are three ways to get Anaconda with Python 3.5 or 3.6:
- We recommend that you download the latest version of Anaconda and then make a Python 3.5 (or 3.6) environment.
- Or download the latest version of Anaconda and run the following command to install Python 3.5 (or 3.6) in the root environment:
conda install python=3.5orconda install python=3.6- Or download the most recent Anaconda installer that included Python 3.5 (Anaconda 4.2.0) or Python 3.6 (Anaconda 5.2.0).
感覺前兩條說的挺有道理,我信了,還是下載新版。不過官網下的速度很慢,可以在 Win10 下用迅雷下載 Linux 版,再拷過來安裝。
運行bash Anaconda3-5.3.0-Linux-x86_64.sh即可。
再之后的 TensorFlow 和 PyTorch,都是一條命令完成。
6. 其他
有關 Linux 軟件安裝目錄:
Linux 的軟件安裝目錄是也是有講究的,理解這一點,在對系統管理是有益的
/usr:系統級的目錄,可以理解為 C:/Windows/,/usr/lib 理解為 C:/Windows/System32。
/usr/local:用戶級的程序目錄,可以理解為 C:/Progrem Files/ 。用戶自己編譯的軟件默認會安裝到這個目錄下。
/opt:用戶級的程序目錄,可以理解為 D:/Software,opt 有可選的意思,這里可以用於放置第三方大型軟件(或游戲),當你不需要時,直接 rm -rf 掉即可。在硬盤容量不夠時,也可將 /opt 單獨掛載到其他磁盤上使用。
源碼放哪里?
/usr/src:系統級的源碼目錄。
/usr/local/src:用戶級的源碼目錄。
7. 總結
一趟下來不容易,重裝系統和重配環境之后,感覺比以前清白了一點,畢竟第一次裝雙系統。但也知道了自己有更多不懂的東西,比如裝系統時的磁盤管理,uefi、grub、lagacy等各種名詞,Linux 系統的整體了解等等,還是計組沒學好的鍋。不過因為是一步步采坑搭起來的,感覺現在這個系統更親切了,就算以后再出問題也不會慌了。
