因為最近Deep Learning十分熱門, 裝一下TensorFlow學習一下. 本文主要介紹安裝流程, 將自己遇到的問題說明出來, 並記錄自己如何處理, 原理方面並沒有能力解釋. 由於本人之前從來沒有用過Linux, 本文章恐有初級錯誤, 望見諒, 謝謝. (本文寫於2017年3月17日)
為了能夠利用GPU(NVIDIA GTX1080)運行TensorFlow, 根據調查需要按順序安裝以下內容:
Ubuntu, NVIDIA驅動, CUDA, cudnn, TensorFlow
安裝Ubuntu16.04
Ubuntu16.04 可以通過官網下載, 並制作成U盤安裝. 為了更方便的驅動顯卡,直接安裝Linux, 並不安裝雙系統或虛擬機. 安裝完畢后, 由於Ubuntu源在國外, 為了更效率得更新, 采用中科大的鏡像源. 具體操作為按Ctrl+Alt+T打開命令行, 然后輸入:
sudo gedit /etc/apt/sources.list
第一次以管理員運行, 需要輸入管理員密碼. 然后將內容替換為:
# 默認注釋了源碼鏡像以提高 apt update 速度,如有需要可自行取消注釋 deb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse # deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial main main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse # deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse # deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse # deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse # 預發布軟件源,不建議啟用 # deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse # deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
然后更新源和安裝包:
sudo apt-get update sudo apt-get upgrade
*安裝界面選擇取消選擇從網絡下載. 即便如此, 在之后的Retriving File中, 也有可能遇到進度條卡死的情況(我是校園網, 需要網絡登錄), 處理方法是拔掉網線, 待安裝完畢后再將網線插回.
安裝NVIDIA378.13
安裝NVIDIA最新顯卡驅動, 從官網輸入自己的顯卡型號, 點擊search, 提示下載顯卡驅動為375.39(Release 2017.2.14), 然而在輸入自己顯卡型號的頁面, 選擇下方的"Beta and Older Drivers"的連接, 可以選擇到378.13. 由於我在用375.39的時候, 之后通過Source方式安裝TensorFlow中遇到問題(這里可以先不用管), 搜索得到推薦使用378的型號, 改用378.13的驅動. 將該文件移動到Home目錄中, 改名為"NVIDIA.run"
具體安裝方法為: Ctrl+Alt+F1, 進入命令行頁面, 輸入用戶名和密碼登錄, 首先關閉X Server(我理解是圖形界面):
sudo /etc/init.d/lightdm stop
然后運行NVIDIA.run, 進行安裝:
sudo sh NVIDIA.run # 注意此時文件已在Home目錄下
安裝中, 會遇到"The distribution-provided pre-instrall script failed", 可以無視, 繼續安裝. 但會出現關於Neuveau的問題, 好在NVIDIA會幫你把Neuveau給加到blacklist中, 只需要同意這么做就好, 但此次安裝會失敗, 退出, 這時需要輸入:
sudo update-initramfs -u
然后鍵入reboot, 重啟計算機. 此時的桌面分辨率會降低, 按Ctrl+Alt+F1進入命令行, 管理員登入, 關閉X Server, 然后安裝NVIDIA驅動, 過程中會說NVIDIA會把其他X Server給遮蔽掉(大概這么個意思?), 同意即可, 然后便順利安裝. 之后reboot重啟即可.
* 如果安裝完畢后, 在登錄界面循環登錄, 即輸入密碼, 又退回的話, 關閉掉主板的Secret Boot即可.
安裝CUDA8.0
官網選擇Linux-x86_64-Ubuntu-16.04-Runfile(local), 然后將文件重命名CUDA.run並移動到Home根目錄中, 按Ctrl+Alt+T打開命令行, 運行:
sudo sh CUDA.run
一路空格搞到底部, 鍵入accept同意安裝, 之中有些地方需要選擇, 除了在詢問是否安裝:NVIDIA驅動375.xx選否(已經安裝了378.13), 其他的都同意並使用默認路徑, 即可以完成安裝. 最后加入環境變量:
export PATH="$PATH:/usr/local/cuda-8.0/bin" export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64"
再通過以下命令讓環境變量生效:
source ~/.bashrc
* 如果在安裝CUDA時遇到空間不足的問題, 可以在運行CUDA.run時加入:
sudo sh CUDA.run --tmpdir=/opt/temp/
我個人沒有遇到這個問題, 同時如果加入后面的代碼, 反而會無法運行.
安裝cudnn5.1
下載好的壓縮包重命名為cudnn.tgz並移動到Home根目錄中, 然后運行命令解壓:
tar -zxvf cudnn.tgz
會得到五個文件, 將文件拷貝到對應的CUDA目錄下即可:
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 sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
安裝TensorFlow
根據官網, Ubuntu上可以有5種方式, 分別是利用: Virtualenv, "native" pip, Docker, Anaconda, 以及從Source安裝. 由於我在通過Source和Virtualenv中最后一步都遇到問題, 使用Anaconda成功安裝.
1. 安裝Anaconda, 具體可參見Anaconda官網
2. 創建conda環境, 用命令:
conda create -n tensorflow # 若沒有conda命令, 則需要export PATH="$PATH:~/anaconda2/bin"加入新的PATH
激活conda環境, 此時您的命令行前多了(tensorflow):
這里是你關於您計算機的名字 $ source activate tensorflow
(tensorflow) 一些關於您計算機的名字 $
安裝TensorFlow在conda環境中, 最后的連接是TensorFlow Python Package, 根據需要來選擇, 由於我使用GPU, Linux系統, Python2.7, 使用如下命令
(tensorflow)一些關於您計算機的名字$ pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.1-cp27-none-linux_x86_64.whl
安裝完畢后, 嘗試運行
(tensorflow)一些關於您計算機的名字$ python >>> import tensorflow as tf
如果可以運行, 恭喜安裝成功. 之后可以通過如下命令來退出conda環境
(tensorflow)一些關於您計算機的名字$ source deactivate tensorflow
* 如遇到問題類似 ImportError: libcudart.so.Version: cannot open shared object file, 可以通過下面命令查看一下自己的環境變量, PATH和LD_LIBRARY_PATH是否都包含全了
export
我最終的PATH包含如下路徑:
declare -x PATH="/home/你的用戶名/anaconda2/envs/tensorflow/bin:/home/你的用戶名/anaconda2/bin:/usr/local/cuda-8.0/bin:usr/local/cuda/bin:(一些其他的路徑)"
如果有缺少的可以嘗試使用export PATH="$PATH:缺少的路徑"補充, 記得最后source ~/.bashrc
(事實上我在用Source和Virtualenv遇到就是這個問題, 可惜當時並不知道怎么解決)
Ref:
https://www.tensorflow.org/install/ (TensorFlow官方教程, 非常詳細有用)
http://blog.csdn.net/silangquan/article/details/9473613 (關於X Server的)
http://askubuntu.com/questions/112302/how-do-i-disable-the-nouveau-kernel-driver?answertab=oldest#tab-top (關於 Neuveau的)
http://www.nvidia.com/download/driverResults.aspx/114708/en-us (關於安裝NVIDA驅動時出現Blinding kernel module的)
http://www.rodsbooks.com/efi-bootloaders/secureboot.html#disable (關於登錄界面循環卡死的)
http://stackoverflow.com/questions/42013316/after-building-tensorflow-from-source-seeing-libcudart-so-and-libcudnn-errors (關於ImportError: libcudart.so.8.0: cannot open shared object file: No such file or directory)
http://stackoverflow.com/questions/36159194/tensorflow-libcudart-so-7-5-cannot-open-shared-object-file-no-such-file-or-di (關於ImportError: libcudart.so.8.0: cannot open shared object file: No such file or directory)
最后, 特別感謝52nlp, 其中兩篇文章介紹從Ubuntu安裝到最后運行TensorFlow, 對我的幫助很大, 我的安裝方式也是基於這兩篇文章, 謝謝.
深度學習主機環境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0
深度學習主機環境配置: Ubuntu16.04+GeForce GTX 1080+TensorFlow