天天看點

[深度學習架構] 在Mac上安裝Tensorflow

這個文檔說明了如何在 Mac OS X 上安裝 TensorFlow。

注意:從 1.2 版本開始,在 Mac OS X 上 TensorFlow 不再支援 GPU。
           

确定如何安裝 TensorFlow

你可以選擇一種方式安裝 TensorFlow,支援下面的幾種選擇:

  • virtualenv
  • "本地" pip
  • Docker
  • 從源代碼安裝,更專業有單獨的文檔記錄

我們建議使用 virtualenv 安裝。virtualenv 是一個和其它 Python 項目開發隔離的虛拟 Python 環境,在同一台機器上不會幹擾也不會被其它程式影響。virtualenv 安裝過程中,你不僅僅安裝了 TensorFlow 還有它的所有依賴包。(事實上這很簡單)要開始使用 TensorFlow,你需要“啟動” virtualenv 環境。總而言之,virtualenv 提供了一個安全可靠的 TensorFlow 安裝和運作機制。

本地 pip 安裝 TensorFlow 不經過任何容器或者虛拟環境系統直接裝到了系統上,由于本地 pip 安裝沒被關閉,pip 安裝會幹擾或者影響系統上其它有 Python 依賴的安裝。而且,如果要通過本地 pip 安裝,你需要禁用系統完整性保護(SIP)。然而,如果你了解 SIP,pip 和 你的 Python 環境,本地 pip 安裝相對容易執行。

Docker 可使 TensorFlow 的安裝完全脫離于機器上的其它已存在的包,Docker 容器包括 TensorFlow 和它的所有依賴。注意 Docker 鏡像可能很大(幾百 M)。如果你已将 TensorFlow 內建到使用了 Docker 的大型應用架構中可以選擇 Docker 安裝。

選擇 Anaconda,你可以使用 conda 建立一個虛拟環境,我們建議使用 

pip install

 指令而不是 

coda install

 指令安裝 TensorFlow。

注意:coda 包是社群而不是官方支援,也就是說,TensorFlow 團隊既不測試也不維護 conda 包,如果使用風險自己承擔。
           

使用 virtualenv 安裝

按照以下步驟安裝 TensorFlow:

  1. 打開終端(一個 shell),你将在這個終端中執行随後的步驟
  2. 通過以下指令安裝 pip 和 virtualenv:

$ sudo easy_install pip 

$ sudo pip install --upgrade virtualenv

  1. 執行以下任一指令建立虛拟環境:

$ virtualenv --system-site-packages targetDirectory # for Python 2.7 

$ virtualenv --system-site-packages -p python3 targetDirectory # for Python 3.n

targetDirectory 因虛拟環境根路徑而異,我們的指令假使 targetDirectory 是 

~/tensorflow

,但你可以選擇任一目錄。

  1. 執行任一指令激活虛拟環境:

$ source ~/tensorflow/bin/activate # If using bash, sh, ksh, or zsh 

$ source ~/tensorflow/bin/activate.csh # If using csh or tcsh

上面的 source 指令應該将提示符改成了下面這樣:

shell (tensorflow)$

  1. 如果已經安裝了 pip 8.1 或者更新的版本,執行以下任一指令在激活的虛拟環境中安裝 TensorFlow 及其所有依賴:

$ pip install --upgrade tensorflow # for Python 2.7 

$ pip3 install --upgrade tensorflow # for Python 3.n

如果前面的指令執行成功了,跳過步驟 6;如果失敗了,再執行步驟 6。

  1. 可選,如果步驟 5 失敗了(一般是因為你使用了低于 8.1 版本的 pip),執行以下任一指令在激活的虛拟環境中安裝 TensorFlow:

$ pip install --upgrade tfBinaryURL # Python 2.7 

$ pip3 install --upgrade tfBinaryURL # Python 3.n

tfBinaryURL 是 Tensorflow 包的 URL,準确的 tfBinaryURL 值因作業系統和 Python 版本而異,在這裡找到和你系統相關的 tfBinaryURL 值。例如,你要在 Mac OS X 上安裝 Python 2.7 對應的 Tensorflow 版本,在虛拟環境中安裝 Tensorflow 就執行下面的指令:

$ pip3 install --upgrade \ https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.2.1-py2-none-any.whl

如果安裝過程中遇到麻煩,參考常見安裝問題。

下一步

安裝完成後,驗證你的安裝是否工作正常。

注意,每打開一個新的 shell 使用 TensorFlow 都必須激活虛拟環境。如果目前虛拟環境沒有被激活(也就是提示符不是 tensorflow),執行以下任一指令:

$ source ~/tensorflow/bin/activate      # bash, sh, ksh, or zsh
$ source ~/tensorflow/bin/activate.csh  # csh or tcsh 
           

你的提示符變成下面這樣說明 tensorflow 環境已經激活:

當虛拟環境激活後,你可以在這個 shell 中運作 TensorFlow 程式。如果你不再使用 TensorFlow,可以通過下面指令退出環境:

(tensorflow)$ deactivate 
           

提示符将會恢複到預設的(在 PS1 中定義的)。

解除安裝 TensorFlow

如果你想解除安裝 TensorFlow,簡單地移除你建立的目錄。例如:

$ rm -r ~/tensorflow 
           

使用本地 pip 安裝

我們已經将 TensorFlow 二進制檔案上傳到了 PyPI,是以你可以通過 pip 安裝, REQUIRED_PACKAGES section of setup.py 檔案列出了 pip 将要安裝或更新的包。

必備: Python

要安裝 TensorFlow,你的系統必須依據安裝了以下任一 Python 版本:

  • Python 2.7
  • Python 3.3+

如果你的系統還沒有安裝符合以上版本的 Python,現在安裝。

安裝 Python,你可能需要禁用系統完整性保護(SIP)來獲得從 Mac App Store 外安裝軟體的許可。

必備: pip

Pip 安裝和管理 Python寫的軟體包,如果你要使用本地 pip 安裝,系統上必須安裝下面的任一 pip 版本:

  • pip

    , for Python 2.7
  • pip3

    , for Python 3.n.

pip 或者 pip3 可能在你安裝 Python 的時候已經安裝了,執行以下任一指令确認系統上是否安裝了 pip 或 pip3:

$ pip -V  # for Python 2.7
$ pip3 -V # for Python 3.n 
           

我們強烈建議使用 pip 或者 pip3 為 8.1 或者更新的版本安裝 TensorFlow,如果沒有安裝,執行以下任一指令安裝或更新:

$ sudo easy_install --upgrade pip
$ sudo easy_install --upgrade six 
           

安裝 TensorFlow

假設你的 Mac 上已經裝好了必備的程式,按照以下步驟執行:

  1. 執行以下任一指令安裝 TensorFlow:

$ pip install tensorflow # Python 2.7; CPU support 

$ pip3 install tensorflow # Python 3.n; CPU support

如果上面的指令執行完成,現在可以驗證你的安裝了。

  1. (可選的) 如果步驟 1 失敗了,執行下面的指令安裝最新版本 TensorFlow:

$ sudo pip install --upgrade tfBinaryURL # Python 2.7 

$ sudo pip3 install --upgrade tfBinaryURL # Python 3.n

tfBinaryURL 是 Tensorflow 包的 URL,準确的 tfBinaryURL 值因作業系統和 Python 版本而異,在這裡找到和你系統相關的 tfBinaryURL 值。例如,你要在 Mac OS X 上安裝 Python 2.7 對應的 Tensorflow 版本,在虛拟環境中安裝 Tensorflow 就執行下面的指令:

$ sudo pip3 install --upgrade \ https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.2.1-py2-none-any.whl

如果以上指令運作失敗,參考 安裝問題:

下一步

安裝完成後,驗證你的安裝是否工作正常。

解除安裝 TensorFlow

如果要解除安裝 TensorFlow,執行下面的指令:

$ pip uninstall tensorflow
$ pip3 uninstall tensorflow 
           

使用 Docker 安裝

按照以下步驟使用 Docker 安裝 TensorFlow:

  1. 按照 文檔 在你的機器上安裝 Docker
  2. 啟動任一個包含 TensorFlow 鏡像的 Docker 容器

本節剩下部分解釋如何啟動 Docker 容器。

要啟動包含 TensorFlow 鏡像的 Docker 容器,執行以下指令:

where:

  • -p hostPort:containerPort 是可選的,如果你想從 shell 運作 TensorFlow 程式忽略這個選項。如果你想從 Jupyter notebook 運作 TensorFlow 程式,hostPort 和 containerPort 都設定為 

    8888

    。如果你想在鏡像中運作 TensorBoard,再添加一個

    -p

     參數,hostPort 和 containerPort 都設定為 6006。
  • TensorFlowImage 是需要的,它用于指定 Docker 容器,你必須指定接下來的任一一個:

    gcr.io/tensorflow/tensorflow

    : TensorFlow 二進制鏡像,

    gcr.io/tensorflow/tensorflow:latest-devel

    : TensorFlow 二進制鏡像加源碼。

gcr.io

 是 Goole 的容器系統資料庫(?),注意部分 TensorFlow 也可以從 dockerhub 擷取。

例如,下面的指令可以在 Docker 容器中啟動一個 TensorFlow CPU 鏡像,然後你可以在鏡像的 shell 中運作 TensorFlow 程式:

$ docker run -it gcr.io/tensorflow/tensorflow bash
           

以下指令也可以在 Docker 容器中啟動一個 TensorFlow CPU 鏡像,然而,在這個 Docker 鏡像中,你可以在 Jupyter notebook 中運作 TensorFlow 程式:

$ docker run -it -p : gcr.io/tensorflow/tensorflow
           

Docker 将會先下載下傳 TensorFlow 鏡像然後啟動它。

下一步

現在可以驗證你的安裝了。

使用 Anaconda 安裝

Anaconda 安裝隻是社群而非官方支援

按照以下步驟在 Anaconda 環境中安裝 TensorFlow:

  1. 按照 Anaconda 下載下傳站點 說明下載下傳安裝 Anaconda
  2. 執行以下指令建立名為 

    tensorflow

     的 conda 環境:

$ conda create -n tensorflow

  1. 執行以下指令激活 conda 環境:

$ source activate tensorflow (tensorflow)$ # Your prompt should change

  1. 執行以下指令在你的 conda 環境中安裝 TensorFlow:

shell (tensorflow)$ pip install --ignore-installed --upgrade TF_PYTHON_URL

TF_PYTHON_URL 是 TensorFlow Python 包 的 URL,例如,以下指令是安裝 Python 2.7 CPU-only 版本的 TensorFlow:

shell (tensorflow)$ pip install --ignore-installed --upgrade \ https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.2.1-py2-none-any.whl

驗證你的安裝

要驗證你的 TensorFlow 安裝,操作以下步驟:

  1. 保證你的環境可以運作 TensorFlow 程式
  2. 運作一個小的 TensorFlow 程式

準備你的環境

如果你使用本地 pip, virtualenv 或者 Anaconda 安裝,操作以下步驟:

  1. 打開一個終端
  2. 如果你使用 virtualenv 或 Anaconda 安裝,激活你的容器
  3. 如果你安裝了 TensorFlow 源碼,進到任何一個處了包含 TensorFlow 源碼的目錄

如果通過 Docker 安裝,啟動一個運作 bash 的 Docker 容器,例如:

$ docker run -it gcr.io/tensorflow/tensorflow bash
           

運作一個小的 TensorFlow 程式

在一個 shell 中執行 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,參考 Getting Started with TensorFlow。

如果系統輸出錯誤資訊而不是歡迎語,參考 常見安裝問題。

常見安裝問題

我們依據 Stack Overflow 記錄 TensorFlow 安裝問題和相應的解決方法。下面的表格包括 Stack Overflow 常見的安裝問題回複連結,如果你遇到的錯誤資訊或者其它安裝問題不在表格中,請在 Stack Overflow 上搜尋。如果 Stack Overflow 上沒有你搜尋的錯誤資訊,提一個新問題并且打上 

tensorflow

 标簽。

Stack Overflow Link Error Message
42006320

ImportError: Traceback (most recent call last):File ".../tensorflow/core/framework/graph_pb2.py", line 6, in from google.protobuf import descriptor as _descriptorImportError: cannot import name 'descriptor'

33623453

IOError: [Errno 2] No such file or directory: '/tmp/pip-o6Tpui-build/setup.py'

35190574

SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

42009190

Installing collected packages: setuptools, protobuf, wheel, numpy, tensorflow Found existing installation: setuptools 1.1.6 Uninstalling setuptools-1.1.6: Exception: ... [Errno 1] Operation not permitted: '/tmp/pip-a1DXRT-uninstall/.../lib/python/_markerlib'

33622019

ImportError: No module named copyreg

37810228 During a 

pip install

 operation, the system returns:

OSError: [Errno 1] Operation not permitted

33622842 An 

import tensorflow

 statement triggers an error such as the following:

Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/python2.7/site-packages/tensorflow/__init__.py", line 4, in from tensorflow.python import * ... File "/usr/local/lib/python2.7/site-packages/tensorflow/core/framework/tensor_shape_pb2.py", line 22, in serialized_pb=_b('\n,tensorflow/core/framework/tensor_shape.proto\x12\ntensorflow\"d\n\x10TensorShapeProto\x12-\n\x03\x64im\x18\x02 \x03(\x0b\x32 .tensorflow.TensorShapeProto.Dim\x1a!\n\x03\x44im\x12\x0c\n\x04size\x18\x01 \x01(\x03\x12\x0c\n\x04name\x18\x02 \x01(\tb\x06proto3') TypeError: __init__() got an unexpected keyword argument 'syntax'

42075397

pip install

 command triggers the following error:

...You have not agreed to the Xcode license agreements, please run'xcodebuild -license' (for user-level acceptance) or'sudo xcodebuild -license' (for system-wide acceptance) from within aTerminal window to review and agree to the Xcode license agreements.... File "numpy/core/setup.py", line 653, in get_mathlib_info raise RuntimeError("Broken toolchain: cannot link a simple C program")RuntimeError: Broken toolchain: cannot link a simple C program

TensorFlow Python 包 URL

一些安裝方法需要 TensorFlow Python 包的 URL,值與三個方面有關(?):

  • 作業系統
  • Python 版本

本節記錄了 Mac OS 安裝相關的值

Python 2.7

https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow--py2-none-any.whl
           

Python 3.4, 3.5, or 3.6

https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow--py3-none-any.whl
           

Protobuf pip package 3.1

如果你沒有遇到 protobuf pip 包相關的問題可以跳過本節。

注意:如果你的 TensorFlow 運作很慢,可能是和 protobuf pip 包有關的問題。

TensorFlow pip 包依賴 protobuf pip 3.1 版本的包,從 PyPI 下載下傳的 protobuf pip 包(在調用 

pip install protobuf

 時)是一個僅包含 Python 的庫,其中包含執行速度比 C++ 實作慢10 ~ 50 倍的原始序列化/反序列化的Python 實作。 Protobuf 還支援包含基于快速 C++ 的原語解析的 Python 包的二進制擴充,此擴充在标準的僅Python 專用 pip 包中不可用,我們為 protobuf 建立了一個包含二進制擴充名的自定義二進制 pip 包。要安裝自定義二進制 protobuf pip 包,請調用以下指令之一:

  • for Python 2.7:

$ pip install --upgrade \ https://storage.googleapis.com/tensorflow/mac/cpu/protobuf-3.1.0-cp27-none-macosx_10_11_x86_64.whl

  • for Python 3.n:

$ pip3 install --upgrade \ https://storage.googleapis.com/tensorflow/mac/cpu/protobuf-3.1.0-cp35-none-macosx_10_11_x86_64.whl

安裝這些 protobuf 包将會覆寫已安裝的包,注意二進制 pip 包已經支援大于 64M 的 protobufs,修複了如下報錯:

[libprotobuf ERROR google/protobuf/src/google/protobuf/io/coded_stream.cc:]
A protocol message was rejected because it was too big (more than  bytes).
To increase the limit (or to disable these warnings), see
CodedInputStream::SetTotalBytesLimit() in google/protobuf/io/coded_stream.h.
           

繼續閱讀