Linux下安裝TensorFlow等深度學習庫
Linux下安裝TensorFlow等深度學習庫
1. 介紹
主要參考:
[1] Tensorflow官網Tutorials
[2] 極客學院對Tensorflow官網教程的翻譯
官方提供了5種安裝tensorflow的方法:
- Pip install: Install TensorFlow on your machine, possibly upgrading previously installed Python packages. May impact existing Python programs on your machine.
- Virtualenv install: Install TensorFlow in its own directory, not impacting any existing Python programs on your machine.
- Anaconda install: Install TensorFlow in its own environment for those running the Anaconda Python distribution. Does not impact existing Python programs on your machine.
- Docker install: Run TensorFlow in a Docker container isolated from all other programs on your machine.
- Installing from sources: Install TensorFlow by building a pip wheel that you then install using pip.
幾點說明:
1. 由於在使用Tensorflow時,可以直接Python呼叫,所以,這裡決定使用python學習tensorflow
2. 使用python,jupyter notebook是一個不可或缺的工具,所以,本文還將記錄如何在ubuntu下安裝jupyter
3. 這裡主要安裝python3.6版本的相關元件
2. 基於Anaconda的tensorflow安裝
2.1 下載linux版本的Anaconda安裝包
下載地址:https://www.continuum.io/downloads ,如該國外網址訪問不了或者網速太慢,可以訪問清華大學的映象https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
這裡選擇64位Linux的Python 3.6版本
wget https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh
點選下載,下載完成後,得到Anaconda3-5.0.1-linux-x86_64.sh安裝檔案(下載的檔案在系統使用者的Downloads資料夾下,我的系統路徑為/home/tensorflow/Downloads/)
2.2 安裝Anaconda
3.3 安裝tensorflow
-
開啟terminal,輸入如下命令,然後回車
bash /home/tensorflow/Downloads/Anaconda3-5.0.1-Linux-x86_64.sh
這裡的/home/tensorflow/Downloads/
是存放Anaconda
3-5.0.1
-Linux-x86_64.sh
的路徑(這裡的/home/tensorflow為建立Linux系統是索取的系統使用者所在的路徑,tensorflow為系統使用者名稱) -
閱讀license,一步步回車閱讀(出現more時通過回車往下看)
-
輸入yes,表示接受license
-
設定安裝路徑,這裡使用預設安裝路徑,直接輸入回車即可
-
開始自動安裝過程
-
如下圖提示:確認是否將Anaconda的安裝路徑新增到環境變數中,一定要輸入yes,否則新增環境變數會比較麻煩。
關於這裡一定要注意:如果在安裝過程中,該步沒有選擇yes,那麼Anaconda的安裝路徑不會被新增到環境變數中,安裝結束後會出現如下資訊:
Do you wish the installer to prepend the Anaconda2 install location
to PATH in your /home/tingting/.bashrc ? [yes|no]
[no] >>>
You may wish to edit your .bashrc or prepend the Anaconda2 install location:$ export PATH=/home/tingting/anaconda2/bin:$PATH
Thank you for installing Anaconda2!當時也沒有注意這個資訊,沒有管,結果安裝完anaconda後,發現根本不能使用,才注意到這條資訊,原來,Anaconda的bin路徑並沒有被新增到PAHT環境變數中,所以需要在命令列中輸入如下命令:
export PATH=/home/tingting/anaconda2/bin:$PATH
即將anaconda的bin路徑新增到環境變數PATH中 -
安裝完成
這裡可以看到,notebooks和一些python包都被成功安裝了,但對於環境變數的更改,必須要新開啟一個terminal才能生效,否則,相關的指令都不會被認識 -
在配置好環境變數後,開啟新的terminal,輸入conda info命令可以檢視安裝資訊,輸入conda list命令可以查詢安裝有哪些python庫,常用的有python,numpy,scipy等。如果發現有什麼沒有安裝,可以執行conda install ***來安裝(這裡***代表你要安裝的python包的名稱),如果某個包不是最新的,可以執行conda update ***更新到最新版。
-
開啟新的terminal,輸入
Jupyter notebook
,發現jupyter被成功安裝了 -
開啟瀏覽器:http://localhost:8888/tree(可以看到安裝了python 2的kernel)
3. 利用anaconda安裝tensorflow
3.1 建立一個 conda 計算環境
-
Create a conda environment called tensorflow:
conda create -n tensorflow python=3.6
- 1
-
3.2 啟用環境,使用 conda 安裝 TensorFlow
-
Activate the environment and use pip to install TensorFlow inside it.
source activate tensorflow
- 1
-
安裝
-
$ conda install tensorflow-gpu
或
pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0rc0-cp27-none-linux_x86_64.whl
- 1
-
安裝成功後,每次使用 TensorFlow 的時候需要啟用 conda 環境,可以看到,在正常情況下,是anaconda的bin路徑在環境變數中,但啟用conda-tensorflow環境後,環境變數中儲存的是tensorflow下的bin路徑
- 測試是否安裝成功 進入python環境
import tensorflow as tf
hello=tf.constant('hello,Tensorflow')
sess=tf.Session()
print sess.run(hello)
--輸出 hello,Tensorflow表明成功--
- 退出tensorflow環境
source deactivate
安裝其他所需要的庫
$ conda install pillow
$ conda install matplotlib
$ conda install scikit-learn
$ conda install graphviz pydot
移除tf環境
$ conda remove -n tf --all
檢視GPU執行狀況
$ watch -n 0 nvidia-smi
3.4 如何在jupyter中使用tensorflow
(1) 出現了問題
安裝如上方法安裝了jupyter和tensorflow,結果,利用jupyter無法使用tensorflow
也沒有查到特別有針對性的解決這個問題的資料,好像是因為jupyter的安裝路徑和tensorflow的路徑之間的問題,具體的現在還不是很清楚
(2)如何解決?
應該是在conda的tensorflow環境下沒有jupyter,它無法使用之前anaconda安裝的jupyter,那麼,簡單粗暴的方法就是在當前的conda-tensorflow環境下,再安裝一次jupyter:
- 開啟terminal
- 啟用conda tensorflow環境:
source activate tensorflow
- 安裝notebook:
conda install ipython
- 安裝jupyter:
conda install jupyter
- 安裝完成,仍在conda tensorflow的環境下,輸入
jupyter notebook
,開啟http://localhost:8889/tree# import tensorflow
,發現tensorflow可以使用了
參考:http://stackoverflow.com/questions/35771285/using-tensorflow-through-jupyter-python-3
(3)兩個jupyter
- 在正常的ternimal中開啟的是之前在安裝anacodna時安裝的jupyter,在正常的terminal下 檢視jupyter的安裝路徑
which ipyhon
它在anaconda的路徑下的bin資料夾中 - 在conda tensorflow環境下開啟的jupyter是在conda tensorflow環境下新安裝的tensorflow,與上面的jupyter不同
它在conda的env下的tensorflow的bin資料夾下 - 從下圖可以想起地看到,兩個jupyter的安裝路徑完成不同
- 後續如果需要在使用tensorflow時使用其他的庫,也一定要在對應的conda環境下安裝,否則指定的庫找不到。
(4) 缺少模組及安裝
- ImportError: no module named Image, ImportError: no module named PIL
解決:conda install pillow
4. 總結
(1) 下載安裝anaconda,與本文的第2部分同樣目的,只不過通過命令列實現
#安裝anaconda,從https://www.continuum.io下載
mkdir anaconda2 #在個人目錄下建立Aanconda目錄
cd anaconda2 #進入目錄
wget http://repo.continuum.io/archive/Anaconda2-4.0.0-Linux-x86.sh #下載anaconda的安裝包,利用wget工具
chmod +x Anaconda3-2.5.0-Linux-x86_64.sh #更改許可權(增加可執行許可權),使該檔案可被執行,
./Anaconda2-4.0.0-Linux-x86.sh #執行安裝檔案,或者使用bash Anaconda2-4.0.0-Linux-x86.sh
安裝anaconda,從https://www.continuum.io下載
mkdir anaconda2 #在個人目錄下建立Aanconda目錄
cd anaconda2 #進入目錄
wget http://repo.continuum.io/archive/Anaconda2-4.0.0-Linux-x86.sh #下載anaconda的安裝包,利用wget工具
chmod +x Anaconda3-2.5.0-Linux-x86_64.sh #更改許可權(增加可執行許可權),使該檔案可被執行,
./Anaconda2-4.0.0-Linux-x86.sh #執行安裝檔案,或者使用bash Anaconda2-4.0.0-Linux-x86.sh
(2) 在conda下建立環境,之後的所以操作都部署在該環境下
conda create -n tensorflow python=2.7 #建立tensorflow環境
activate conda tensorflow #啟用tensorflow環境
conda install ipython #安裝notebook
conda install jupyter #安裝jupyter
jupyter notebook #啟動jupyter
5.利用Docker安裝tensorflow
利用這種方法可以實現在windows上使用tensorflow!具體步驟如下:
5.1 安裝docker
在windows7下安裝docekr,具體方法見之前的博文:Docker學習系列(一):windows下安裝docker
5.2 建立tensorflow的image
安裝好Docker後,接下來,就可以建立包含tensorflow的image了,有兩種方案
(1) 從dockerhub上pull別人的image
例如:
docker pull tensorflow/tensorflow
docker pull xblaster/tensorflow-jupyter
docker pull satoshun/tensorflow-notebook
(2)自己書寫Dockerfile,然後,在本機編譯dockerfile,生成image。
6.Installing from sources常規方法
以Ubuntu為例:
開始:
安裝NVIDIA Driver
首先檢查你的NVIDIA VGA card model,檢查你的顯示卡型號
$ sudo lshw -numeric -C display
我的電腦上可以看到其中的nvidia顯示卡有這樣一條資訊
product: GM107M [GeForce GTX 850M] [10DE:1391]
根據剛才顯示的資訊內容,到官網上選擇合適的選項,檢查你的顯示卡所適合的驅動版本:
http://www.nvidia.com/Download/index.aspx
我的電腦上的顯示卡所適合的版本是375.66。
同樣,你還可以在終端上輸入命令來看所需的版本:
$ ubuntu-drivers devices
我的電腦上出現有nividia-375字樣,跟在官網上查的一樣。所以我們可以在終端上使用apt-get來安裝它,安裝前建議先update一下源,或者更換一個速度快的源。
$ sudo apt-get install nvidia-375
其中,nvidia-375這個需要根據自己顯示卡的型號所支援的驅動版本來修改後面的數字。
裝完之後,你可以在dashboard上搜索nvidia,看到有 NVIDIA X Server Settings的東西,那麼驅動就安裝成功了,如果沒有,那就重啟一次電腦看看。
安裝Cuda 8:
首先是去官網下載 cuda toolkit 8.0 ,選擇你電腦對應的選項,下載檔案一定要選擇runfile。
https://developer.nvidia.com/cuda-downloads
下載完成之後,執行
$ sudo sh cuda_8.0.61_375.26_linux.run
就進入安裝了,開始的一大堆文字都是End User License Agreement,可以CTRL +C 跳過,然後輸入accept表示接受協議
接下來就是安裝的互動介面,根據提示一步一步進行就好。
在開始的
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 367.48?
選擇n,因為已經安裝驅動了。
配置Cuda環境變數:
在 ~/.bashrc 的最後新增
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda
其中,
前 2 個(PATH, LD_LIBRARY_PATH) 是 CUDA 官網安裝文件中建議的變數。
第 3 個(CUDA_HOME)是 tensorflow-GPU 版本要求的變數。
配置完環境變數之後,一定要更新一下,否則不能立即生效。也可以通過重啟電腦使得環境變數生效。
$ source ~/.bashrc
如果要卸裝:
To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-9.0/bin
然後
apt purge nvidia*
安裝深度學習庫cuDNN
首先到官網下載cuDNN5.1 ( https://developer.nvidia.com/cudnn ),需要註冊為開發者才能下載,而且直接下載可能速度非常慢,如果有別人已經下載過的,應該是可以直接拿過來用,不過前提是版本是5.1的。
檔名為:cudnn-8.0-linux-x64-v5.1.tgz
然後解壓
$ tar xvzf cudnn-8.0-linux-x64-v5.1.tgz
然後將庫和標頭檔案copy到cuda目錄(一定是你自己安裝的目錄如/usr/local/cuda-8.0),不過正確安裝的話,ubuntu一般就會有軟連結/usr/local/cuda -> /usr/local/cuda-8.0/
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp -a cuda/lib64/libcudnn* /usr/local/cuda/lib64
接下來就是修改檔案訪問許可權:
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
最後一步:安裝TensorFlow的GPU版本
終端命令列輸入
$ sudo pip3 install tensorflow-gpu
對於GPU版本,可以使用下面的程式碼來測試TF是否可以使用GPU來加速計算,如果輸出False,那就是不能使用,否則是可以使用,會輸出GPU資訊。
- >>> tf.test.is_gpu_available()
- 2017-06-06 05:36:41.972817: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
- 2017-06-06 05:36:41.972852: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
- 2017-06-06 05:36:41.972863: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
- 2017-06-06 05:36:41.972871: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
- 2017-06-06 05:36:41.972879: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
- 2017-06-06 05:36:42.306655: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:901] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
- 2017-06-06 05:36:42.306887: I tensorflow/core/common_runtime/gpu/gpu_device.cc:887] Found device 0 withproperties:
- name: GeForce GTX 850M
- major: 5 minor: 0 memoryClockRate (GHz) 0.9015
- pciBusID 0000:01:00.0
- Total memory: 1.96GiB
- Free memory: 1.44GiB
- 2017-06-06 05:36:42.306905: I tensorflow/core/common_runtime/gpu/gpu_device.cc:908] DMA: 0
- 2017-06-06 05:36:42.306911: I tensorflow/core/common_runtime/gpu/gpu_device.cc:918] 0: Y
- 2017-06-06 05:36:42.306927: I tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 850M, pci bus id: 0000:01:00.0)
- True
【轉載】:https://blog.csdn.net/love666666shen/article/details/75675185
https://blog.csdn.net/weixin_39954229/article/details/79961172
https://www.jianshu.com/p/0c4c195b02fc
https://www.cnblogs.com/mypath/articles/7877493.html
https://blog.csdn.net/taoqick/article/details/79171199