目的
Tensorflowの2.7をFedora 35でソースビルドする。
環境
- SW
- Fedora 35 x86_64
- Python 3.10.0
- GCC 11.2.1 20210728
- CUDA 11.5 + cuDNN v8.3.1
- HW
- CPU AMD Ryzen 7 1700
- GPU GeForce GTX 1070
事前の準備
CUDA、cuDNNのインストール
これは、以前と同様。
RPM FusionからCUDAを、NVIDIAよりcuDNNをそれぞれインストールする。
BAZELのインストール
FedoraのCOPR repositoryからインストールが可能。
3.x系と4.x系が選択可能なので3.x系をインストールする。
TensorFlow v2.7(後述のTensorFlow I/Oも含めて)のビルドにはBazel
v3.7.2が必要(4.x系の場合、TensorFlow I/Oのビルドでエラーとなるため)。
しかし、現時点(2021.12.08)ではバージョンがv3.7.1。v3.7.2をソースコードからビルドするにはGCCのバージョンダウン(ソースビルド)が必要になる(Fedora 35のGCC11ではビルドができないため)。今回はv3.7.1で押し通すことにする。
TensorFlow I/Oのビルド
TensorFlow
v2.7をビルド後、wheelパッケージをインストールする際にtensorflow_io_gcs_filesystemとtensorflow_ioのインストールを要求される(依存関係)。
しかしながら、Python3.10のパッケージは用意されていないためインストールできない。そこで、TensorFlow
I/Oをビルド、io、io_gcs_filesystemのwheelパッケージも作成する。
なお、TensorFlow I/OのビルドにはTensorFlow
v2.7が必要なため、デッドロックしてしまう。。。
ERROR: Could not find a version that satisfies the requirement tensorflow<2.8.0,>=2.7.0 (from versions: none)
— nb.o (@Nextremer_nb_o) December 5, 2021
あああ、これか。。。 https://t.co/qYYSBywvrR
なんでだよ。
さらにBazelが利用するモジュールがPython3.10に対応していないため、ビルドでエラーが発生してしまう。
ここで、TensorFlow I/Oのビルドは2つの手順に分かれている(TensorFlow I/Oのビルド手順を参照)。
- Bazelを使ったビルド(共有ライブラリの作成)
- Wheelパッケージの作成
このため、ビルドはPython3.9環境で行い、パッケージ作成時にPython3.10環境に切り替えて行うこととする。Python3.9環境であれば、TensorFlowも公式のパッケージが提供されているのでデッドロックも回避できる。
TensorFlow I/OのGithub Actionがこのような手順になっていたので参考にした。
(じゃあ、Python3.9環境でよくない?というのは置いておく)
まず、Python3.9をインストールし、virtualenvwrapper(virtualenv)でビルド用環境を作成し、必要なモジュールをインストールしておく。
TensorFlow I/Oのリポジトリをクローンする。
今回はPython3.10ビルドに対応となっていたmainブランチとする(でも対応していないけど、、、)。
先程述べたBazelのバージョンが一致しない問題があるので、.bazelversionの内容を変更しておく。
ビルド。
wheelパッケージの作成。
setup.pyがpython3.10をサポートしていないので修正。
https://t.co/4T7IIs7w6T
— nb.o (@Nextremer_nb_o) December 7, 2021
🥲<3.10
TensorFlowをインストールするためのPython3.10環境を作成、切り替えて、wheelパッケージを作成。できたパッケージをインストール。
TensorFlowのビルド
さて、あとは本題。
TensorFlowのリポジトリをクローンしてv2.7.0をチェックアウト。
Python3.10ではビルドが失敗するため、以下のコミットをcherry-pickする。
Bazel3.7.1でビルドするために.bazelversionを修正。
configureの実行。
ccacheをインストールしているとビルドに失敗するため、host
compilerにはGCCを指定する。
ビルド。あとは待つだけ。
ビルドが完了すれば、wheelパッケージを作成してインストールする!
確認
- tf.__version__が2.7であること。
- GPUデバイスを認識していること
OK〜✌
0 件のコメント:
コメントを投稿