當前位置:
首頁 > 知識 > 基於Ubuntu 16.04配置TensorFlow-GPU 1.9.0深度學習環境

基於Ubuntu 16.04配置TensorFlow-GPU 1.9.0深度學習環境

本教程配置環境為:

Ubuntu 16.04_64bit 、NVIDIA GeForce GTX 1080Ti

Python 3.5.2、CUDA 9.0 、 cuDNN 7.0、TensorFlow-GPU 1.9.0

本文首先介紹了配置之前的相關準備工作,包括查看NVIDIA顯卡型號和對應驅動是否安裝、驗證NVIDIA顯卡是否支持CUDA、修改ubuntu默認python版本、安裝pip並升級、完全卸載舊版本CUDA;其次介紹了CUDA 9.0 、 cuDNN 7.0以及libcupti-dev 庫的安裝;再次介紹了環境變數的配置、測試 CUDA 9.0 和 cuDNN 7.0 的安裝情況;隨後介紹了安裝TensorFlow-GPU 1.9.0 步驟並測試其安裝情況;最後介紹了導入 tensorflow 出現的問題及其解決辦法。

本文所述方法適用於以上環境但所體現的思想不限於此種組合,讀者可根據本教程配置類似組合。

一、前言

隨著深度學習技術進入新時代,初學者的主要矛盾已經轉化為用戶日益增長的模型高速訓練需要和各類軟硬體不簡單不清晰的正確配置之間的矛盾。只有正確認識這一主要矛盾,才能確定正確的策略和辦法,促進模型快速調優,推動 深度學習技術向實際應用快速落地。

以谷歌的 TensorFlow 深度學習框架為代表的眾多開源工具使得深度學習技術變得「容易上手」。殊不知,「萬事開頭難」,雖然配置 TensorFlow-CPU 環境 只是一行代碼就能分分鐘解決的事情,但在 TensorFlow-CPU 環境下進行模型訓練是一件非常「痛苦的事」,因為其往往需要數倍於在 TensorFlow-GPU 環境下消耗的時間!如何在 Ubuntu 上正確配置 TensorFlow-GPU 環境就顯得非常關鍵!縱觀網路上介紹此方面的配置教程,可謂五花八門、莫衷一是,給深度學習初學者帶來不少困惑。更有甚者,初學者在 Ubuntu 上配置 TensorFlow-GPU 環境時竟耗費了一周左右時間「踩坑」才能摸清門道,稍有不慎,期間還可能重裝 1-2 次系統,可謂「勞心勞力,收效甚微」。雖然筆者在初次嘗試也走了不少彎路,花了整整一天時間各種「打怪升級」才成功配置 TensorFlow-GPU 環境。但筆者不希望寶貴的時間花在配置環境這種看似簡單但又需要經驗的事情上,因為 從事深度學習 本身是一件艱難的事情。

人生已如此艱難,又何必為難自己?筆者希望,初學者能將更多的時間用在編程、模型開發、調參和優化上,而非是前期環境配置上。因此,筆者筆耕不輟,希望將自己在各種「踩坑」下的經驗教訓匯總於本教程中,分享給大家,為初入深度學習的學者提供正確而又高效的配置教程。若讀者需要進一步探討,可在文末留言與筆者交流。

二、TensorFlow 安裝版本簡介

TensorFlow 有 CPU和 GPU 兩個版本,GPU版本需要NVIDIA的CUDA 和 cuDNN 支持,CPU版本不需要。CUDA(Compute Unified Device Architecture)是顯卡廠商NVIDIA 推出的運算平台。 CUDA^TM是一種由 NVIDIA 推出的通用並行計算架構,該架構使 GPU 能夠解決複雜的計算問題。它包含了CUDA 指令集架構(ISA)以及 GPU 內部的並行計算引擎。NVIDIA CUDA? Deep Neural Network library (cuDNN) 是NVIDIA 專門針對深度神經網路(Deep Neural Networks)中的基礎操作而設計基於 GPU 的加速庫,其被廣泛用於各種深度學習框架,例如TensorFlow, Caffe, Theano, Torch, CNTK等。cuDNN 為深度神經網路中的標準 流 程 ( forward and backward convolution, pooling, normalization, and activation layers)提供了高度優化的實現方法。

「Talk is cheap, Show me the code」(p話少說,放「碼」過來),下面詳細介紹配置步驟。

三、Ubuntu 16.04配置TensorFlow-GPU 1.9.0步驟詳解

1. 準備工作

1.1 查看 NVIDIA 顯卡型號和相應驅動是否安裝

快捷鍵 Ctrl+Alt+T 調出終端,輸入如下命令:

$ nvidia-smi

查看 NVIDIA 顯卡屬性,若本機驅動已安裝,則顯示類似下圖信息

從上圖第一行可以看出本機安裝的 NVIDIA 顯卡驅動版本為 384.111;第二行中可以看出本機 NVIDIA 顯卡名字為:GeForce GTX 1080,GPU 編號為 0(只有一塊GPU)。

若 NVIDIA 顯卡驅動未安裝,則上述命令無法查詢以上信息,可以使用如下命令進行驅動安裝:

$ sudo ubuntu-drivers autoinstall

然後再次使用命令 $ nvidia-smi 查看 NVIDIA 顯卡驅動是否已經安裝;或者進入系統設置,點擊底部的詳細信息,若概況欄目正確顯示出本機 CPU、GPU 信息則表明驅動已經正確安裝,若上述操作均已順利執行,但概況欄目仍未正確顯示出本機 CPU、GPU 信息,則重啟 Ubuntu 系統即可。

1.2 驗證 NVIDIA 顯卡是否支持 CUDA

點擊https://developer.nvidia.com/cuda-gpus進入 NVIDIA GPUs 頁面:

根據本機 NVIDIA 顯卡型號進入相應列表查看其是否在列,並查看其是否支持CUDA Compute Capability 3.0 或更高。若滿足條件,那麼恭喜你,請繼續閱讀下文;否則你懂的(需要更換高性能GPU卡)。

1.3 配置 Python 3.6/3.5 ×64

由於Ubuntu16.04 LTS版本自帶Python2.7和Python3.5,為後續順利搭建TensorFlow-GPU 環境,請務必安裝 Python 3.5 - 3.6 系列版本(但最好不要安裝3.7,目前還不支持),當然系統自帶的 Python 3.5 版本足以滿足要求,本著「少折騰」原則,可以「就地取材」使用系統自帶 Python 3.5。

但是,Ubuntu 16.04 LTS 默認使用 Python 2.7(可在終端輸入:python -V 查看本機默認採用的 python 版本,然後進入/usr/local/lib 查看當前系統中已安裝的 python 版本;若有需要,可使用命令 sudo apt-get install python3.6 安裝 Python 3.6 版本),為此,需要修改系統默認的版本(並不是刪除不需要的版本,因為系統的許多底層是依賴 python2的,刪除後可能會導致系統某些功能無法正常運行,謹慎操作),方法是:

(1) 刪除/usr/bin 目錄下的 python link 文件,在終端輸入如下命令:

$ cd /usr/bin

$ sudo rm -rf python

(2)刪除後再建立新的 python3 鏈接關係:

$ sudo ln -s /usr/bin/python3 /usr/bin/python

1.4 安裝 pip 並升級到 9.0 及以上

Ubuntu 16.04 LTS 自帶的 Python 3.5 使用的 pip 版本為 8.1 的,可用 pip -V 查看當前 pip 版本(若提示未安裝,可使用 sudo apt-get install python3-pip 進行安裝)。後續操作需要 pip 版本為 9.0 及以上,可使用如下命令對當前 pip 進行升級:

$ pip install –upgrade pip (或者 easy_install -U pip)

升級完畢之後,此時用 pip -V 查看當前 pip 版本。

1.5 卸載並清理原始 CUDA 版本(若此前安裝失敗或重新配置,請務必執行本部分操作;若為初次配置,可跳過)

若不是在ubuntu16.04上首次安裝CUDA及對應的cuDNN,或者要升級CUDA及對應的cuDNN以便配置更高版本的TensorFlow-GPU,請務必先將其卸載並清理乾淨,為後續高版本的配置提供清朗的安裝環境。

以卸載CUDA 8.0 和cuDNN 6.0為例,具體方法如下:

(1) 先使用如下命令卸載 CUDA8.0 安裝包:

$ sudo apt-get –purge remove cuda-repo-ubuntu1604-8-0-local-ga2

(2)使用如下命令查找殘留文件(帶對應版本號的均需要清理)

$ sudo apt-cache search cuda*

經過上述查找,結果如下(僅列出部分):

cuda-cudart-8-0 - CUDA Runtime native Libraries

cuda-driver-dev-8-0 - CUDA Driver native dev stub library

…………

(3)再次使用第一步中的命令清理第二步帶對應版本號的殘留文件(不帶對應版本號的無需清理)

sudo apt-get –purge remove cuda-cudart-8-0 cuda-driver-dev-8-0 ......

經過上述步驟,絕大部分殘留文件均已清除,但少部分文件由於許可權原因,還需進一步刪除,具體表現在,第三步進行後會有如下提示:

dpkg:警告:卸載cuda-nvrtc-dev-8-0時,目錄/usr/local/cuda-8.0/targets/x86_64-linux/include非空,因而不會刪除該目錄

此時使用如下命令強制刪除根目錄下的 CUDA 安裝目錄,即可徹底清理:

$ sudo rm -rf /usr/local/cuda-8.0

至此,準備工作已經結束,好戲才剛剛開始!

2 CUDA 9.0 和 cuDNN 7.0 的下載與安裝

2.1 CUDA 9.0 的下載與安裝

進入

https://developer.nvidia.com/cuda-toolkit-archive

下載 CUDA 9.0 版本(官方建議)。

為保證後續安裝和配置順利進行,CUDA 9.0 下載頁中的 Operating System、Architecture、Distribution、Version、Installer Type 這幾項請按照下圖所示進行選擇。

如上圖所示,共4個 deb 文件:①為 CUDA 9.0 基礎安裝包,②-⑤為其更新包:

① cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb(1.1G)

② cuda-repo-ubuntu1604-9-0-local-cublas-performance-update_1.0-1_amd64.deb(95.5 MB)

③cuda-repo-ubuntu1604-9-0-local-cublas-performance-update-2_1.0-1_amd64.deb(95.4 MB)

④ cuda-repo-ubuntu1604-9-0-local-cublas-performance-update-3_1.0-1_amd64.deb(112 MB)

⑤ cuda-repo-ubuntu1604-9-0-176-local-patch-4_1.0-1_amd64.deb(98.6MB)

按照 ①②③④⑤的順序進行安裝,先基礎安裝包①,首先在終端切換路徑到 deb 安裝包所在路徑(cd ~/),然後依次輸入如下四行命令:

$sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb

$apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub

$sudo apt-get update

$apt-get install cuda

注意,第二行命令官網給的是

sudo apt-key add /var/cuda-repo-/7fa2af80.pub,

其中的是需要我們輸入安裝的 CUDA 9.0 版本號,為便於確定版本號的正確輸入形式,大家可以輸入這行命令的前一半命令:

sudo apt-key add /var/cuda-repo-,

然後按Tab鍵自動補齊版本號。這裡已經給大家確定了其正確的版本號輸入形式,直接 copy 運行即可順利安裝。

接著安裝更新包②③④⑤(默認4個 deb 均在同一路徑下),在終端依次輸入如下命令:

$sudo dpkg -i cuda-repo-ubuntu1604-9-0-local-cublas-performance-update_1.0-1_amd64.deb

$sudo dpkg -icuda-repo-ubuntu1604-9-0-local-cublas-performance-update-2_1.0-1_amd64.deb

$sudo dpkg -i cuda-repo-ubuntu1604-9-0-local-cublas-performance-update-3_1.0-1_amd64.deb

$sudo dpkg -i cuda-repo-ubuntu1604-9-0-176-local-patch-4_1.0-1_amd64.deb

至此,CUDA 9.0 安裝完畢。下面進行 cuDNN 7.0 的下載與安裝。

2.2 cuDNN 7.0 的下載與安裝

進入

https://developer.nvidia.com/rdp/cudnn-archive

下載與 CUDA 9.0 版本相匹配的 cuDNN7.0版本【官方推薦版本,非常關鍵!】,這裡需要註冊賬號、登錄並進行問卷調查(問卷不多於 5 個問題)才能下載。

本教程下載Download cuDNN v7.0.5 [Dec 5, 2017], for CUDA9.0列表下的

cuDNN v7.0.5 Library for Linux進行配置,下載文件為cudnn-9.0-linux-x64-v7.tgz(333M)或是cudnn-9.0-linux-x64-v7.solitairetheme8(348.8M)。

若是下載的 cudnn-9.0-linux-x64-v7.tgz 壓縮文件,先使用如下命令進行解壓:

$ tar xvf cudnn-9.0-linux-x64-v7.tgz

也可直接右鍵「提取到此處」,簡單粗暴。

若是下載的 cudnn-9.0-linux-x64-v7.solitairetheme8 文件,先使用如下命令將其轉換為 tgz 文件:

$ cp cudnn-9.0-linux-x64-v7.solitairetheme8 cudnn-9.0-linux-x64-v7.tgz

然後採用上述方法解壓,或者直接右鍵「提取到此處」。當然也可直接將 cudnn-9.0-linux-x64-v7.solitairetheme8的後綴名改為.tgz,然後右「提取到此處」,簡單粗暴、療效快。

在終端依次輸入如下三行命令(注意路徑):

$ 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*

至此,cuDNN 7.0 安裝完畢。

3 libcupti-dev 庫的安裝

根據TensorFlow 安裝教程說明:

The libcupti-dev library, which is the NVIDIA CUDA Profile Tools Interface. This library provides advanced profiling support. To install this library, issue the following command for CUDA Toolkit ≥ 8.0:

$ sudo apt-get install cuda-command-line-tools

但是,當你輸入上述命令後,你會得到如下的錯誤提示:

E: Unable to locate package cuda-command-line-tools

這是因為沒有指定 cuda-command-line-tools 的版本,使用下面命令在源軟體列表中查找相應的軟體包:

$ sudo apt-cache search cuda-command-line-tool

此時會返回包含「cuda-command-line-tool」欄位的所有 cuda-command-line-tools 版本。

cuda-command-line-tools-8-0 - CUDA command-line tools

cuda-command-line-tools-9-0 - CUDA command-line tools

然後選擇相應的版本安裝即可。例如本教程安裝的是 CUDA 9.0,因此選擇與之匹配的「cuda-command-line-tools-9-0」進行安裝,命令如下:

$ sudo apt-get install cuda-command-line-tools-9-0

當然,上述辦法也可使用 Tab 鍵的自動補齊功能來輔助查找相應版本,兩者有異曲同工之妙。

4 環境變數配置

在終端輸入如下命令:

$ sudo gedit /.bash_profile

打開個人配置文件,然後在文件末尾添加下列三行內容(以 export 開頭):

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"

export CUDA_HOME=/usr/local/cuda

export LD_LIBRARY_PATH=/usr/local/cuda/lib64/

保存並退出,然後在終端輸入

$ source /.bash_profile

更新當前變數環境。

5 測試 CUDA 9.0 和 cuDNN 7.0 的安裝情況

5.1 測試 CUDA 9.0 的安裝情況

最直接的方法是使用如下命令進行查看:

$ cat /usr/local/cuda/version.txt

此時輸出:CUDA Version 9.0.176

更詳細的測試方法是在終端輸入如下命令:

$ cd /usr/local/cuda-9.0/samples/1_Utilities/deviceQuery

$ sudo make

$ ./deviceQuery

若顯示本機 GPU 屬性信息,如下圖所示,則表明 CUDA 9.0 安裝成功。

也可在終端輸入如下命令進行二次測試:

$ cd /usr/local/cuda-9.0/samples/1_Utilities/bandwidthTest

$ sudo make

$ ./bandwidthTest

5.2 測試 cuDNN 7.0 的安裝情況

在終端輸入如下命令:

$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

輸出:

#define CUDNN_MAJOR 7

則表明 cuDNN 7.0 安裝成功。

6 配置 TensorFlow-GPU 環境

官方推薦使用 Virtualenv 來進行安裝:

我們建議採用 Virtualenv 安裝方式。Virtualenv 是一個與其他 Python 開發相互隔離的虛擬 Python 環境,它無法干擾同一計算機上的其他 Python 程序,也不會受其影響。在 Virtualenv 安裝過程中,您不僅要安裝 TensorFlow,還要安裝TensorFlow 需要的所有軟體包。(這一過程其實很簡單。)要開始使用TensorFlow,您只需要「激活」虛擬環境。總而言之,Virtualenv 提供一種安全可靠的機制來安裝和運行 TensorFlow。

在 Anaconda 中,您可以使用 conda 來創建一個虛擬環境。但是,在Anaconda 內部,我們建議使用 pip install 命令來安裝 TensorFlow,而不要使用 conda install 命令。注意conda 軟體包是由社區提供支持的,並沒有任何官方支持也就是說,TensorFlow 團隊既不測試也不維護 conda 軟體包。若使用該軟體包,您需要自行承擔相關風險。

6.1 使用 Virtualenv 進行安裝 (首選)

步驟如下:

(1)安裝 pip (前面已經完成)和 Virtualenv:

$ sudo apt-get install python3-pip python3-dev python-virtualenv

(2)創建 Virtualenv 環境:

$ virtualenv –system-site-packages -p python3 /home/wz/tensorflow

注意:路徑 /home/wz/tensorflow 為自定義,本文設定安裝在此路徑下,讀者根據實際情況做相應修改(下同)。

(3)激活 Virtualenv 環境

$ source /home/wz/tensorflow/bin/activate

此時,終端的源命令提示符前部分應標識了「(tensorflow)」欄位:

(tensorflow) wz@WZ-Desktop:~$

(4)在激活的 Virtualenv 環境中在線安裝 TensorFlow-GPU(當然也可以安裝 CPU 版本的 TensorFlow)

(tensorflow) wz@WZ-Desktop:~$ pip3 install tensorflow-gpu==1.9.0

當然也可以訪問:

https://pypi.org/project/tensorflow-gpu/1.9.0/#files

下載tensorflow_gpu-1.9.0-cp35-cp35m-manylinux1_x86_64.whl文件後在本地安裝:

(tensorflow) wz@WZ-Desktop:~$ pip3 installtensorflow_gpu-1.9.0-cp35-cp35m-manylinux1_x86_64.whl

注意:tensorflow-gpu-1.9.0 版本大約 229.6 MB(2018 年 7 月 10 號發布),這裡配置的是1.9.0 版本的 tensorflow-gpu,當然 CUDA 9.0 和 cuDNN 7.0 對 tensorflow-gpu 版本是向下兼容的,也就是說這裡也可以安裝 1.8.0、1.7.0、1.6.0、1.5.0、1.4.0 或 1.3.0 等低版本的 tensorflow-gpu。tensorflow-gpu 版本之間的切換並無特定要求,具備「回滾」功能,也就是說安裝 tensorflow-gpu-X.0 版本的同時會自動卸載已經安裝的 tensorflow-gpu-Y.0 版本(X 與 Y 沒有大小之分),可使用上述命令指定安裝版本來切換不同的tensorflow-gpu 版本,沒有後顧之憂。

此時終端提示信息如下:

Successfully installed ...... tensorboard-1.9.0 tensorflow-gpu-1.9.0

表示 tensorflow-gpu-1.9.0 初步成功安裝(也同時安裝 tensorboard)。

6.2 使用原生 pip 進行安裝(備選)

Python 的安裝 和 pip 的升級已在前面完成,此時可利用如下命令安裝TensorFlow:

$ pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow-gpu

上述命令默認安裝最新版本tensorflow-gpu,若要指定版本,使用tensorflow-gpu==X.Y.0。

要卸載 TensorFlow,使用如下命令:

$ sudo pip3 uninstall tensorflow

7 測試 TensorFlow-GPU 安裝情況

如果是通過 Virtualenv 進行安裝,每次使用 TensorFlow 的時候,必須先激活 Virtualenv 環境。

測試流程如下:

(tensorflow) wz@WZ-Desktop:~$ python

> > > 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))

顯示如下信息:

Devicemapping: /job:localhost/replica:0/task:0/device:GPU:0->device: 0,name: GeForce GTX 1080 Ti, pci bus id: 0000:03:00.0, compute capability: 6.1

> > > print(sess.run(c))

MatMul: (MatMul): /job:localhost/replica:0/task:0/device:GPU:0

b: (Const): /job:localhost/replica:0/task:0/device:GPU:0

a: (Const): /job:localhost/replica:0/task:0/device:GPU:0

到此,即驗證了 TensorFlow-GPU 完全安裝成功!

若退出 TensorFlow 環境,可使用如下命令:

(tensorflow) wz@WZ-Desktop:~$ deactivate

若卸載 TensorFlow,只要移除創建的 tensorflow 根目錄即可,使用如下命令:

(tensorflow) wz@WZ-Desktop:~$ rm -r /home/wz/tensorflow

8 版本兼容性 & 常見問題與解決辦法

8.1 TensorFlow-GPU 版本與 cuDNN 版本兼容性問題

? cuDNN6.0 最高可支持 TensorFlow-GPU 1.4.0 並向下兼容

? cuDNN7.0 目前可支持 TensorFlow-GPU 1.9.0 並向下兼容

8.2 常見問題與解決辦法

一般來說,按照上述流程順利走下來(不存在 cuDNN 版本與 TensorFlow-GPU版本兼容性問題,同時完成環境變數配置)TensorFlow-GPU 便可以完全配置成功。但有時候也會出現某種「意外」,尤其是當 ubuntn 安裝某些依賴失敗導致當前環境紊亂時。

筆者就遇到過這樣一個問題:按照上述流程配置CUDA8.0+cuDNN6.0+TensorFlow-GPU 1.4.0,在導入 tensorflow 時候,提示:

ImportError: libcublas.so.6.0: cannot open shared object fille: No such file or directory

初步分析原因是本地/usr/local/lib缺少cuDNN6.0的動態連接庫文件libcublas.so.6.0(排除版本之間不兼容原因,同時相關路徑已經添加到系統環境)。

解決辦法是將與 libcublas.so.6.0(在/usr/local/cuda-8.0/lib64/下)相關的三個文件複製到/usr/local/lib 文件夾下(注意與安裝的 cuda 版本號):

$ sudo cp /usr/local/cuda-8.0/lib64/libcudnn.so /usr/local/lib/libcudnn.so && sudo ldconfig

$ sudo cp /usr/local/cuda-8.0/lib64/libcudnn.so.6 /usr/local/lib/libcudnn.so.6 && sudo ldconfig

$ sudo cp /usr/local/cuda-8.0/lib64/libcudnn.so.6.0.21 /usr/local/lib/libcudnn.so.6.0.21 && sudo ldconfig

若讀者在按照本教程配置 CUDA 9.0 + cuDNN7.0 + TensorFlow-GPU 1.9.0 或其他組合時出現類似問題:

ImportError: libcublas.so.x.0: cannot open shared object file: No such file or directory

可參照上述方法複製相關文件到/usr/local/lib 文件夾下。

參考文獻

[1] https://tensorflow.google.cn/install/install_linux

[2] https://www.tensorflow.org/install/install_linux#common_installation_

problems

下面是福利大放送啦~~~

為方便查閱,筆者整理了上述配置的pdf文檔,下載方式見文末。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 萬言暖語 的精彩文章:

TAG:萬言暖語 |