ソースから TensorFlow の pip パッケージをビルドし、それを Ubuntu Linux や macOS にインストールします。この手順は他のシステムでも機能する可能性がありますが、テストとサポートの対象は Ubuntu と macOS のみとなります。
Linux と macOS でのセットアップ
開発環境を設定するために、以下のビルドツールをインストールします。
Python と TensorFlow パッケージの依存関係をインストールする
Ubuntu
sudo apt install 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/opt/python/libexec/bin:$PATH"
# if you are on macOS 10.12 (Sierra) use
export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
brew install python
TensorFlow の pip パッケージの依存関係をインストールします(仮想環境を使用している場合、--user
引数は省略します)。
pip install -U --user pip numpy wheel
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 # r2.2, r2.3, etc.
ビルドを構成する
TensorFlow のソースツリーのルートで、./configure
を実行して、システムビルドを構成します。このスクリプトを実行すると、TensorFlow の依存関係の場所を尋ねるプロンプトが表示され、追加のビルド構成オプション(たとえば、コンパイラ フラグ)についても問い合わせがあります。
./configure
仮想環境を使用している場合、python configure.py
ではその環境のパスが優先されますが、./configure
ではその環境外のパスが優先されます。どちらの場合もデフォルトを変更できます。
セッションのサンプル
./configure
スクリプトの実行例を以下に示します(セッションによって異なる場合があります)。
設定オプション
GPU サポート
GPU サポートを使用する場合は、構成時に cuda=Y
をセットし、CUDA と cuDNN のバージョンを指定します。CUDA や cuDNN の複数のバージョンがシステムにインストールされている場合は、デフォルトを使用するのではなく、バージョンを明示的に設定します。./configure
はシステムの CUDA ライブラリへのシンボリック リンクを作成します。そのため、CUDA ライブラリパスを変更する場合は、ビルドする前にこの構成手順をもう一度行う必要があります。
最適化
コンパイルの最適化フラグのデフォルト(-march=native
)では、ご利用のマシンの CPU タイプに応じて生成されるコードが最適化されます。別の CPU タイプ用に TensorFlow をビルドする場合は、それに合わせた最適化フラグをご検討ください。例については、GCC マニュアルをご覧ください。
事前構成済みのビルド構成
次のように、bazel build
コマンドに追加できるビルド構成がいくつか事前に構成されています。
--config=dbg
- デバッグ情報を含むビルド。詳細は CONTRIBUTING.md をご覧ください。--config=mkl
- Intel® MKL-DNN のサポート。--config=monolithic
- ほぼ静的な、モノリシック ビルド用の設定。--config=v1
- TensorFlow 2.x ではなく 1.x をビルド。
pip パッケージをビルドする
TensorFlow 2.x
Bazel をインストールし、bazel build
を使用して CPU のみに対応する TensorFlow 2.x パッケージを作成します。
bazel build [--config=option] //tensorflow/tools/pip_package:build_pip_package
GPU サポート
GPU に対応する TensorFlow パッケージのビルダーをビルドするには、以下を実行します。
bazel build --config=cuda [--config=option] //tensorflow/tools/pip_package:build_pip_package
TensorFlow 1.x
古い TensorFlow 1.x パッケージをビルドするには、次のように --config=v1
オプションを使用します。
bazel build --config=v1 [--config=option] //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 のみのパッケージをビルドします。利用可能な 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 パッケージをビルドします。
- ビルドを設定します - これにより、ビルドの設定についての質問に回答するようユーザーに求めます。
- pip パッケージの作成に使用するツールをビルドします。
- そのツールを実行して pip パッケージを作成します。
- コンテナの外部にあるファイルの所有権限を調整します。
./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
イメージをダウンロードし、nvidia-docker
を使って GPU 対応のコンテナを実行します。この開発イメージは、GPU サポートを含む pip パッケージをビルドするように構成されています。
docker pull tensorflow/tensorflow:devel-gpu
docker run --gpus all -it -w /tensorflow -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \ tensorflow/tensorflow:devel-gpu 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(\"Num GPUs Available: \", len(tf.config.list_physical_devices('GPU')))"
テスト済みのビルド構成
Linux
CPU
バージョン | Python バージョン | コンパイラ | ビルドツール |
---|---|---|---|
tensorflow-2.6.0 | 3.6~3.9 | GCC 7.3.1 | Bazel 3.7.2 |
tensorflow-2.5.0 | 3.6~3.9 | GCC 7.3.1 | Bazel 3.7.2 |
tensorflow-2.4.0 | 3.6~3.8 | GCC 7.3.1 | Bazel 3.1.0 |
tensorflow-2.3.0 | 3.5~3.8 | GCC 7.3.1 | Bazel 3.1.0 |
tensorflow-2.2.0 | 3.5~3.8 | GCC 7.3.1 | Bazel 2.0.0 |
tensorflow-2.1.0 | 2.7、3.5~3.7 | GCC 7.3.1 | Bazel 0.27.1 |
tensorflow-2.0.0 | 2.7、3.3~3.7 | GCC 7.3.1 | Bazel 0.26.1 |
tensorflow-1.15.0 | 2.7、3.3~3.7 | GCC 7.3.1 | Bazel 0.26.1 |
tensorflow-1.14.0 | 2.7、3.3~3.7 | GCC 4.8 | Bazel 0.24.1 |
tensorflow-1.13.1 | 2.7、3.3~3.7 | GCC 4.8 | Bazel 0.19.2 |
tensorflow-1.12.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.15.0 |
tensorflow-1.11.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.15.0 |
tensorflow-1.10.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.15.0 |
tensorflow-1.9.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.11.0 |
tensorflow-1.8.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.10.0 |
tensorflow-1.7.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.10.0 |
tensorflow-1.6.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.9.0 |
tensorflow-1.5.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.8.0 |
tensorflow-1.4.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.5.4 |
tensorflow-1.3.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.4.5 |
tensorflow-1.2.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.4.5 |
tensorflow-1.1.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.4.2 |
tensorflow-1.0.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.4.2 |
GPU
バージョン | Python バージョン | コンパイラ | ビルドツール | cuDNN | CUDA |
---|---|---|---|---|---|
tensorflow-2.6.0 | 3.6~3.9 | GCC 7.3.1 | Bazel 3.7.2 | 8.1 | 11.2 |
tensorflow-2.5.0 | 3.6~3.9 | GCC 7.3.1 | Bazel 3.7.2 | 8.1 | 11.2 |
tensorflow-2.4.0 | 3.6~3.8 | GCC 7.3.1 | Bazel 3.1.0 | 8.0 | 11.0 |
tensorflow-2.3.0 | 3.5~3.8 | GCC 7.3.1 | Bazel 3.1.0 | 7.6 | 10.1 |
tensorflow-2.2.0 | 3.5~3.8 | GCC 7.3.1 | Bazel 2.0.0 | 7.6 | 10.1 |
tensorflow-2.1.0 | 2.7、3.5~3.7 | GCC 7.3.1 | Bazel 0.27.1 | 7.6 | 10.1 |
tensorflow-2.0.0 | 2.7、3.3~3.7 | GCC 7.3.1 | Bazel 0.26.1 | 7.4 | 10.0 |
tensorflow_gpu-1.15.0 | 2.7、3.3~3.7 | GCC 7.3.1 | Bazel 0.26.1 | 7.4 | 10.0 |
tensorflow_gpu-1.14.0 | 2.7、3.3~3.7 | GCC 4.8 | Bazel 0.24.1 | 7.4 | 10.0 |
tensorflow_gpu-1.13.1 | 2.7、3.3~3.7 | GCC 4.8 | Bazel 0.19.2 | 7.4 | 10.0 |
tensorflow_gpu-1.12.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.11.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.10.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.9.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.11.0 | 7 | 9 |
tensorflow_gpu-1.8.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.10.0 | 7 | 9 |
tensorflow_gpu-1.7.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.9.0 | 7 | 9 |
tensorflow_gpu-1.6.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.9.0 | 7 | 9 |
tensorflow_gpu-1.5.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.8.0 | 7 | 9 |
tensorflow_gpu-1.4.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.5.4 | 6 | 8 |
tensorflow_gpu-1.3.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.4.5 | 6 | 8 |
tensorflow_gpu-1.2.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.4.5 | 5.1 | 8 |
tensorflow_gpu-1.1.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.4.2 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 2.7、3.3~3.6 | GCC 4.8 | Bazel 0.4.2 | 5.1 | 8 |
macOS
CPU
バージョン | Python バージョン | コンパイラ | ビルドツール |
---|---|---|---|
tensorflow-2.6.0 | 3.6~3.9 | xcode 10.11 の Clang | Bazel 3.7.2 |
tensorflow-2.5.0 | 3.6~3.9 | xcode 10.11 の Clang | Bazel 3.7.2 |
tensorflow-2.4.0 | 3.6~3.8 | xcode 10.3 の Clang | Bazel 3.1.0 |
tensorflow-2.3.0 | 3.5~3.8 | xcode 10.1 の Clang | Bazel 3.1.0 |
tensorflow-2.2.0 | 3.5~3.8 | xcode 10.1 の Clang | Bazel 2.0.0 |
tensorflow-2.1.0 | 2.7、3.5~3.7 | xcode 10.1 の Clang | Bazel 0.27.1 |
tensorflow-2.0.0 | 2.7、3.5~3.7 | xcode 10.1 の Clang | Bazel 0.27.1 |
tensorflow-2.0.0 | 2.7、3.3~3.7 | xcode 10.1 の Clang | Bazel 0.26.1 |
tensorflow-1.15.0 | 2.7、3.3~3.7 | xcode 10.1 の Clang | Bazel 0.26.1 |
tensorflow-1.14.0 | 2.7、3.3~3.7 | xcode の Clang | Bazel 0.24.1 |
tensorflow-1.13.1 | 2.7、3.3~3.7 | xcode の Clang | Bazel 0.19.2 |
tensorflow-1.12.0 | 2.7、3.3~3.6 | xcode の Clang | Bazel 0.15.0 |
tensorflow-1.11.0 | 2.7、3.3~3.6 | xcode の Clang | Bazel 0.15.0 |
tensorflow-1.10.0 | 2.7、3.3~3.6 | xcode の Clang | Bazel 0.15.0 |
tensorflow-1.9.0 | 2.7、3.3~3.6 | xcode の Clang | Bazel 0.11.0 |
tensorflow-1.8.0 | 2.7、3.3~3.6 | xcode の Clang | Bazel 0.10.1 |
tensorflow-1.7.0 | 2.7、3.3~3.6 | xcode の Clang | Bazel 0.10.1 |
tensorflow-1.6.0 | 2.7、3.3~3.6 | xcode の Clang | Bazel 0.8.1 |
tensorflow-1.5.0 | 2.7、3.3~3.6 | xcode の Clang | Bazel 0.8.1 |
tensorflow-1.4.0 | 2.7、3.3~3.6 | xcode の Clang | Bazel 0.5.4 |
tensorflow-1.3.0 | 2.7、3.3~3.6 | xcode の Clang | Bazel 0.4.5 |
tensorflow-1.2.0 | 2.7、3.3~3.6 | xcode の Clang | Bazel 0.4.5 |
tensorflow-1.1.0 | 2.7、3.3~3.6 | xcode の Clang | Bazel 0.4.2 |
tensorflow-1.0.0 | 2.7、3.3~3.6 | xcode の Clang | Bazel 0.4.2 |
GPU
バージョン | Python バージョン | コンパイラ | ビルドツール | cuDNN | CUDA |
---|---|---|---|---|---|
tensorflow_gpu-1.1.0 | 2.7、3.3~3.6 | xcode の Clang | Bazel 0.4.2 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 2.7、3.3~3.6 | xcode の Clang | Bazel 0.4.2 | 5.1 | 8 |