根據參考鏈接,心中熟悉流程
- 參考1確定了【高版本gpu driver 可以兼容 低版本】,所以放心卸載僅支持cuda8.0的舊版,安裝支持cuda9.0的新版gpu driver。因為driver與硬件相關,暫時我找不到可以隔離的方案
- 至於隔離cuda,至少有兩種方案:
- 基於ubuntu的多用戶的隔離:每個用戶的cuda安裝在自己的home下面,不會影響原有的系統根目錄下的cuda8.0的文件。然后修改每個用戶自己的bashrc文件,將自己的cuda系統變量設置為指向自己home下面的cuda
- 基於docker的隔離:基於docker-gpu,可以把cuda安裝在每一個docker中,各個docker彼此隔離,並且與主機無關
- 創建新的cuda環境:
采取某個作者的方案,使用anaconda建立虛擬環境,定制cuda、tensorflow,與其他用戶的【深度學習環境】隔離開來
我的實際操作過程:
- 現狀及目標:
機器上已運行了基於舊版本的driver,cuda8.0及一系列application,需要在保證原有環境能正常運行的條件下安裝新cuda9.0,並實現各用戶的cuda環境隔離
0. 我的軟硬件環境:
object | value |
---|---|
nvidia-gpu-brand & type | Tesla-->K 80 |
OS | Centos7 |
服務器是否有圖形界面 | No |
原driver | 367.48 |
即將安裝的driver | 384.145 |
1. 安裝gpu driver:
- 卸載cuda8.0所用的舊驅動,安裝cuda9.0需要的新驅動,並立刻測試是否兼容cuda8.0 [記住之前的cuda8.0所用的驅動版本,以防出錯后的恢復原來的驅動環境]
- 基於上述顯卡及操作系統信息,處理顯卡驅動:卸載舊的,安裝新的:對照着官方tutorial,開始【檢查環境】並【下載需要的組件】:
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#handle-uninstallation (官方tutorial)
https://ywnz.com/linuxjc/1754.html (一個較好的中文對照tutorial)
https://bluesmilery.github.io/blogs/a687003b/#2、安裝CUDA-9-0-amp-cuDNN-7-1 (中文對照2)
【下面查出的信息應該與nvida官方tutorial前面的適配表格保持一致,否則就要找解決方案】
確保【環境適配官方的tutorial非常重要!!!】
lspci | grep -i nvidia
uname -m && cat /etc/*release
gcc --version
uname -r
cat /proc/driver/nvidia/version (檢查當前的顯卡驅動版本,如果更新driver出錯,需要還原)
官網下面的step 3及之后的若干步驟
繁瑣且非必須了,所以下面參考這篇博客進行顯卡驅動安裝:https://bluesmilery.github.io/blogs/a687003b/#2、安裝CUDA-9-0-amp-cuDNN-7-1 (根據上述鏈接,去下載合適的driver)
- 下面有兩步非常非常重要:
關閉 nouveau (無論是否有圖形界面,建議都關閉掉)
vim /lib/modprobe.d/dist-blacklist.conf
#blacklist nvidiafb # 屏蔽掉這句
# 然后添加下面兩句:
blacklist nouveau
options nouveau modeset=0
# 驅動安裝好之后也可以不用改回來
lsmod | grep nouveau 【沒有輸出即圖形界面已關閉】
卸載原有顯卡驅動
這里與原有安裝方式有關,分為dpg和runfile兩種,實驗室服務器之前的安裝方式是dpg,系統是centos7,但根據查的參考博客,最好是用runfile、
// 如果是舊驅動是runfile安裝方式,試一下下面的命令就知道了
sudo /usr/bin/nvidia-uninstall
// 如果上述命令失敗,說明之前是非runfile方式裝的,就轉下面的方法:
yum remove nvidia* // 干掉和nvidia有關的所有驅動文件
關閉 X Server {容易出現各種錯誤}
//注意,我在centos下面的命令,
//主要常規有幾種命令:
init 3
systemctl stop gdm.service
// 安裝完后就:systemctl start gdm.service
//但是也會有意外,
//比如我這次就遇到上述命令無法關閉X //server的問題:
// 最后在一個國外小論壇上找到一個可行方案:
rm /tmp/ .X0-lock
// 還有可能有 .X1-lock .X2-lock .etc
// 一個個試過去,我是 .X2-lock, .X3-lock .X4-lock
// 后來我猜測是【之前有啥應用鎖住了X server,無法釋放】
進入安裝界面后一路選yes,注意不要 no
我的問題是:這一步發現 X server沒有真正完全關閉,所以又回頭找方案關閉
X server
給new drtiver file 設置x執行權限並安裝
chmod u+x NVIDIA-Linux-x86_64-xxx.yyy.run
./NVIDIA-Linux-x86_64-xxx.yyy.run
測試是否兼容cuda 8.0
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
make clean
make
./deviceQuery
// Result = PASS 即表示OK
之后建議重啟下服務器,能減少各種錯誤。
比如我就遇到:
An NVIDIA kernel module ‘nvidia-uvm’
appears to already be loaded in your kernel
nvidia-smi查看占用進程pid
kill 掉
但是最簡單的方法就是:重啟服務器
至此,最麻煩也最容易出問題的driver部分就OK了。
2. 安裝CUDA-9.0 & cuDNN-7.1:
-
注:強烈建議之前就下載好driver,cuda,cudnnn,下載方法見前面的說明,並且做sha校驗,確保文件完整性,我就犯了這個低級錯誤:下錯了文件
-
安裝cuda:
chmod u+x cuda_9.0.176_384.81_linux.run
./cuda_9.0.176_384.81_linux.run
- 接下來就是安裝過程:
接下來會有一系列選擇
是否安裝顯卡驅動:選no,因為已經裝了最新的驅動
是否安裝CUDA 9.0:選yes
輸入安裝位置:默認即可,因為默認位置就區分開了不同的CUDA版本
是否創建軟鏈:選no,因為要實現多版本CUDA共存。待會兒手動建一個自己需要的軟鏈接。
是否安裝sample:選yes
不同系統可能會有 opengl選項,如果有,選擇no
- 安裝幾個補丁:
chmod u+x cuda_9.0.176.1_linux.run
./cuda_9.0.176_384.81_linux.run
chmod u+x cuda_9.0.176.2_linux.run
./cuda_9.0.176_384.81_linux.run
chmod u+x cuda_9.0.176.3_linux.run
./cuda_9.0.176_384.81_linux.run
- CUDA測試:
cd /usr/local/cuda-9.0/samples/1_Utilities/deviceQuery
make
./deviceQuery
// Result = PASS 即表示OK
- Cudnn安裝:
tar zxvf cudnn-9.0-linux-x64-v7.1.tgz
// 默認解壓為一個cuda目錄,cd進去
cp cuda/include/cudnn.h /usr/local/cuda-9.0/include/
cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64/
chmod a+r /usr/local/cuda-9.0/include/cudnn.h
chmod a+r /usr/local/cuda-9.0/lib64/libcudnn*
3. 配置自己用戶的環境變量,隔離cuda
- 之前的root 下面的 ~/.bashrc千萬不能動
- 為cuda-9.0建立屬於自己用戶zh的軟鏈接:
ln -s /usr/local/cuda-9.0 /usr/local/cuda_zh
- 修改自己的 .bashrc
export PATH="/usr/local/cuda_zh/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda_zh/lib64/:$LD_LIBRARY_PATH"
export LIBRARY_PATH="/usr/local/cuda_zh/lib64:$LIBRARY_PATH"
// 注意:一定要確保自己的cuda_zh優先級
//比系統變量的優先級高,所以自己路徑寫在最前面
- source ~/.bashrc
- 在不同用戶下,分別執行 nvcc --version,查看各自的cuda版本。【我的情況是:一個8.0,一個9.0】
4. 配置下tensorflow-gpu環境:
- 切換國內源,安裝 Anaconda:
- 切換國內源,安裝tensorflow-gpu
- 測試tensorflow-gpu可用性
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
- 切換其他用戶,檢測其他用戶之前的tensorflow-gpu是否能正常運行
- 注:上述安裝具體過程參見我自己的一篇博客:ubuntu常見軟件的安裝
5. 遇到的最有印象的問題總結:
- sudoers文件被修改后需要恢復為read only 才能后續執行sudo 命令
- ubuntu帶圖形界面的測試機上的驅動安裝前必須要禁用圖形界面相關的noveau及X server,否則會出現循環登錄的問題,出現了最簡單的辦法是【卸載了重裝nvidia驅動】
- 驅動卸載的remove命令,只能后接nvidia*,否則會出問題
- centos上面 X server有時候會因為各種問題而不能【真正完全】關閉,我找到了一種方案:rm .X2-lock。可能還有其他可能
- 遇到一些異常bug,先google,並且試着重啟下服務器
- 利用linux多用戶的天然隔離效果+自己的bashrc用戶變量可以做【某些軟件的多版本共存】
參考鏈接:
-
https://bluesmilery.github.io/blogs/a687003b/
https://bluesmilery.github.io/blogs/a687003b/#2、安裝CUDA-9-0-amp-cuDNN-7-1
(先測試高版本顯卡可以兼容低版本) -
https://blog.csdn.net/tunhuzhuang1836/article/details/79545625
https://blog.csdn.net/ksws0292756/article/details/80120561
(基於多用戶的cuda隔離,只是影響當前用戶,也不影響之前的主機環境) -
(基於docker的cuda級別隔離,可以拿來多用戶共享某cuda且不干擾原來的主機環境)
https://blog.skyaid-service.org/2017/11/16/nvidia-docker/
https://blog.csdn.net/zh_jessica/article/details/79644544
https://blog.opskumu.com/docker-gpu.html
https://github.com/NVIDIA/nvidia-docker (官方tutorial)
https://github.com/NVIDIA/nvidia-docker/wiki/Docker-Hub (官方tutorial)
https://blog.csdn.net/sinat_26917383/article/details/78728215 -
深入理解整個安裝流程進行所參考的:
- https://bluesmilery.github.io/blogs/a687003b/#CUDA下載
- https://zhuanlan.zhihu.com/p/35834028
- https://blog.csdn.net/tunhuzhuang1836/article/details/79545625
- https://blog.csdn.net/ksws0292756/article/details/80120561
- https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#handle-uninstallation (官方tutorial,是必須要參考,且作為最最主要參考對象,其他中英文博客只是輔助理解的)
- https://zhuanlan.zhihu.com/p/35834028
- https://ywnz.com/linuxjc/1754.html (雖然不是ubuntu16.04,但是參考性很大)
- https://blog.csdn.net/FIELDOFFIER/article/details/50354607
- https://blog.csdn.net/qq_34564947/article/details/78360198
- https://blog.csdn.net/u012759136/article/details/53355781
- https://blog.csdn.net/zqinstarking/article/details/80713338
- https://www.cnblogs.com/linyx/p/8594040.html (質量高)
- https://blog.csdn.net/lovebyz/article/details/80704800
- http://uixdk.com/tensorflow/2018/06/21/CentOS7-CUDA9.0-CUDNN-Tensorflow.html (質量高)
- https://blog.csdn.net/tunhuzhuang1836/article/details/79545625 (cuda多版本共存)
- https://blog.csdn.net/ksws0292756/article/details/80120561 (cuda多版本共存)
- 實際操作后,出各種錯后參考的一些鏈接
- https://blog.csdn.net/qq_34564947/article/details/78360198
- https://blog.csdn.net/u012759136/article/details/53355781
- https://unix.stackexchange.com/questions/329892/cannot-remove-module-nvidia-nvidia-uvm-in-order-to-install-drivers
- https://github.com/neutrinolabs/xrdp/issues/778
- https://www.zybuluo.com/upuil/note/922035
- https://blog.csdn.net/rznice/article/details/53386436
- https://blog.csdn.net/zyllong/article/details/38387739
- centos 7下面的實際操作的參考:
- https://www.cnblogs.com/linyx/p/8594040.html
- http://uixdk.com/tensorflow/2018/06/21/CentOS7-CUDA9.0-CUDNN-Tensorflow.html
- 我自己的ubuntu下面的常用軟件安裝連接:
xxx