2020年3月28日土曜日

Fedora 31でTensorflow 2.2-rc1(CUDA10.2 cuDNN7.6.5)をビルドする

目的


Tensorflowの2.2-rc1をFedora 30でソースビルドする。
2.2の正式版リリースに向けての準備と備忘録。


環境


  • Fedora 31 x86_64
  • python 3.7.6(virtualenv)
  • CUDA 10.2 + cuDNN 7.6.5
  • CPU AMD Ryzen 7 1700
  • GPU GeForce GTX 1070


事前の準備


GCC8のビルド


前回の記事と同様、CUDA 10.2がサポートするGCCは8で、Fedora 31のGCC9ではビルドができない。このため、まずはGCC8のビルドを行う。
GCCのビルドについては、以前の記事を参照。


GCC8.4のソースダウンロード&ビルド


以下でビルドを行う。


specsファイルの作成


コンパイルしたGCC7でビルドした際に、適切な動的リンクライブラリ(libstdc++.so)がリンクされるようにSPECEファイルを修正する。


Environment Modulesの設定


GCC8をEnvironment Modulesで切り替えられるようにする。/etc/modulefiles 配下に、gcc8xのファイルを作成する。
※筆者の環境にはソースビルドしたGCC5、GCC7がある。


Bazelのビルド


Bazelをソースビルドする(リポジトリのバージョンだとTensorflowが期待するバージョンと一致しないことがあるため)。2.2-rc1はBazel2.0.0が必要なため、ソースビルドした。

公式のソースビルド方法はここを参照。手順どおりであり詳細の説明は割愛。


CUDA、cuDNNのインストール


CUDA: 10.2、cuDNN: 7.6.5をインストール。CUDAはRPM Fusion Howto/ CUDA を参考にインストールを行う。cuDNNはNVIDIAのダウンロードサイトからダウンロード、インストールを行う。


Tensorflowのビルド


さて、本題。TensorFlow 2.2-rc1をビルドする。


virtualenvの設定


まずはvirtualenv(virtualenvwapper)でTensorflow用の仮想Python環境を作成し、必要なモジュールをインストールする。


ビルド


Githubからソースを取得し、configureスクリプト実行し、ビルドを行う。

  • CUDAのサポートを有効とする。
  • Host compilerにGCC8のgccのパスを指定してあげる。
  • ビルドオプションには"--config=v2"と"--config=nonccl "(NCCLのライブラリをインストールしたがビルドエラーとなったので外す)を指定。
  • 日本語環境では依存関係のダウンロードで失敗したので、ビルド前に"LANG=C"で回避。

なお、エラーは以下であった。



インストール確認


  • tf.__version__が2.2-rc1であること。
  • GPUデバイスを認識していること。


OK!

0 件のコメント:

コメントを投稿