本指南介紹了如何通過源代碼編譯安裝Tesnorflow。請注意,我們已經為Linux,Mac和Windows係統提供了經充分測試並預編譯好的TensorFlow二進製文件。另外還有預編譯的TensorFlowDocker映像。所以,不要自己構建一個TensorFlow二進製文件,除非你樂於從源代碼構建,並願意處理一些未知的問題。
本指南介紹如何在以下操作係統上構建TensorFlow:
- Ubuntu(LINUX)
- Mac OS X
目前沒有正式支持在Windows上構建TensorFlow;但是,如果您不介意使用高度實驗性的Bazel在Windows上或TensorFlow CMake構建,可以自己嘗試在Windows上構建TensorFlow。
確定安裝哪個TensorFlow
您必須選擇以下類型的TensorFlow來構建和安裝:
- TensorFlow僅支持CPU。如果您的係統沒有NVIDIA®GPU,請構建並安裝此版本。請注意,此版本的TensorFlow通常更容易構建和安裝,因此即使您有NVIDIA GPU,也建議首先構建和安裝此版本。
-
TensorFlow支持GPU。 TensorFlow程序通常在GPU上的運行速度明顯高於CPU。因此,如果您的係統具有NVIDIA GPU,並且您需要運行性能敏感的應用程序,可以安裝此版本。除了NVIDIA GPU本身,您的係統還必須滿足以下文檔描述的NVIDIA軟件要求:
- 在Mac OS上安裝TensorFlow
克隆TensorFlow存儲庫
從克隆TensorFlow存儲庫開始構建TensorFlow。
要克隆最新的TensorFlow存儲庫,執行以下命令:
$ git clone https://github.com/tensorflow/tensorflow
前麵的git clone
命令創建一個名為tensorflow
的子目錄。克隆後,您可以選擇構建一個具體分支(如發行版分支),命令如下:
$ cd tensorflow $ git checkout Branch # where Branch is the desired branch
例如,要使用r1.0
發行版而不是主版本,執行以下命令:
$ git checkout r1.0
為Linux準備環境
在Linux上構建TensorFlow之前,請在係統上安裝以下構建工具:
- bazel
- TensorFlow Python依賴項
- 可選地,NVIDIA軟件包,用於支持TensorFlow GPU。
安裝Bazel
如果係統上沒有安裝bazel,請按照以下步驟進行安裝見文檔。
安裝TensorFlow Python依賴項
要安裝TensorFlow,您必須安裝以下軟件包:
numpy
,這是TensorFlow需要的數字處理包。dev
,它可以添加對Python的擴展。pip
,這使您能夠安裝和管理某些Python包。wheel
,它使您能夠以wheel(.whl)格式管理Python壓縮包。
要為Python 2.7安裝這些軟件包,執行以下命令:
$ sudo apt-get install python-numpy python-dev python-pip python-wheel
要為Python 3.n安裝這些軟件包,執行以下命令:
$ sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel
可選:安裝TensorFlow GPU版本的要求
如果您正在構建沒有GPU支持的TensorFlow,請跳過本節。
以下NVIDIA硬件必須安裝在您的係統上:
- 具有CUDA Compute Capability 3.0或更高版本的GPU卡。見NVIDIA文檔列出的所支持的GPU卡。
以下NVIDIA軟件必須安裝在您的係統上:
- NVIDIA的Cuda Toolkit(> = 7.0)。我們建議使用8.0版本。詳情請參閱NVIDIA的文檔。確保您將相關的Cuda路徑名追加到
LD_LIBRARY_PATH
環境變量,如NVIDIA文檔中所述。 - 與NVIDIA的Cuda工具包相關的NVIDIA驅動程序。
- cuDNN(> = v3)。我們建議5.1版本。詳情請參閱NVIDIA的文檔,特別要關注其中
LD_LIBRARY_PATH
環境變量的設置。
最後,您還必須安裝libcupti-dev
,命令如下:
$ sudo apt-get install libcupti-dev
下一個
在準備好環境後,你現在必須做配置安裝。
為Mac OS準備環境
在構建TensorFlow之前,您必須在係統上安裝以下內容:
- bazel
- TensorFlow Python依賴項。
- 可選地,NVIDIA軟件包,用於支持TensorFlow GPU。
安裝bazel
如果係統上沒有安裝bazel,請按照以下步驟進行安裝,見文檔。
安裝python依賴項
要安裝TensorFlow,您必須安裝以下軟件包:
- six
- numpy,這是TensorFlow需要的數字處理包。
- wheel,這使您能夠以wheel(.whl)格式管理Python壓縮包。
您可以使用pip安裝python依賴項。如果您的機器上沒有pip,我們建議使用homebrew來安裝Python和pip,見這個文檔。如果您遵循這些說明,則不需要禁用SIP。
安裝pip後,調用以下命令:
$ sudo pip install six numpy wheel
可選:安裝TensorFlow GPU版本的要求
如果沒有安裝brew,請按照以下步驟進行安裝,見brew安裝說明。
安裝brew後,執行以下命令安裝GNU coreutils:
$ brew install coreutils
如果要編譯Tensorflow並安裝XCode 7.3和CUDA 7.5,請注意,Xcode 7.3尚未兼容CUDA 7.5。要解決此問題,請執行以下任一操作:
- 更新到CUDA 8.0.
-
下載Xcode 7.2並通過以下命令設置為默認項:
$ sudo xcode-select -s /Application/Xcode-7.2/Xcode.app
注意:您的係統必須滿足以下文檔描述的NVIDIA軟件要求:
配置安裝
源代碼樹的根目錄包含一個名為configure
的bash腳本。該腳本要求您確定所有相關TensorFlow依賴關係的路徑名,並指定其他構建配置選項,如編譯器標誌。您必須先運行此腳本,才能創建pip軟件包並安裝TensorFlow。
如果你想構建支持GPU的TensorFlow,configure
將要求您指定Cuda和cuDNN的版本號。如果您的係統上安裝了幾個版本的Cuda或cuDNN,請明確地選擇所需的版本,而不是依賴於默認版本。
其中一個configure
問題如下:
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]
這個問題出現在構建pip包時。我們建議接受默認值(-march=native
),這將以本地機器CPU類型的來優化生成代碼。但是,如果要在一種CPU類型上構建TensorFlow,但在不同的CPU類型上運行TensorFlow,那麽請考慮指定一個更具體的優化標誌,見gcc文檔。
下麵執行configure
腳本的例子。請注意,您自己的輸入可能與我們的示例輸入不同:
$ cd tensorflow # cd to the top-level directory created $ ./configure Please specify the location of python. [Default is /usr/bin/python]: /usr/bin/python2.7 Found possible Python library paths: /usr/local/lib/python2.7/dist-packages /usr/lib/python2.7/dist-packages Please input the desired Python library path to use. Default is [/usr/lib/python2.7/dist-packages] Using python library path: /usr/local/lib/python2.7/dist-packages Do you wish to build TensorFlow with MKL support? [y/N] No MKL support will be enabled for TensorFlow Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]: Do you wish to use jemalloc as the malloc implementation? [Y/n] jemalloc enabled Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] No Google Cloud Platform support will be enabled for TensorFlow Do you wish to build TensorFlow with Hadoop File System support? [y/N] No Hadoop File System support will be enabled for TensorFlow Do you wish to build TensorFlow with the XLA just-in-time compiler (experimental)? [y/N] No XLA support will be enabled for TensorFlow Do you wish to build TensorFlow with VERBS support? [y/N] No VERBS support will be enabled for TensorFlow Do you wish to build TensorFlow with OpenCL support? [y/N] No OpenCL support will be enabled for TensorFlow Do you wish to build TensorFlow with CUDA support? [y/N] Y CUDA support will be enabled for TensorFlow Do you want to use clang as CUDA compiler? [y/N] nvcc will be used as CUDA compiler Please specify the Cuda SDK version you want to use, e.g. 7.0. [Leave empty to default to CUDA 8.0]: 8.0 Please specify the location where CUDA 8.0 toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]: Please specify which gcc should be used by nvcc as the host compiler. [Default is /usr/bin/gcc]: Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 6.0]: 6 Please specify the location where cuDNN 6 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]: Please specify a list of comma-separated Cuda compute capabilities you want to build with. You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus. Please note that each additional compute capability significantly increases your build time and binary size. [Default is: "3.5,5.2"]: 3.0 Do you wish to build TensorFlow with MPI support? [y/N] MPI support will not be enabled for TensorFlow Configuration finished
如果要構建支持GPU的Tensorflow,configure
將創建一個規範的符號鏈接到您的係統上的Cuda庫。因此,每次更改Cuda路徑時,在再次執行bazel build
命令之前,都必須重新運行configure
腳本。
另外,請注意以下事項:
- 雖然可以在同一源代碼樹下構建Cuda和non-Cuda配置,但是,當在同一源代碼樹中切換這兩種配置之間時,我們建議運行
bazel clean
。 - 如果你不在運行
configure
腳本之前運行bazel build
命令,bazel build
命令將失敗。
構建pip包
要為支持CPU-only的TensorFlow構建一個pip包,需要執行以下命令:
$ bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
要為具有GPU支持的TensorFlow構建pip軟件包,請調用以下命令:
$ bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
關於gcc 5或更高版本的注意事項:TensorFlow網站上提供的二進製pip包是使用gcc 4編譯的,它使用較舊的ABI。要使您的構建與較舊的ABI兼容,您需要添加--cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"
到你的bazel build
命令。
Tips:默認情況下,從源代碼構建TensorFlow消耗大量的RAM。如果RAM有限,您可以在使用bazel時
通過指定參數來限製RAM的使用:--local_resources 2048,.5,1.0。
該bazel build
命令構建一個命名build_pip_package
的腳本。運行此腳本將在/tmp/tensorflow_pkg
目錄構建一個.whl
文件
$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
安裝pip包
調用pip install
安裝該pip包。.whl
文件的具體文件名取決於您的平台。例如,以下命令將安裝pip包:
在Linux上對於TensorFlow 1.3.0版本:
$ sudo pip install /tmp/tensorflow_pkg/tensorflow-1.3.0-py2-none-any.whl
驗證您的安裝
通過執行以下操作來驗證您的TensorFlow安裝:
啟動一個終端
更改目錄(cd
)到你係統上的任意目錄(除了tensorflow
這個你調用configure
命令的目錄的子目錄。
調用python:
$ python
在python交互式shell中輸入以下短程序:
# Python
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
如果係統輸出以下內容,則可以開始編寫TensorFlow程序:
Hello, TensorFlow!
如果您是TensorFlow新手,請參閱TensorFlow入門。
如果係統輸出錯誤消息而不是問候,請參閱常見的安裝問題。
常見的安裝問題
遇到的安裝問題通常取決於操作係統。請參閱以下指南之一的“常見安裝問題”部分:
除了這兩個指南中記錄的錯誤之外,下表列出了構建TensorFlow特有的其他錯誤。
Stack Overflow鏈接 | 錯誤信息 |
---|---|
41293077 |
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. |
42013316 |
ImportError: libcudart.so.8.0: cannot open shared object file: No such file or directory |
42013316 |
ImportError: libcudnn.5: cannot open shared object file: No such file or directory |
35953210 | 調用`python`或`ipython`會產生以下錯誤:
ImportError: cannot import name pywrap_tensorflow |