配置ubuntu18.04服務器環境,tensorflow1.12-gpu

服務器沒有圖形界面,而且現在也不在實驗室,因此使用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上運行,但效果不盡人意:

算了我還是先這麼用着吧,如果以後遇到了問題再說。

 

參考文檔

[1] tensorflow文檔

[2] Ubuntu下安裝NVIDIA驅動的三種方法

[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深度學習環境配置

[7] pscp實現windows傳輸文件給linux

[8] Ubuntu如何查看計算機安裝好Cuda

[9] 如何解決make: Nothing to be done for `all' 的方法

[10] 使用source命令的時候提示source: command not found錯誤解決

[11] linux 環境變量設置方法總結(PATH / LD_LIBRARY_PATH)

[12] nvcc --version顯示錯誤

[13] Found a swap file by the name "~/.bashrc.swp"

[14] 如何在linux下解壓 .solitairetheme8 文件

[15] ubuntu刪除非空文件夾

[16] TensorFlow 官方文檔中文版

[17] tesla c2075 with tensorflow cuda version installation [duplicate]

[18] How can I make tensorflow run on a GPU with capability 2.x?

[19] 關於設備CUDA的信息查詢

[20] ubuntu18.0、nvidia驅動435,安裝CUDA10.0失敗解決方案

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