TensorFlow開發環境搭建(Ubuntu16.04+GPU+TensorFlow源碼編譯)

1 安裝選擇

1.1 平台

目前TensorFlow已支持Mac、Ubuntu和Windows三個主流平台(64位平台),

1.2 GPU vs CPU

在安裝時可以選擇安裝版本是否支持GPU,

1.3 二進位安裝 vs 源碼安裝

同時,安裝時可以考慮採用二進位安裝,還是源碼安裝,

1.4 二進位安裝選擇

二進位安裝可以有多種選擇,

1.5 實際使用選擇

手頭上有兩台電腦,

  • MacBook Pro (Retina, 13-inch, Early 2015)

    處理器:2.7 GHz Intel Core i5

    內存:8GB 1867MHz DDR3

    顯卡:Intel Iris Graphics 6100 1536MB
  • 攀升兄弟組裝台式機

    處理器:英特爾 Core i7-6700 @3.40GHz 四核

    主板:華碩 B150M-ET M2 SERIES

    內存:8G(威剛DDR4 2801MHz)

    硬碟:三星 MZ7TE256HMHP-00000(256GB/固態硬碟)

    顯卡:Nvidia GeForce GTX 950(2GB)

其中,

MacBook Pro採用基於Anaconda的二進位安裝方式(僅支持CPU)。Anaconda是一個集成平台,包含大多數機器學習的常用工具,

  • NumPy:科學運算包
  • SciPy:在NumPy的基礎上構建,功能更加強大的科學計算包
  • Matplotlib:類似Matlab的繪圖工具包
  • Scikit-learn:經典機器學習工具包
  • Pandas:數據處理和分析工具包(可用於數據讀寫、清洗、填充和分析等場景)

    採用Anaconda安裝方案,一方面MacBook Pro的開發環境很容易搭建(幾句命令即可完成),另一方面,基於Anaconda的環境,也可以方便驗證簡單的機器學習演算法。

對於台式機則採用了Ubuntu+GPU+TensorFlow源碼編譯的方式,進行TensorFlow環境搭建,下面我們著重介紹下這種安裝方式。

2 Ubuntu16.04+TensorFlow(GPU)源碼編譯

2.1 Ubuntu系統安裝

目前,大多數計算機,包括台式機已沒有了光碟機,同時,Ubuntu的系統安裝盤也不易獲得。針對這種情況,我們可以採用U盤來進行安裝。具體步驟可以參考:《Ubuntu 16.04 U盤安裝圖文教程》

2.2 禁用UEFI安全啟動

對於華碩 B150M-ET主板,UEFI默認是開啟的。而UEFI開啟會導致第三方驅動安裝失敗(如顯卡驅動,這是源碼編譯安裝GPU支持的TensorFlow,遇到的第一個坑)。具體步驟可以參考:《華碩主板禁用UEFI安全啟動》

2.3 安裝NVIDIA驅動

2.3.1 安裝方式

英偉達的顯卡驅動有三種方式:

  • apt-get+系統設置安裝
  • 安裝CUDA時順便安裝
  • 官方下載最新驅動並安裝

    參考:《Ubuntu 16.04安裝NVIDIA驅動》

2.3.2 安裝步驟

本文採用第一種方案:

sudo apt-get install nvidia-367

然後進入:System Settings->Software&Updates->Additional Drivers->,選擇NVIDIA Corporation[Using NVIDIA binary driver]

2.3.3 驗證測試

nvidia-smi #若列出GPU的信息列表,表示驅動安裝成功nvidia-settings #若彈出設置對話框,亦表示驅動安裝成功

2.4 安裝CUDA

CUDA(Compute Unified Device Architecture),是顯卡廠商NVIDIA推出的運算平台。可以理解成基於GPU並行計算的應用層介面。

CUDA8.0下載地址

安裝Cuda的時候,需要關閉X服務。

sudo service lightdm stop

這時,系統會出現黑屏。此時,同時按住[CTRL + ALT + F1]三個鍵進入命令行模式(如果不能進入命令行模式,可以參考《alt+ctrl+F1黑屏 ,解決方案》),

然後輸入[賬號],[密碼]後登陸。

在CUDA的下載目錄運行,

sudo sh cuda_xxx.run

需要注意的是,在詢問是否安裝「NVIDIA Accelerated Graphics Driver」可以選擇「是」,

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 361.62?(y)es/(n)o/(q)uit: y

但在後續出現詢問是否安裝「X configuration」時,則需要選擇「否」,否則之前安裝的顯卡驅動就白安裝了。

CUDA安裝結束後,則可以恢復到圖形界面模式,

sudo service lightdm start

到這裡,CUDA的安裝還不算結束,需要將CUDA相關的內容添加到系統環境變數中。安裝過程中Summary提示,

Please make sure that– PATH includes /usr/local/cuda-8.0/bin– LD_LIBRARY_PATH includes /usr/local/cuda-8.0/lib64, or, add /usr/local/cuda-8.0/lib64 to /etc/ld.so.conf and run ldconfig as root

CUDA相關的環境變數可以放在~/.bashrc中,

vi ~/.bash_profile

在其中,增加如下兩行,

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

2.5 安裝cuDNN

cuDNN(CUDA Deep Neural Network)相比標準的cuda,它在一些常用的神經網路操作上進行了性能的優化,比如卷積,pooling,歸一化,以及激活層等等。

下載地址:developer.nvidia.com/rd

下載cuDNN後進行解壓,並執行如下命令:

sudo cp cuda/include/cudnn.h /usr/local/cuda-8.0/includesudo cp -d cuda/lib64/libcudnn* /usr/local/cuda-8.0/lib64sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda-8.0/lib64/libcudnn*

2.6 gcc降低版本

網上說cuda8.0不支持5.0以上的編譯器,因此需要降級,把編譯器版本降到4.9,但我看了CUDA8.0的安裝手冊《NVIDIA CUDA INSTALLATION GUIDE FOR

LINUX》,並沒有發現這一條,

在實際使用中,還是將GCC做了降級(PS,在安裝時可以先不降級,看看是否會出問題),GCC降級方法如下,

sudo apt-get install g++-4.9sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30sudo update-alternatives --set cc /usr/bin/gccsudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30sudo update-alternatives --set c++ /usr/bin/g++

2.7 安裝Bazel

Bazel是一個構建工具,即一個可以運行編譯和測試來組裝軟體的工具,跟Make、Ant、Gradle、Buck、Pants和Maven一樣。TensorFlow的編譯是基於Bazel完成的。

Bazel官方地址:docs.bazel.build/versio

2.7.1 安裝準備

2.7.2 安裝

Bazel可以通過apt-get和下載安裝兩種方式完成,本文中,採用下載安裝的方式實現,

chmod +x PATH_TO_INSTALL.SH ./PATH_TO_INSTALL.SH --user

2.8 第三方庫安裝

sudo apt-get install python-numpy swig python-dev python-wheelsudo apt-get install libcupti-devsudo apt-get install git

2.9 TensorFlow源碼編譯

2.9.1 下載

git clone https://github.com/tensorflow/tensorflow

2.9.2 編譯配置

cd ~/tensorflow./configure

2.9.3 編譯安裝

bazel build -c opt //tensorflow/tools/pip_package:build_pip_packagebazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_packagebazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkgsudo pip install /tmp/tensorflow_pkg/tensorflow-0.10.0-cp2-none-any.whl

至此,便完成了支持GPU的TensorFlow源碼編譯。

2.10 環境測試

可以通過如下代碼進行測試,

# Pythonimport tensorflow as tfhello = tf.constant(Hello, TensorFlow!)sess = tf.Session()print(sess.run(hello))

正常測試輸出,

Hello, TensorFlow!

3 資料參考

《Ubuntu 16.04 U盤安裝圖文教程》

《華碩主板禁用UEFI安全啟動》

《Ubuntu 16.04安裝NVIDIA驅動》

《alt+ctrl+F1黑屏 ,解決方案》

《Ubuntu16.04 下安裝GPU版TensorFlow(包括Cuda和Cudnn)》

《ubuntu16.04下安裝TensorFlow(GPU加速)》

推薦閱讀:

EM演算法總結
機器學習最難區分的4個概念,一文釐清!
Hulu機器學習問題與解答系列 | 十九:主題模型
機器學習-變數離散之MDLP-20180217
FM/FFM-論文筆記

TAG:機器學習 | 深度學習DeepLearning | TensorFlow |