天天看點

《人工智能-TensorFlow開發筆記》第2章 TensorFlow環境搭建 - A

2.1 Linux安裝TensorFlow

2.1.1基于Pip的安裝

2.1.1.1Pip安裝

Pip 是一個 Python 的軟體包安裝與管理工具,在安裝 TensorFlow 過程中要涉及安裝或更新的包詳見清單

​​https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/pip_package/setup.py​​

首先安裝 pip (或 Python3 的 pip3 ):

 檢視系統所安裝的python版本

$python –V(版本檢視)

《人工智能-TensorFlow開發筆記》第2章 TensorFlow環境搭建 - A

 安裝python對應版本的pip和依賴包

若python版本為2.7,則輸入如下指令:

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

若python版本為3.x,則輸入如下指令:

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

 更新pip版本

在裝tensorflow之前,不管是不是最新的pip版本,都要更新一下,具體指令如下:

python 2.7版本:

s

u

d

o

p

i

p

i

n

s

t

a

l

l

u

p

g

r

a

d

e

p

i

p

p

y

t

h

o

n

3.

x

sudo pip install --upgrade pip python 3.x版本:

sudopipinstall−−upgradepippython3.x版本:sudo pip3 install --upgrade pip

2.1.1.2安裝 TensorFlow

 CPU安裝

# Ubuntu/Linux 64-bit, CPU only, Python 2.7:

$ sudo pip install --upgrade ​​https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl​​

或者

s

u

d

o

p

i

p

i

n

s

t

a

l

l

t

e

n

s

o

r

f

l

o

w

sudo pip install tensorflow 或者

sudopipinstalltensorflow或者sudo pip install --upgrade TF_PYTHON_URL

# Ubuntu/Linux 64-bit, CPU only, Python 3.4:

$ sudo pip3 install --upgrade ​​https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp34-cp34m-linux_x86_64.whl​​

或者

s

u

d

o

p

i

p

3

i

n

s

t

a

l

l

t

e

n

s

o

r

f

l

o

w

sudo pip3 install tensorflow 或者

sudopip3installtensorflow或者sudo pip3 install --upgrade TF_PYTHON_URL

其中,TF_PYTHON_URL為TensrorFlow的python包,不通的作業系統、python版本、GPU支援狀況需要選擇不同的包,例如OS為Linux,python版本為3.4,僅支援CPU的情況下,TF_PYTHON_URL應當替換為

​​https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp34-cp34m-linux_x86_64.whl​​

 GPU安裝

# Ubuntu/Linux 64-bit, GPU enabled, Python 2.7. Requires CUDA toolkit 7.5 and CuDNN v4

# For other versions, see “Install from sources” below.

$ sudo pip install --upgrade ​​https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl​​

或者$sudo pip install tensorflow-gpu

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.4. Requires CUDA toolkit 7.5 and CuDNN v4

# For other versions, see “Install from sources” below.

$ sudo pip3 install --upgrade ​​https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.8.0-cp34-cp34m-linux_x86_64.whl​​

或者$sudo pip3 install tensorflow-gpu/

【注1】筆者環境Ubuntu16.04+Python3+CPU,安裝過程如下所示。(安裝工程比較慢,需要耐心等待…)

《人工智能-TensorFlow開發筆記》第2章 TensorFlow環境搭建 - A

成功安裝如下所示。

《人工智能-TensorFlow開發筆記》第2章 TensorFlow環境搭建 - A

【注2】如果之前安裝過 TensorFlow < 0.7.1 的版本,應該先使用 pip uninstall 解除安裝 TensorFlow 和 protobuf ,保證擷取的是一個最新 protobuf 依賴下的安裝包。

【注3】在Ubuntu16.04系統中,預設使用的還Python2.7,,關于Python版本的切換,請參考如下文章 ​

2.1.1.3 TensorFlow驗證

驗證tensorflow是否安裝成功,啟動終端,建立一個Python腳本。

$vi ​​test.py​​

然後輸入以下代碼,并儲存。

import tensorflow as tf
a=tf.constant([1.0,2.0,3.0],shape=[3],name='a')
b=tf.constant([1.0,2.0,3.0],shape=[3],name='b')
c=a+b
sess=tf.Session(config=tf.ConfigProto(log_device_placement=True))
print(sess.run(c))      

執行腳本。

$python ​​test.py​​

如果輸出以下内容則代表安裝成功。

《人工智能-TensorFlow開發筆記》第2章 TensorFlow環境搭建 - A

2.1.2基于 Docker 的安裝

我們也支援通過 Docker (​​https://www.docker.com/)運作​​ TensorFlow. 該方式的優點是不用操心軟體依賴問題。

首先, 安裝 Docker(​​https://docs.docker.com/install/#server)。​​ 一旦 Docker 已經啟動運作, 可以通過指令啟動一個容器:

$ docker run -it ​​b.gcr.io/tensorflow/tensorflow​​

該指令将啟動一個已經安裝好 TensorFlow 及相關依賴的容器.

其它鏡像

預設的 Docker 鏡像隻包含啟動和運作 TensorFlow 所需依賴庫的一個最小集. 我們額外提供了 下面的容器, 該容器同樣可以通過上述 docker run 指令安裝:

​​b.gcr.io/tensorflow/tensorflow-full:​​ 鏡像中的 TensorFlow 是從源代碼完整安裝的, 包含了編譯和運作 TensorFlow 所需的全部工具. 在該鏡像上, 可以直接使用源代碼進行實驗, 而不需要再安裝上述的任何依賴。

2.1.3基于 VirtualEnv 的安裝

我們推薦使用 virtualenv 建立一個隔離的容器, 來安裝 TensorFlow. 這是可選的, 但是這樣做能使排查安裝問題變得更容易。

首先, 安裝所有必備工具:

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

接下來, 建立一個全新的 virtualenv 環境. 為了将環境建在 ~/tensorflow 目錄下, 執行:

$ virtualenv --system-site-packages ~/tensorflow

$ cd ~/tensorflow

然後, 激活 virtualenv:

$ source bin/activate # 如果使用 bash

$ source bin/activate.csh # 如果使用 csh

(tensorflow)$ # 終端提示符應該發生變化

在 virtualenv 内, 安裝 TensorFlow:

(tensorflow) $ pip install --upgrade <$url_to_binary.whl>      

接下來, 使用類似指令運作 TensorFlow 程式:

(tensorflow)$ cd tensorflow/models/image/mnist
(tensorflow)$ python convolutional.py
# 當使用完 TensorFlow
(tensorflow)$ deactivate  # 停用 virtualenv
$  # 你的指令提示符會恢複原樣      

2.1.4基于 Anaconda 的安裝

Anaconda (​​https://www.anaconda.com/what-is-anaconda/)是一個內建許多第三方科學計算庫的​​​ Python 科學計算環境(​​https://conda.io/docs/user-guide/tasks/manage-environments.html),Anaconda​​ 使用 conda 作為自己的包管理工具,同時具有自己的計算環境,類似 Virtualenv.

和 Virtualenv 一樣,不同 Python 工程需要的依賴包,conda 将他們存儲在不同的地方。 TensorFlow 上安裝的 Anaconda 不會對之前安裝的 Python 包進行覆寫。

1.安裝 Anaconda :

參考 Anaconda 的下載下傳頁面的指導(​​https://www.anaconda.com/download/)​​

2.建立一個 conda 計算環境

建立一個 conda 計算環境名字叫tensorflow:

# Python 2.7

$ conda create -n tensorflow python=2.7

# Python 3.4

$ conda create -n tensorflow python=3.4

3.激活環境,使用 conda 安裝 TensorFlow

激活tensorflow環境,然後使用其中的 pip 安裝 TensorFlow. 當使用easy_install使用–ignore-installed标記防止錯誤的産生。

$ source activate tensorflow
(tensorflow)$  # Your prompt should change
# Ubuntu/Linux 64-bit, CPU only, Python 2.7:
(tensorflow)$ pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0rc0-cp27-none-linux_x86_64.whl
# Ubuntu/Linux 64-bit, GPU enabled, Python 2.7. Requires CUDA toolkit 7.5 and CuDNN v4.
# For other versions, see "Install from sources" below.
(tensorflow)$ pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.8.0rc0-cp27-none-linux_x86_64.whl      

對于 Python 3.x :

$ source activate tensorflow
(tensorflow)$  # Your prompt should change
# Ubuntu/Linux 64-bit, CPU only, Python 3.4:
(tensorflow)$ pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0rc0-cp34-cp34m-linux_x86_64.whl
# Ubuntu/Linux 64-bit, GPU enabled, Python 3.4. Requires CUDA toolkit 7.5 and CuDNN v4.
# For other versions, see "Install from sources" below.
(tensorflow)$ pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.8.0rc0-cp34-cp34m-linux_x86_64.whl      

conda 環境激活後,你可以測試。

當你不用 TensorFlow 的時候,關閉環境:

(tensorflow)$ source deactivate
$  # Your prompt should change back      

再次使用的時候再激活 :

$ source activate tensorflow
(tensorflow)$  # Your prompt should change.
# Run Python programs that use TensorFlow.
...
# When you are done using TensorFlow, deactivate the environment.
(tensorflow)$ source deactivate      

4.測試

 (可選) 啟用 GPU 支援

如果你使用 pip 二進制包安裝了開啟 GPU 支援的 TensorFlow, 你必須確定 系統裡安裝了正确的 CUDA sdk 和 CUDNN 版本. 請參間 CUDA 安裝教程。

你還需要設定 LD_LIBRARY_PATH 和 CUDA_HOME 環境變量. 可以考慮将下面的指令 添加到 ~/.bash_profile 檔案中, 這樣每次登陸後自動生效. 注意, 下面的指令 假定 CUDA 安裝目錄為 /usr/local/cuda:

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

export CUDA_HOME=/usr/local/cuda

 運作 TensorFlow

打開一個 python 終端:

$ python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print sess.run(hello)
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print sess.run(a+b)
42
>>>      

2.1.5源碼安裝

1.克隆 TensorFlow 倉庫

$ git clone --recurse-submodules https://github.com/tensorflow/tensorflow      

【注】–recurse-submodules 參數是必須得, 用于擷取 TesorFlow 依賴的 protobuf 庫.

2.安裝 Bazel

首先依照教程(​​https://docs.bazel.build/versions/master/install.html)安裝​​ Bazel 的依賴. 然後在 連結(​​https://github.com/bazelbuild/bazel/releases)中下載下傳适合你的作業系統的最新穩定版​​, 最後按照下面腳本執行:

$ chmod +x PATH_TO_INSTALL.SH

$ ./PATH_TO_INSTALL.SH --user

注意把 PATH_TO_INSTALL.SH 替換為你下載下傳的安裝包的檔案路徑.

将執行路徑 output/bazel 添加到 $PATH 環境變量中.

3.安裝其他依賴

# For Python 2.7:

$ sudo apt-get install python-numpy swig python-dev python-wheel

# For Python 3.x

$ sudo apt-get install python3-numpy swig python3-dev python3-wheel

4.安裝 CUDA (在 Linux 上開啟 GPU 支援)(可選)

為了編譯并運作能夠使用 GPU 的 TensorFlow, 需要先安裝 NVIDIA 提供的 Cuda Toolkit 7.0 和 CUDNN 6.5 V2.

TensorFlow 的 GPU 特性隻支援 NVidia Compute Capability >= 3.5 的顯示卡. 被支援的顯示卡 包括但不限于:

NVidia Titan

NVidia Titan X

NVidia K20

NVidia K40

 下載下傳并安裝 Cuda Toolkit 7.0

下載下傳位址(​​https://developer.nvidia.com/cuda-toolkit-70)​​

将工具安裝到諸如 /usr/local/cuda 之類的路徑.

 下載下傳并安裝 CUDNN Toolkit 6.5

下載下傳位址(​​https://developer.nvidia.com/rdp/cudnn-archive)​​

解壓并拷貝 CUDNN 檔案到 Cuda Toolkit 7.0 安裝路徑下. 假設 Cuda Toolkit 7.0 安裝 在 /usr/local/cuda, 執行以下指令:

tar xvzf cudnn-6.5-linux-x64-v2.tgz

sudo cp cudnn-6.5-linux-x64-v2/cudnn.h /usr/local/cuda/include

sudo cp cudnn-6.5-linux-x64-v2/libcudnn* /usr/local/cuda/lib64

 配置 TensorFlow 的 Cuda 選項

從源碼樹的根路徑執行:

$ ./configure

Do you wish to bulid TensorFlow with GPU support? [y/n] y

GPU support will be enabled for TensorFlow

Please specify the location where CUDA 7.0 toolkit is installed. Refer to

​​README.md​​ for more details. [default is: /usr/local/cuda]: /usr/local/cuda

Please specify the location where CUDNN 6.5 V2 library is installed. Refer to

​​README.md​​ for more details. [default is: /usr/local/cuda]: /usr/local/cuda

Setting up Cuda include

Setting up Cuda lib64

Setting up Cuda bin

Setting up Cuda nvvm

Configuration finished

這些配置将建立到系統 Cuda 庫的符号連結. 每當 Cuda 庫的路徑發生變更時, 必須重新執行上述 步驟, 否則無法調用 bazel 編譯指令.

 編譯目标程式, 開啟 GPU 支援

從源碼樹的根路徑執行:

$ bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer

$ bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu

# 大量的輸出資訊. 這個例子用 GPU 疊代計算一個 2x2 矩陣的主特征值 (major eigenvalue).

# 最後幾行輸出和下面的資訊類似.

000009/000005 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]

000006/000001 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]

000009/000009 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]

注意, GPU 支援需通過編譯選項 “–config=cuda” 開啟.

已知問題

盡管可以在同一個源碼樹下編譯開啟 Cuda 支援和禁用 Cuda 支援的版本, 我們還是推薦在 在切換這兩種不同的編譯配置時, 使用 “bazel clean” 清理環境.

在執行 bazel 編譯前必須先運作 configure, 否則編譯會失敗并提示錯誤資訊. 未來, 我們可能考慮将 configure 步驟包含在編譯過程中, 以簡化整個過程, 前提是 bazel 能夠提供新的特性支援這樣。

【注】常見問題

1.GPU 相關問題

如果在嘗試運作一個 TensorFlow 程式時出現以下錯誤:

ImportError: libcudart.so.7.0: cannot open shared object file: No such file or directory

請确認你正确安裝了 GPU 支援, 參見 相關章節.

2. Linux安裝問題

如果出現錯誤:

...
 "__add__", "__radd__",
             ^
SyntaxError: invalid syntax      

解決方案: 确認正在使用的 Python 版本為 Python 2.7.

參考位址:

​​英文原文​​

​​中文翻譯​​