Join us at TensorFlow World, Oct 28-31. Use code TF20 for 20% off select passes. Register now

ソースからのビルド

ソースから 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==1.0.6 --no-deps
    pip install -U --user keras_preprocessing==1.0.5 --no-deps
    

依存関係のリストは REQUIRED_PACKAGES 内の setup.py ファイルにあります。

Bazel をインストールする

TensorFlow のコンパイルに使用するビルドツールである Bazel をインストールします。

Bazel 実行可能ファイルの場所を PATH 環境変数に追加します。

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(セッションによって異なる場合があります)の実行例を以下に示します。

設定オプション

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

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

bazel build コマンドに追加できるビルド config がいくつか事前に設定されています。次のような例があります。

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

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

Bazel ビルド

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 ビルドのオプション

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

公式の TensorFlow パッケージは GCC 4 でビルドされており、古い ABI を使用しています。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 のみ

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

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

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

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

上記の docker run コマンドは /tensorflow ディレクトリ(ソースツリーのルート)内でシェルを起動します。ホストのカレント ディレクトリをコンテナ内の /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:nightly-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 の :nightly-devel-gpu-py3 イメージをダンロードし、nvidia-docker を使って GPU 対応のコンテナを実行します。この開発イメージは、GPU サポートを含む Python 3 pip パッケージをビルドするように設定されています。

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

次に、コンテナの仮想環境内で 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

バージョンPython バージョンコンパイラビルドツール
tensorflow-1.13.12.7、3.3-3.6GCC 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
バージョンPython バージョンコンパイラビルドツールcuDNNCUDA
tensorflow_gpu-1.13.12.7、3.3-3.6GCC 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-1.13.12.7、3.3-3.6xcode から 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