服務器沒有圖形界面,而且現在也不在實驗室,因此使用Xshell遠程終端進行配置。
大概分爲以下幾個步驟:
python3.6——nvidia-driver-390—— CUDA9.0——CuDNN7.3——tensorflow_gpu-1.12.0
選擇安裝tf1.12主要是因爲服務器的驅動裝了390,CUDA的版本限制,不確定裝高版本tf會不會有問題。
其中,關於版本選擇的問題參考下圖[1, 5]:
另,先註明一點,貌似顯卡compute capable小於3.0的不能使用gpu計算,關於查詢的方法見[19]。具體方法可在下文中找到,需先裝好CUDA。
驅動安裝[2, 3]
查看推薦安裝驅動版本:
ubuntu-drivers devices
如果報錯 “ not found”[4],則執行下述命令
sudo apt-get install ubuntu-drivers-common
安裝推薦版本(recommended):
sudo ubuntu-drivers autoinstall
也可直接安裝指定版本:
sudo apt install nvidia-xxx
但我指定推薦的390會報錯,沒嘗試選別的會如何:
重啓服務器並查詢是否安裝成功:
sudo reboot
sudo nvidia-smi
安裝CUDA9.0
下載地址:https://developer.nvidia.com/cuda-toolkit-archive
選擇對應的版本:
這裏CUDA9.0沒有ubuntu18.04的,按照[6]的說法,17.04也是可以的。
下載 base installer 和4個補丁:
下載完後把 “cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64.deb” 文件傳到服務器的 /usr/local 路徑下,參考[7]。
依次執行下述命令(即上面圖片中所說的):
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64.deb # 安裝meta-data
sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub # 安裝CUDA的GPG Public Key
sudo apt-get update # 更新APT源
sudo apt-get install cuda # 安裝CUDA
安裝補丁:
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local-cublas-performance-update_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local-cublas-performance-update-2_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1704-9-0-local-cublas-performance-update-3_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1704-9-0-176-local-patch-4_1.0-1_amd64.deb
sudo apt-get update
sudo apt-get upgrade cuda
如果上面用deb安裝不成功可以用runfile安裝[20]。
設置環境變量:
sudo vim /etc/profile
這裏關於 /etc/profile 和 ~/.bashrc 等的區別見[11]。
在文件的最後輸入:
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda-9.0
使環境變量生效:
source /etc/profile
如果報錯 “not found” ,此時不是root用戶,則參考[10],切換到root用戶重新執行,再切換回來:
sudo su
source /etc/profile
su lyt
測試環境變量是否生效:
nvcc --version
備註:
1. 我在執行上述操作前發現服務器的 /usr/local 路徑下已有2個CUDA文件夾,8.0和9.0:
根據[8]的說法,輸入下述命令:
cd /usr/local/cuda-9.0/samples/1_Utilities/deviceQuery
sudo make
sudo ./deviceQuery
其中,執行 make 時報錯,參考[9],已經編譯過且有.o文件,故跳過此步。
執行最後一句後,顯示CUDA已配置:
cuda-8.0路徑下運行也一樣,但是文件8.0下只有文件下sample沒有別的。
本來想可能服務器之前有人裝過吧,就配置了環境變量,但是最後 nvcc 時報錯 nvcc not found。
事實上 cuda/bin 下有 nvcc,也確實加入了環境變量[12]。無法解決,於是決定還是不管服務器中已有的cuda,還是重裝一下。
最終實現結果:
cuda-8.0 和 cuda-9.0-copy 是原本服務器中有的,cuda-9.0是新安裝的。
在新安裝完成後重新運行sample,結果如下:
(sudo make前)
執行最後一句後,顯示出了該GPU的CUDA支持的cc爲2.0[19]:
2. 在添加環境變量時,本來想添加到 ~/.bashrc 中,但是出現了報錯,且打開後是一片空白。根據[13],是因爲我在之間添加環境變量時不正常關閉了文件,於是輸入如下命令:
sudo rm -f ~/.bashrc.swp
vim ~/.bashrc # 往文件中輸入環境變量配置
sudo su
source /home/lyt/.bashrc
su lyt
根據[11],配置到用戶級而不是系統級。
安裝cuDNN7.3(for CUDA9.0)
下載網址:https://developer.nvidia.com/rdp/cudnn-download
需要註冊一下賬號,然後選擇對應的版本:
將 下載好的“ cudnn-9.0-linux-x64-v7.3.0.29.solitairetheme8 ”文件傳到服務器的 /usr/local下,轉成tgz格式[14],再解壓:
sudo cp cudnn-9.0-linux-x64-v7.3.0.29.solitairetheme8 cudnn-9.0-linux-x64-v7.3.0.29.tgz
sudo tar -zxvf cudnn-9.0-linux-x64-v7.3.0.29.tgz
將解壓後生成的cuda文件夾中的 cudnn.h 文件和lib文件拷貝到cuda9.0(CUDA安裝目錄)文件夾中對應位置:
sudo cp /usr/local/cuda/include/cudnn.h /usr/local/cuda-9.0/include/
sudo cp /usr/local/cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64/ -d
可能是現在新版本的cuda默認就已經有了這些文件?先不管,繼續下一步。
賦予執行權限:
sudo chmod a+x /usr/local/cuda-9.0/include/cudnn.h
sudo chmod a+x /usr/local/cuda-9.0/lib64/libcudnn*
安裝tensorflow-1.12
根據[6],檢查python3、pip3、virtualenv是否安裝,並安裝對應項:
python3 --version
pip3 --version
virtualenv --version
sudo apt update
sudo apt install python3-dev python3-pip
sudo pip3 install -U virtualenv
進入 ~/Project 目錄,創建python虛擬環境:
cd ~
sudo mkdir Project
cd Project
sudo virtualenv --system-site-packages -p python3 ./venv
建立軟連接(此時在~目錄,即/home/lyt目錄下):
sudo ln -s ./Project/venv/bin/activate venv
之後使用此虛擬環境時,激活和關閉命令如下:
source venv
deactivate
安裝tensorflow1.12-gpu:
sudo pip3 install tensorflow-gpu==1.12
查看是否安裝成功:
python3 list
備註:
1. 如果虛擬環境建錯位置了,直接刪除對應文件夾即可,非空文件夾的刪除命令[15]:
sudo rm -rf venv # 非空文件夾
sudo rm test1 # 文件
sudo rmdir test # 空文件夾
2. 如果pip安裝速度過慢,可永久修改pypi源,提升下載速度[6]。
新建 ~/.pip/pip.conf :
sudo mkdir .pip
sudo vim .pip/pip.conf
添加內容:
[global]
index-url = https://mirrors.aliyun.com/pypi/simple
[install]
trusted-host=mirrors.aliyun.com
3. 雖然tf-gpu裝好了,但是在實際運行的時候好像並不能使用gpu進行計算,運行[16]中的例子:
import tensorflow as tf
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print(sess.run(c))
運行結果顯示使用的是CPU:
根據[17]的回答,我的GPU只能支持2.0,而它需要cuda capability大於3.5纔可用:
(有些舊版本可能要求低一點,但至少都是3.0)
並且好像這是一個硬件問題..唯一的解決辦法就是更換一塊GPU,總之就是無法在此GPU上運行tensorflow。
根據[18]的最新更新,似乎有辦法用非官方的方法在cc2.0上運行,但效果不盡人意:
算了我還是先這麼用着吧,如果以後遇到了問題再說。
參考文檔
[3] Ubuntu 18.04 安裝 NVIDIA 顯卡驅動
[4] ubuntu-drivers: command not found解決辦法
[5] CUDA TOOLKIT DOCUMENTATION
[6] Ubuntu18.04 + CUDA9.0 + cuDNN7.3 + Tensorflow-gpu-1.12 + Jupyter Notebook深度學習環境配置
[9] 如何解決make: Nothing to be done for `all' 的方法
[10] 使用source命令的時候提示source: command not found錯誤解決
[11] linux 環境變量設置方法總結(PATH / LD_LIBRARY_PATH)
[13] Found a swap file by the name "~/.bashrc.swp"
[14] 如何在linux下解壓 .solitairetheme8 文件
[17] tesla c2075 with tensorflow cuda version installation [duplicate]
[18] How can I make tensorflow run on a GPU with capability 2.x?