ソースからビルドする

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

Linux および macOS のセットアップ

次のビルド ツールをインストールして、開発環境を構成します。

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

Ubuntu

sudo apt install python3-dev python3-pip

macOS

Xcode 9.2以降が必要です。

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

brew install python

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

pip install -U --user pip

Bazel をインストールする

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

Bazelisk が使用できない場合は、 Bazel を手動でインストールできます。 TensorFlow の.bazelversionファイルから正しい Bazel バージョンを必ずインストールしてください。

Clang は、LLVM に基づいて C++ でコンパイルされる C/C++/Objective-C コンパイラーです。これは、TensorFlow 2.13 以降で TensorFlow を構築するためのデフォルトのコンパイラです。現在サポートされているバージョンは LLVM/Clang 17 です。

LLVM Debian/Ubuntu ナイトリー パッケージは、自動インストール スクリプトと、Linux への手動インストール用のパッケージを提供します。 llvm apt リポジトリをパッケージ ソースに手動で追加する場合は、必ず次のコマンドを実行してください。

sudo apt-get update && sudo apt-get install -y llvm-17 clang-17

この場合、 /usr/lib/llvm-17/bin/clangが Clang への実際のパスになります。

あるいは、事前に構築されたClang + LLVM 17 をダウンロードして解凍することもできます。

以下は、ダウンロードした Clang + LLVM 17 バイナリを Debian/Ubuntu オペレーティング システム上でセットアップする手順の例です。

  1. 目的の宛先ディレクトリに変更します: cd <desired directory>

  2. アーカイブ ファイルをロードして抽出します...(アーキテクチャに適しています):

    wget https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.2/clang+llvm-17.0.2-x86_64-linux-gnu-ubuntu-22.04.tar.xz
    
    tar -xvf clang+llvm-17.0.2-x86_64-linux-gnu-ubuntu-22.04.tar.xz
    

  3. 抽出した内容 (ディレクトリとファイル) を/usrにコピーします (sudo 権限が必要な場合があり、正しいディレクトリはディストリビューションによって異なる場合があります)。これにより、Clang と LLVM が効果的にインストールされ、パスに追加されます。以前のインストールがある場合を除き、何も置き換える必要はありません。以前のインストールがある場合は、ファイルを置き換える必要があります。

    cp -r clang+llvm-17.0.2-x86_64-linux-gnu-ubuntu-22.04/* /usr

  4. 取得した Clang + LLVM 17 バイナリのバージョンを確認します。

    clang --version

  5. これで、 /usr/bin/clangが新しい Clang への実際のパスになりました。 ./configureスクリプトを実行するか、環境変数CCおよびBAZEL_COMPILERこのパスに手動で設定できます。

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のサポート

v.2.18.0から

GPU サポートの場合は、構成時にcuda=Yを設定し、必要に応じて CUDA と cuDNN のバージョンを指定します。 Bazel は、CUDA および CUDNN パッケージを自動的にダウンロードするか、必要に応じてローカル ファイル システム上の CUDA/CUDNN/NCCL 再配布をポイントします。

v.2.18.0より前

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

最適化

コンパイル最適化フラグの場合、デフォルト ( -march=native ) では、マシンの CPU タイプに合わせて生成されたコードが最適化されます。ただし、別の CPU タイプ用に TensorFlow を構築する場合は、より具体的な最適化フラグを検討してください。例については、 GCC マニュアルを確認してください。

事前構成された構成

bazel buildコマンドに追加できる、事前に構成されたビルド構成がいくつか用意されています。次に例を示します。

  • --config=dbgデバッグ情報を使用してビルドします。詳細については、 CONTRIBUTING.md を参照してください。
  • --config=mklインテル® MKL-DNNのサポート。
  • --config=monolithic — ほとんど静的なモノリシック ビルドの構成。

pip パッケージをビルドしてインストールする

Bazel ビルド オプション

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

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

公式の TensorFlow パッケージは、 manylinux2014 パッケージ標準に準拠する Clang ツールチェーンを使用して構築されています。

パッケージをビルドする

pip パッケージをビルドするには、 --repo_env=WHEEL_NAMEフラグを指定する必要があります。指定した名前に応じて、パッケージが作成されます。例:

tensorflow CPU パッケージをビルドするには:

bazel build //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow_cpu

tensorflow GPU パッケージをビルドするには:

bazel build //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow --config=cuda --config=cuda_wheel

tensorflow TPU パッケージをビルドするには:

bazel build //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow_tpu --config=tpu

夜間パッケージをビルドするには、 tensorflowの代わりにtf_nightlyを設定します。たとえば、CPU 夜間パッケージをビルドします。

bazel build //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tf_nightly_cpu

その結果、生成されたホイールは次の場所に配置されます。

bazel-bin/tensorflow/tools/pip_package/wheel_house/

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

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

pip install bazel-bin/tensorflow/tools/pip_package/wheel_house/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 パッケージをビルドします。

  1. オプション: ビルドを構成します。これにより、ユーザーはビルド構成の質問に答えるように求められます。
  2. pipパッケージをビルドします。
  3. コンテナ外のファイルの所有権パーミッションを調整します。
./configure  # if necessary

bazel build //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow_cpu --config=opt
`
chown $HOST_PERMS bazel-bin/tensorflow/tools/pip_package/wheel_house/tensorflow-version-tags.whl

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

pip uninstall tensorflow  # remove current version

pip install bazel-bin/tensorflow/tools/pip_package/wheel_house/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® ドライバーのみが必要なため ( NVIDIA® CUDA® Toolkit をインストールする必要はありません)、TensorFlow の GPU サポートを構築する最も簡単な方法です。 nvidia-docker をセットアップするには、 GPU サポート ガイドと TensorFlow 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 //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow --config=cuda --config=cuda_wheel --config=opt

chown $HOST_PERMS bazel-bin/tensorflow/tools/pip_package/wheel_house/tensorflow-version-tags.whl

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

pip uninstall tensorflow  # remove current version

pip install bazel-bin/tensorflow/tools/pip_package/wheel_house/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.18.0 3.9-3.12クラン 17.0.6バゼル6.5.0
テンソルフロー-2.17.0 3.9-3.12クラン 17.0.6バゼル6.5.0
テンソルフロー-2.16.1 3.9~3.12クラン 17.0.6バゼル6.5.0
テンソルフロー-2.15.0 3.9~3.11クラン 16.0.0バゼル6.1.0
テンソルフロー-2.14.0 3.9~3.11クラン 16.0.0バゼル6.1.0
テンソルフロー-2.13.0 3.8~3.11クラン 16.0.0バゼル5.3.0
テンソルフロー-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のバージョンコンパイラビルドツールクドンCUDA
テンソルフロー-2.18.0 3.9~3.12クラン 17.0.6バゼル6.5.0 9.3 12.5
テンソルフロー-2.17.0 3.9-3.12クラン 17.0.6バゼル6.5.0 8.9 12.3
テンソルフロー-2.16.1 3.9-3.12クラン 17.0.6バゼル6.5.0 8.9 12.3
テンソルフロー-2.15.0 3.9-3.11クラン 16.0.0バゼル6.1.0 8.9 12.2
テンソルフロー-2.14.0 3.9~3.11クラン 16.0.0バゼル6.1.0 8.7 11.8
テンソルフロー-2.13.0 3.8~3.11クラン 16.0.0バゼル5.3.0 8.6 11.8
テンソルフロー-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

macOS

CPU

バージョンPythonのバージョンコンパイラビルドツール
テンソルフロー-2.16.1 3.9~3.12 Xcode 13.6 からの Clangバゼル6.5.0
テンソルフロー-2.15.0 3.9~3.11 Xcode 10.15 からの Clangバゼル6.1.0
テンソルフロー-2.14.0 3.9~3.11 Xcode 10.15 からの Clangバゼル6.1.0
テンソルフロー-2.13.0 3.8~3.11 Xcode 10.15 からの Clangバゼル5.3.0
テンソルフロー-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のバージョンコンパイラビルドツールクドンCUDA
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