ソースから TensorFlow pipパッケージをビルドし、Ubuntu Linux および macOS にインストールします。この手順は他のシステムでも機能する可能性がありますが、Ubuntu と macOS でのみテストおよびサポートされています。
Linux および macOS のセットアップ
次のビルド ツールをインストールして、開発環境を構成します。
Python と TensorFlow パッケージの依存関係をインストールする
Ubuntu
sudo apt install python3-dev python3-pip
マックOS
Xcode 9.2 以降が必要です。
Homebrewパッケージ マネージャーを使用してインストールします。
brew install python
TensorFlow pipパッケージの依存関係をインストールします (仮想環境を使用している場合は、 --user
引数を省略します)。
pip install -U --user pip numpy wheel packaging requests opt_einsum
pip install -U --user keras_preprocessing --no-deps
ベゼルを取り付ける
TensorFlow をビルドするには、Bazel をインストールする必要があります。 Bazelisk は、Bazel をインストールする簡単な方法であり、TensorFlow の正しい Bazel バージョンを自動的にダウンロードします。使いやすくするために、 bazel
実行可能ファイルとして Bazelisk をPATH
に追加します。
Bazelisk が利用できない場合は、 Bazel を手動でインストールできます。 TensorFlow の.bazelversionファイルから正しい 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 ビルドは、リポジトリのルート ディレクトリにある.bazelrc
ファイルによって構成されます。 ./configure
または./configure.py
スクリプトを使用して、一般的な設定を調整できます。
構成を変更する必要がある場合は、リポジトリのルート ディレクトリから./configure
スクリプトを実行します。このスクリプトは、TensorFlow の依存関係の場所を尋ね、追加のビルド構成オプション (コンパイラ フラグなど) を尋ねます。詳細については、サンプル セッションのセクションを参照してください。
./configure
このスクリプトの Python バージョン./configure.py
もあります。仮想環境を使用している場合、 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
— ほぼ静的なモノリシック ビルドの構成。
pip パッケージをビルドしてインストールする
pip パッケージは 2 つのステップでビルドされます。 bazel build
コマンドは、「パッケージ ビルダー」プログラムを作成します。次に、package-builder を実行してパッケージを作成します。
パッケージビルダーをビルドする
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
Bazel ビルド オプション
ビルド オプションについては、Bazelコマンドライン リファレンスを参照してください。
ソースから TensorFlow をビルドすると、大量の RAM が使用される可能性があります。システムのメモリに制約がある場合は、Bazel の RAM 使用量を--local_ram_resources=2048
で制限します。
公式の TensorFlow パッケージは、 manylinux2014 パッケージ標準に準拠する GCC ツールチェーンで構築されています。
パッケージをビルドする
bazel build
コマンドは、 build_pip_package
という名前の実行可能ファイルを作成します。これは、 pip
パッケージをビルドするプログラムです。以下に示すように実行可能ファイルを実行して、 /tmp/tensorflow_pkg
ディレクトリに.whl
パッケージをビルドします。
リリース ブランチからビルドするには:
./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 # if necessary
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 は TensorFlow の GPU サポートを構築する最も簡単な方法です。ホストマシンにはNVIDIA® ドライバーしか必要ないためです ( NVIDIA® CUDA® Toolkitをインストールする必要はありません)。 GPU サポート ガイドと TensorFlow Docker ガイドを参照して、 nvidia-dockerをセットアップします (Linux のみ)。
次の例では、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 # if necessary
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 バージョン | コンパイラ | ビルドツール |
---|---|---|---|
テンソルフロー-2.12.0 | 3.8-3.11 | GCC 9.3.1 | バゼル 5.3.0 |
テンソルフロー-2.11.0 | 3.7-3.10 | GCC 9.3.1 | バゼル 5.3.0 |
テンソルフロー-2.10.0 | 3.7-3.10 | GCC 9.3.1 | バゼル 5.1.1 |
テンソルフロー-2.9.0 | 3.7-3.10 | GCC 9.3.1 | バゼル 5.0.0 |
テンソルフロー-2.8.0 | 3.7-3.10 | GCC 7.3.1 | バゼル 4.2.1 |
テンソルフロー-2.7.0 | 3.7-3.9 | GCC 7.3.1 | バゼル 3.7.2 |
テンソルフロー-2.6.0 | 3.6-3.9 | GCC 7.3.1 | バゼル 3.7.2 |
テンソルフロー-2.5.0 | 3.6-3.9 | GCC 7.3.1 | バゼル 3.7.2 |
テンソルフロー-2.4.0 | 3.6-3.8 | GCC 7.3.1 | バゼル 3.1.0 |
テンソルフロー-2.3.0 | 3.5-3.8 | GCC 7.3.1 | バゼル 3.1.0 |
テンソルフロー-2.2.0 | 3.5-3.8 | GCC 7.3.1 | バゼル 2.0.0 |
テンソルフロー-2.1.0 | 2.7、3.5-3.7 | GCC 7.3.1 | バゼル 0.27.1 |
テンソルフロー-2.0.0 | 2.7、3.3-3.7 | GCC 7.3.1 | バゼル 0.26.1 |
テンソルフロー-1.15.0 | 2.7、3.3-3.7 | GCC 7.3.1 | バゼル 0.26.1 |
テンソルフロー-1.14.0 | 2.7、3.3-3.7 | GCC 4.8 | バゼル 0.24.1 |
テンソルフロー-1.13.1 | 2.7、3.3-3.7 | GCC 4.8 | バゼル 0.19.2 |
テンソルフロー-1.12.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.15.0 |
テンソルフロー-1.11.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.15.0 |
テンソルフロー-1.10.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.15.0 |
テンソルフロー-1.9.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.11.0 |
テンソルフロー-1.8.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.10.0 |
テンソルフロー-1.7.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.10.0 |
テンソルフロー-1.6.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.9.0 |
テンソルフロー-1.5.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.8.0 |
テンソルフロー-1.4.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.5.4 |
テンソルフロー-1.3.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.4.5 |
テンソルフロー-1.2.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.4.5 |
テンソルフロー-1.1.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.4.2 |
テンソルフロー-1.0.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.4.2 |
GPU
バージョン | Python バージョン | コンパイラ | ビルドツール | cuDNN | クーダ |
---|---|---|---|---|---|
テンソルフロー-2.12.0 | 3.8-3.11 | GCC 9.3.1 | バゼル 5.3.0 | 8.6 | 11.8 |
テンソルフロー-2.11.0 | 3.7-3.10 | GCC 9.3.1 | バゼル 5.3.0 | 8.1 | 11.2 |
テンソルフロー-2.10.0 | 3.7-3.10 | GCC 9.3.1 | バゼル 5.1.1 | 8.1 | 11.2 |
テンソルフロー-2.9.0 | 3.7-3.10 | GCC 9.3.1 | バゼル 5.0.0 | 8.1 | 11.2 |
テンソルフロー-2.8.0 | 3.7-3.10 | GCC 7.3.1 | バゼル 4.2.1 | 8.1 | 11.2 |
テンソルフロー-2.7.0 | 3.7-3.9 | GCC 7.3.1 | バゼル 3.7.2 | 8.1 | 11.2 |
テンソルフロー-2.6.0 | 3.6-3.9 | GCC 7.3.1 | バゼル 3.7.2 | 8.1 | 11.2 |
テンソルフロー-2.5.0 | 3.6-3.9 | GCC 7.3.1 | バゼル 3.7.2 | 8.1 | 11.2 |
テンソルフロー-2.4.0 | 3.6-3.8 | GCC 7.3.1 | バゼル 3.1.0 | 8.0 | 11.0 |
テンソルフロー-2.3.0 | 3.5-3.8 | GCC 7.3.1 | バゼル 3.1.0 | 7.6 | 10.1 |
テンソルフロー-2.2.0 | 3.5-3.8 | GCC 7.3.1 | バゼル 2.0.0 | 7.6 | 10.1 |
テンソルフロー-2.1.0 | 2.7、3.5-3.7 | GCC 7.3.1 | バゼル 0.27.1 | 7.6 | 10.1 |
テンソルフロー-2.0.0 | 2.7、3.3-3.7 | GCC 7.3.1 | バゼル 0.26.1 | 7.4 | 10.0 |
tensorflow_gpu-1.15.0 | 2.7、3.3-3.7 | GCC 7.3.1 | バゼル 0.26.1 | 7.4 | 10.0 |
tensorflow_gpu-1.14.0 | 2.7、3.3-3.7 | GCC 4.8 | バゼル 0.24.1 | 7.4 | 10.0 |
tensorflow_gpu-1.13.1 | 2.7、3.3-3.7 | GCC 4.8 | バゼル 0.19.2 | 7.4 | 10.0 |
tensorflow_gpu-1.12.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.15.0 | 7 | 9 |
tensorflow_gpu-1.11.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.15.0 | 7 | 9 |
tensorflow_gpu-1.10.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.15.0 | 7 | 9 |
tensorflow_gpu-1.9.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.11.0 | 7 | 9 |
tensorflow_gpu-1.8.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.10.0 | 7 | 9 |
tensorflow_gpu-1.7.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.9.0 | 7 | 9 |
tensorflow_gpu-1.6.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.9.0 | 7 | 9 |
tensorflow_gpu-1.5.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.8.0 | 7 | 9 |
tensorflow_gpu-1.4.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.5.4 | 6 | 8 |
tensorflow_gpu-1.3.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.4.5 | 6 | 8 |
tensorflow_gpu-1.2.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.4.5 | 5.1 | 8 |
tensorflow_gpu-1.1.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.4.2 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 2.7、3.3-3.6 | GCC 4.8 | バゼル 0.4.2 | 5.1 | 8 |
マックOS
CPU
バージョン | Python バージョン | コンパイラ | ビルドツール |
---|---|---|---|
テンソルフロー-2.12.0 | 3.8-3.11 | xcode 10.15 からの Clang | バゼル 5.3.0 |
テンソルフロー-2.11.0 | 3.7-3.10 | xcode 10.14 からの Clang | バゼル 5.3.0 |
テンソルフロー-2.10.0 | 3.7-3.10 | xcode 10.14 からの Clang | バゼル 5.1.1 |
テンソルフロー-2.9.0 | 3.7-3.10 | xcode 10.14 からの Clang | バゼル 5.0.0 |
テンソルフロー-2.8.0 | 3.7-3.10 | xcode 10.14 からの Clang | バゼル 4.2.1 |
テンソルフロー-2.7.0 | 3.7-3.9 | xcode 10.11 からの Clang | バゼル 3.7.2 |
テンソルフロー-2.6.0 | 3.6-3.9 | xcode 10.11 からの Clang | バゼル 3.7.2 |
テンソルフロー-2.5.0 | 3.6-3.9 | xcode 10.11 からの Clang | バゼル 3.7.2 |
テンソルフロー-2.4.0 | 3.6-3.8 | xcode 10.3 からの Clang | バゼル 3.1.0 |
テンソルフロー-2.3.0 | 3.5-3.8 | xcode 10.1 からの Clang | バゼル 3.1.0 |
テンソルフロー-2.2.0 | 3.5-3.8 | xcode 10.1 からの Clang | バゼル 2.0.0 |
テンソルフロー-2.1.0 | 2.7、3.5-3.7 | xcode 10.1 からの Clang | バゼル 0.27.1 |
テンソルフロー-2.0.0 | 2.7、3.5-3.7 | xcode 10.1 からの Clang | バゼル 0.27.1 |
テンソルフロー-2.0.0 | 2.7、3.3-3.7 | xcode 10.1 からの Clang | バゼル 0.26.1 |
テンソルフロー-1.15.0 | 2.7、3.3-3.7 | xcode 10.1 からの Clang | バゼル 0.26.1 |
テンソルフロー-1.14.0 | 2.7、3.3-3.7 | xcode から Clang | バゼル 0.24.1 |
テンソルフロー-1.13.1 | 2.7、3.3-3.7 | xcode から Clang | バゼル 0.19.2 |
テンソルフロー-1.12.0 | 2.7、3.3-3.6 | xcode から Clang | バゼル 0.15.0 |
テンソルフロー-1.11.0 | 2.7、3.3-3.6 | xcode から Clang | バゼル 0.15.0 |
テンソルフロー-1.10.0 | 2.7、3.3-3.6 | xcode から Clang | バゼル 0.15.0 |
テンソルフロー-1.9.0 | 2.7、3.3-3.6 | xcode から Clang | バゼル 0.11.0 |
テンソルフロー-1.8.0 | 2.7、3.3-3.6 | xcode から Clang | バゼル 0.10.1 |
テンソルフロー-1.7.0 | 2.7、3.3-3.6 | xcode から Clang | バゼル 0.10.1 |
テンソルフロー-1.6.0 | 2.7、3.3-3.6 | xcode から Clang | バゼル 0.8.1 |
テンソルフロー-1.5.0 | 2.7、3.3-3.6 | xcode から Clang | バゼル 0.8.1 |
テンソルフロー-1.4.0 | 2.7、3.3-3.6 | xcode から Clang | バゼル 0.5.4 |
テンソルフロー-1.3.0 | 2.7、3.3-3.6 | xcode から Clang | バゼル 0.4.5 |
テンソルフロー-1.2.0 | 2.7、3.3-3.6 | xcode から Clang | バゼル 0.4.5 |
テンソルフロー-1.1.0 | 2.7、3.3-3.6 | xcode から Clang | バゼル 0.4.2 |
テンソルフロー-1.0.0 | 2.7、3.3-3.6 | xcode から Clang | バゼル 0.4.2 |
GPU
バージョン | Python バージョン | コンパイラ | ビルドツール | cuDNN | クーダ |
---|---|---|---|---|---|
tensorflow_gpu-1.1.0 | 2.7、3.3-3.6 | xcode から Clang | バゼル 0.4.2 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 2.7、3.3-3.6 | xcode から Clang | バゼル 0.4.2 | 5.1 | 8 |