Google is committed to advancing racial equity for Black communities. See how.

ソースからのビルド

ソースから TensorFlow の pip パッケージをビルドし、それを Ubuntu Linux や macOS にインストールします。この手順は他のシステムでも機能する可能性がありますが、テストとサポートの対象は Ubuntu と macOS のみとなります。

Linux と macOS でのセットアップ

開発環境を設定するために、以下のビルドツールをインストールします。

Python と TensorFlow パッケージの依存関係をインストールする

Ubuntu

sudo apt install python-dev python-pip  # or python3-dev python3-pip

macOS

Xcode 9.2 以降が必要です。

Homebrew パッケージ マネージャーを使ってインストールします。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
brew install python@2  # or python (Python 3)

TensorFlow の pip パッケージの依存関係をインストールします(仮想環境を使用している場合、--user 引数は省略します)。

pip install -U --user pip six numpy wheel setuptools mock 'future>=0.17.1'
pip install -U --user keras_applications --no-deps
pip install -U --user keras_preprocessing --no-deps

Bazel をインストールする

TensorFlow をビルドするには、Bazel をインストールする必要があります。 Bazelisk は、Bazel を簡単にインストールする方法であり、TensorFlow に適したバージョンの Bazel を自動的にダウンロードします。使いやすさを考慮して、bazel 実行可能ファイルとして Bazelisk を PATH に追加します。

Bazelisk を使用できない場合は、手動で Bazel をインストールできます。tensorflow/configure.py に明記されるとおり、_TF_MIN_BAZEL_VERSION から _TF_MAX_BAZEL_VERSION の間のサポートされている Bazel バージョンを必ずインストールしてください。

GPU サポートをインストールする(省略可、Linux のみ)

macOS 用の GPU サポートはありません。

GPU サポートに関するガイドを確認して、GPU で TensorFlow を実行するのに必要なドライバや追加のソフトウェアをインストールします。

TensorFlow のソースコードをダウンロードする

Git を使用して TensorFlow のリポジトリのクローンを作成します。

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow

リポジトリのデフォルトは master 開発ブランチです。リリース ブランチをチェックアウトしてビルドすることもできます。

git checkout branch_name  # r1.9, r1.10, etc.

ビルドを構成する

TensorFlow のソースツリーのルートで、./configure を実行して、システムビルドを構成します。このスクリプトを実行すると、TensorFlow の依存関係の場所を尋ねるプロンプトが表示され、追加のビルド構成オプション(たとえば、コンパイラ フラグ)についても問い合わせがあります。

./configure

セッションのサンプル

./configure スクリプト。./configure(セッションによって異なる場合があります)の実行例を以下に示します。

設定オプション

GPU サポート

GPU サポートを使用する場合は、構成時に cuda=Y をセットし、CUDA と cuDNN のバージョンを指定します。CUDA や cuDNN の複数のバージョンがシステムにインストールされている場合は、デフォルトを使用するのではなく、バージョンを明示的に設定します。./configure はシステムの CUDA ライブラリへのシンボリック リンクを作成します。そのため、CUDA ライブラリパスを変更する場合は、ビルドする前にこの構成手順をもう一度行う必要があります。

最適化

コンパイルの最適化フラグのデフォルト(-march=native)では、ご利用のマシンの CPU タイプに応じて生成されるコードが最適化されます。別の CPU タイプ用に TensorFlow をビルドする場合は、それに合わせた最適化フラグをご検討ください。例については、GCC マニュアルをご覧ください。

事前構成済みのビルド構成

次のように、bazel build コマンドに追加できるビルド構成がいくつか事前に構成されています。

  • --config=mkl - Intel® MKL-DNN のサポート。
  • --config=monolithic - ほぼ静的な、モノリシック ビルド用の設定。
  • --config=v1 - TensorFlow 2.x ではなく 1.x をビルド。

pip パッケージをビルドする

TensorFlow 2.x

tensorflow:master リポジトリがデフォルトで 2.x をビルドするようにアップデートされました。 Bazel をインストールし、bazel build を使用して TensorFlow パッケージを作成します。

bazel build //tensorflow/tools/pip_package:build_pip_package

TensorFlow 1.x

マスターから TensorFlow の 1.x バージョンをビルドするには、bazel build --config=v1 を使用して TensorFlow 1.x パッケージを作成します。

bazel build --config=v1 //tensorflow/tools/pip_package:build_pip_package

CPU のみ

CPU のみに対応する TensorFlow パッケージのビルダーを、bazel を使用して作成します。

bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package

GPU サポート

GPU に対応する TensorFlow パッケージのビルダーを作成するには、以下を使用します。

bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

Bazel ビルドのオプション

ビルド オプションについては、Bazel コマンドライン リファレンスをご覧ください。

ソースから TensorFlow をビルドすると、大量の RAM が使用される可能性があります。メモリの制約があるシステムでは、Bazel の RAM 使用量を --local_ram_resources=2048 で制限してください。

公式の TensorFlow パッケージは、manylinux2010 パッケージ標準に準拠した GCC 7.3 ツールチェーンでビルドされています。

GCC 5 以降を使用する場合は、--cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" を指定して、ビルドに古い ABI との互換性を持たせることができます。ABI の互換性を保つことで、公式の TensorFlow パッケージに対してビルドされたカスタム操作が、GCC 5 でビルドされたパッケージでも引き続き機能するようになります。

パッケージをビルドする

bazel build コマンドを実行すると build_pip_package という名前の実行可能ファイルが作成されます。これは pip パッケージをビルドするプログラムです。この実行可能ファイルを下記のように実行すると、.whl パッケージが /tmp/tensorflow_pkg ディレクトリにビルドされます。

リリース ブランチからビルドするには、以下を使用します。

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

マスターからビルドするには、--nightly_flag を指定して、正しい依存関係を取得します。

./bazel-bin/tensorflow/tools/pip_package/build_pip_package --nightly_flag /tmp/tensorflow_pkg

CUDA 構成と非 CUDA 構成の両方を同じソースツリー下にビルドすることも可能ですが、同じソースツリー内のこの 2 つの構成間を切り替える際には、bazel clean を実行することをおすすめします。

パッケージをインストールする

生成される .whl ファイルのファイル名は TensorFlow のバージョンとご利用のプラットフォームによって異なります。pip install を使ってパッケージをインストールするには、たとえば次のように指定します。

pip install /tmp/tensorflow_pkg/tensorflow-version-tags.whl

Docker の Linux 用ビルド

TensorFlow の Docker 開発イメージを使用すると、ソースから Linux パッケージをビルドするための環境を簡単にセットアップできます。これらのイメージには、TensorFlow のビルドに必要なソースコードと依存関係がすでに含まれています。インストール方法と利用可能なイメージタグのリストについては、TensorFlow の Docker ガイドをご覧ください。

CPU のみ

次の例では、:devel イメージを使用して、最新の TensorFlow ソースコードから CPU のみの Python 2 パッケージをビルドします。利用可能な TensorFlow の -devel タグについては、Docker ガイドをご覧ください。

最新の開発イメージをダウンロードし、pip パッケージのビルドに使用する Docker コンテナを起動します。

docker pull tensorflow/tensorflow:devel
docker run -it -w /tensorflow_src -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \
    tensorflow/tensorflow:devel bash

git pull  # within the container, download the latest source code

上記の docker run コマンドは /tensorflow_src ディレクトリ(ソースツリーのルート)内でシェルを起動します。ホストのカレント ディレクトリをコンテナ内の /mnt ディレクトリにマウントし、環境変数(権限の設定に使用 - Docker でのこの方法には注意が必要)を通じてコンテナにホストユーザーの情報を渡します。

または、TensorFlow のホストのコピーをコンテナ内にビルドし、ホストのソースツリーをコンテナの /tensorflow ディレクトリにマウントします。

docker run -it -w /tensorflow -v /path/to/tensorflow:/tensorflow -v $PWD:/mnt \
    -e HOST_PERMS="$(id -u):$(id -g)" tensorflow/tensorflow:devel bash

ソースツリーをセットアップしたら、コンテナの仮想環境内で TensorFlow パッケージをビルドします。

  1. ビルドを構成します - これにより、ユーザーはビルド構成についての質問に回答するよう求められます。
  2. pip パッケージの作成に使用するツールをビルドします。
  3. そのツールを実行して pip パッケージを作成します。
  4. コンテナの外部にあるファイルの所有権限を調整します。
./configure  # answer prompts or use defaults

bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /mnt  # create package

chown $HOST_PERMS /mnt/tensorflow-version-tags.whl

コンテナ内にパッケージをインストールして検証します。

pip uninstall tensorflow  # remove current version

pip install /mnt/tensorflow-version-tags.whl
cd /tmp  # don't import from source directory
python -c "import tensorflow as tf; print(tf.__version__)"

ご利用のホストマシン上で、TensorFlow の pip パッケージはカレント ディレクトリ ./tensorflow-version-tags.whl にあります(ホストユーザーの権限が付与されています)。

GPU サポート

Docker を使用すると、ホストマシンに必要なのは NVIDIA® ドライバのみになるので、TensorFlow の GPU サポートをビルドする最も簡単な方法となります(NVIDIA® CUDA® ツールキットは不要です)。nvidia-docker(Linux のみ)をセットアップするには、GPU サポートのガイドと TensorFlow の Docker ガイドをご確認ください。

次の例では、TensorFlow の :devel-gpu-py3 イメージをダウンロードし、nvidia-docker を使って GPU 対応のコンテナを実行します。この開発イメージは、GPU サポートを含む Python 3 pip パッケージをビルドするように構成されています。

docker pull tensorflow/tensorflow:devel-gpu-py3
docker run --gpus all -it -w /tensorflow -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \
    tensorflow/tensorflow:devel-gpu-py3 bash
git pull  # within the container, download the latest source code

次に、コンテナの仮想環境内で GPU サポートを含む TensorFlow パッケージをビルドします。

./configure  # answer prompts or use defaults

bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /mnt  # create package

chown $HOST_PERMS /mnt/tensorflow-version-tags.whl

パッケージをコンテナ内にインストールして検証し、GPU を確認します。

pip uninstall tensorflow  # remove current version

pip install /mnt/tensorflow-version-tags.whl
cd /tmp  # don't import from source directory
python -c "import tensorflow as tf; print(tf.contrib.eager.num_gpus())"

テスト済みのビルド構成

Linux

CPU

バージョンPython バージョンコンパイラビルドツール
tensorflow-2.1.02.7、3.5~3.7GCC 7.3.1Bazel 0.27.1
tensorflow-2.0.02.7、3.3~3.7GCC 7.3.1Bazel 0.26.1
tensorflow-1.14.02.7、3.3~3.7GCC 4.8Bazel 0.24.1
tensorflow-1.13.12.7、3.3~3.7GCC 4.8Bazel 0.19.2
tensorflow-1.12.02.7、3.3-3.6GCC 4.8Bazel 0.15.0
tensorflow-1.11.02.7、3.3-3.6GCC 4.8Bazel 0.15.0
tensorflow-1.10.02.7、3.3-3.6GCC 4.8Bazel 0.15.0
tensorflow-1.9.02.7、3.3-3.6GCC 4.8Bazel 0.11.0
tensorflow-1.8.02.7、3.3-3.6GCC 4.8Bazel 0.10.0
tensorflow-1.7.02.7、3.3-3.6GCC 4.8Bazel 0.10.0
tensorflow-1.6.02.7、3.3-3.6GCC 4.8Bazel 0.9.0
tensorflow-1.5.02.7、3.3-3.6GCC 4.8Bazel 0.8.0
tensorflow-1.4.02.7、3.3-3.6GCC 4.8Bazel 0.5.4
tensorflow-1.3.02.7、3.3-3.6GCC 4.8Bazel 0.4.5
tensorflow-1.2.02.7、3.3-3.6GCC 4.8Bazel 0.4.5
tensorflow-1.1.02.7、3.3-3.6GCC 4.8Bazel 0.4.2
tensorflow-1.0.02.7、3.3-3.6GCC 4.8Bazel 0.4.2

GPU

バージョンPython バージョンコンパイラビルドツールcuDNNCUDA
tensorflow-2.1.02.7、3.5~3.7GCC 7.3.1Bazel 0.27.17.610.1
tensorflow-2.0.02.7、3.3~3.7GCC 7.3.1Bazel 0.26.17.410.0
tensorflow_gpu-1.14.02.7、3.3~3.7GCC 4.8Bazel 0.24.17.410.0
tensorflow_gpu-1.13.12.7、3.3~3.7GCC 4.8Bazel 0.19.27.410.0
tensorflow_gpu-1.12.02.7、3.3-3.6GCC 4.8Bazel 0.15.079
tensorflow_gpu-1.11.02.7、3.3-3.6GCC 4.8Bazel 0.15.079
tensorflow_gpu-1.10.02.7、3.3-3.6GCC 4.8Bazel 0.15.079
tensorflow_gpu-1.9.02.7、3.3-3.6GCC 4.8Bazel 0.11.079
tensorflow_gpu-1.8.02.7、3.3-3.6GCC 4.8Bazel 0.10.079
tensorflow_gpu-1.7.02.7、3.3-3.6GCC 4.8Bazel 0.9.079
tensorflow_gpu-1.6.02.7、3.3-3.6GCC 4.8Bazel 0.9.079
tensorflow_gpu-1.5.02.7、3.3-3.6GCC 4.8Bazel 0.8.079
tensorflow_gpu-1.4.02.7、3.3-3.6GCC 4.8Bazel 0.5.468
tensorflow_gpu-1.3.02.7、3.3-3.6GCC 4.8Bazel 0.4.568
tensorflow_gpu-1.2.02.7、3.3-3.6GCC 4.8Bazel 0.4.55.18
tensorflow_gpu-1.1.02.7、3.3-3.6GCC 4.8Bazel 0.4.25.18
tensorflow_gpu-1.0.02.7、3.3-3.6GCC 4.8Bazel 0.4.25.18

macOS

CPU

バージョンPython バージョンコンパイラビルドツール
tensorflow-2.0.02.7、3.5~3.7xcode 10.1 から ClangBazel 0.27.1
tensorflow-2.0.02.7、3.3~3.7xcode 10.1 から ClangBazel 0.26.1
tensorflow-1.14.02.7、3.3~3.7xcode から ClangBazel 0.24.1
tensorflow-1.13.12.7、3.3~3.7xcode から ClangBazel 0.19.2
tensorflow-1.12.02.7、3.3-3.6xcode から ClangBazel 0.15.0
tensorflow-1.11.02.7、3.3-3.6xcode から ClangBazel 0.15.0
tensorflow-1.10.02.7、3.3-3.6xcode から ClangBazel 0.15.0
tensorflow-1.9.02.7、3.3-3.6xcode から ClangBazel 0.11.0
tensorflow-1.8.02.7、3.3-3.6xcode から ClangBazel 0.10.1
tensorflow-1.7.02.7、3.3-3.6xcode から ClangBazel 0.10.1
tensorflow-1.6.02.7、3.3-3.6xcode から ClangBazel 0.8.1
tensorflow-1.5.02.7、3.3-3.6xcode から ClangBazel 0.8.1
tensorflow-1.4.02.7、3.3-3.6xcode から ClangBazel 0.5.4
tensorflow-1.3.02.7、3.3-3.6xcode から ClangBazel 0.4.5
tensorflow-1.2.02.7、3.3-3.6xcode から ClangBazel 0.4.5
tensorflow-1.1.02.7、3.3-3.6xcode から ClangBazel 0.4.2
tensorflow-1.0.02.7、3.3-3.6xcode から ClangBazel 0.4.2

GPU

バージョンPython バージョンコンパイラビルドツールcuDNNCUDA
tensorflow_gpu-1.1.02.7、3.3-3.6xcode から ClangBazel 0.4.25.18
tensorflow_gpu-1.0.02.7、3.3-3.6xcode から ClangBazel 0.4.25.18