20200809のTensorFlowに関する記事は1件です。

TensorFlow 2.3.0をCUDA11+cuDNN8向けに強制的にビルドする方法

TensorFlowでGPUを利用するためには、互換性のあるバージョンのCUDAやcuDNNを利用する必要があり、2020/8/9時点で最新のTensorFlow 2.3.0も、CUDA 11やcuDNN 8には対応していません。
そのため、ソースコードからビルドしても互換性の問題で失敗します。

…が、利用している環境が「CUDA 11 + cuDNN 8」になっていて、それでもTensorFlowでGPUを使いたい人向けに「強制的に」TensorFlow 2.3.0をCUDA 11 + cuDNN 8向けにビルドする方法を残しておきます。
なお「本来なら対応していない」バージョンの組み合わせなので、全てが正常に動作する保証はありません。簡単なCNNモデルの学習や推論を試した限りでは正常に動作していますが、実験的な扱いに留めておくことをおすすめします。(CUDA11+cuDNN8に正式対応するまでの暫定的な処置)

環境情報

ビルドに利用した環境です。CUDAやcuDNNのフォルダなど、事前にパスを通した状態になっています。

  • Windows 10 Ver1909 (64bit)
  • Visual Studio Community 2019 Ver 16.5.4
  • Python 3.8.2
  • MSYS2(pacman -S git patch unzip で必要なパッケージを導入済み)
  • Bazel 3.4.1 (3.1.0以上のバージョンを使う必要あり)
  • CUDA 11.0.3
  • cuDNN 8.0.2

ビルド用のフォルダ構成など

今回はS:\build\build_tf230 フォルダ配下にTensorFlowのソースコードをダウンロードしてビルドしています。Pythonの仮想環境も、TensorFlowビルド用に用意します。

S:/build/build_tf230  # 作業フォルダRoot
 + tensorflow  # gitで取得してくるソースコード
 + venv        # Python仮想環境
 + wheelhouse  # 作成したwhlファイルを格納するフォルダ

ビルド手順

x64 Native Tools Command Prompt for VS 2019 を起動して以下の手順でビルドを行います。

# 仮想環境を作成して有効化する
python -m venv s:\build\build_tf230\venv
cd /d s:\build\build_tf230
.\venv\Scripts\activate.bat

# 必要なパッケージのインストール
# 注意:最新の1.19.xシリーズのNumPyを使うとビルドに失敗するので注意
python -m pip install --upgrade pip
pip install numpy==1.18.5
pip install six wheel
pip install keras_applications==1.0.8 --no-deps
pip install keras_preprocessing==1.1.2 --no-deps

# ソースコード取得(v2.3.0のタグ指定)
git clone -b v2.3.0 https://github.com/tensorflow/tensorflow.git
cd tensorflow

# 環境によってはコマンドのパラメーターが長くなりすぎてエラーになるので不要な環境変数を削除
set _OLD_VIRTUAL_PATH=

# ビルド構成の設定
# CUDA support: Y
# CUDA compute capabilities: 7.5 (利用環境に合わせて変更)
# Optimization: /arch:AVX2 (利用環境に合わせて変更)
# それ以外はデフォルト設定(Enter)
python ./configure.py

# CUDA 11を使っていると、次のconfig.hの78行目の部分でエラーになる。
# C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include\thrust\system\cuda\config.h
# CUBバージョンの互換性チェック部分だが、このチェックは「THRUST_IGNORE_CUB_VERSION_CHECK」を定義すればスキップ可能。
# bazelのパラメーターでTHRUST_IGNORE_CUB_VERSION_CHECKを有効にしてTensorFlowをビルド。
bazel build --config=opt --config=avx2_win --config=short_logs --config=cuda --define=no_tensorflow_py_deps=true --copt=-DTHRUST_IGNORE_CUB_VERSION_CHECK --copt=-nvcc_options=disable-warnings //tensorflow/tools/pip_package:build_pip_package

# パッケージの作成(wheelhouseフォルダにパッケージを作成)
# 数分間画面が更新されないので心配になりますが、きちんと処理されているのでしばらく待ちましょう
bazel-bin\tensorflow\tools\pip_package\build_pip_package ..\wheelhouse

これで完了です。
ポイントとしては、bazelのビルドパラメーターに--copt=-DTHRUST_IGNORE_CUB_VERSION_CHECK を追加して、CUDA 11のCUB互換チェックをスキップさせることです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む