以前、古いグラフィックボード(Geforce GTX 660 Ti)のためにUbuntuでTensorFlow 1.12をソースからビルドした記事を書きました。
このときのOSはUbuntu 16.04 LTSでしたが、16.04 LTS は 2021年4月にサポートが切れます。このため、Ubuntu 18.04 LTSにTensorFlow環境を作りたいと思い始めました。
今回、Geforce GTX 745というちょっと変わったグラフィックボードを入手したこともあり、これに合わせてUbuntu 18.04 LTSでTensorFlowをビルドしたところ、はまりポイントがあったのでご紹介したいと思います。
ビルド環境
ハードウェア
- OS:Ubuntu 16.04 LTS
- CPU:Core i7-2600K
- メモリ:DDR3 16GB
- グラフィックカード:Geforce GTX 745(Compute Capability 5.0)
ソフトウェア
- TensorFlow 1.13
- Python 3.6.9
- GCC 7.5.0
- Bazel 0.21.0
- cuDNN 7.4.2
- CUDA 10.0
はまりポイント
冒頭にご紹介した記事と同様の手順で準備を進め、bazelでビルドを実施したところ下記のエラーが発生しました。
ERROR:
/home/toomath/tensorflow/tensorflow/tools/pip_package/BUILD:149:1: no such package
'@icu//': java.io.IOException: Error downloading
https://mirror.bazel.build/github.com/unicode-org/icu/archive/release-62-1.tar.gz,
https://github.com/unicode-org/icu/archive/release-62-1.tar.gz to
/home/toomath/.cache/bazel/_bazel_toomath/
2a9cb56e445ada6084699a86fc509fed/external/icu/release-62-1.tar.gz:
Checksum was 86b85fbf1b251d7a658de86ce5a0c8f34151027cc60b01e1b76f167379acf181
but wanted e15ffd84606323cbad5515bf9ecdf8061cc3bf80fb883b9e6aa162e485aa9761
and referenced by '//tensorflow/tools/pip_package:licenses'
そこでネットを検索したところ下記のページが見つかったのですが、最初意味が分からなかったのでスルーしてしまい、TensorFlowやCUDAやcuDNNやbazelのバージョンをとっかえひっかえする長い旅に出ることになってしまいました。
最終的に上記のエラーが出ない TensorFlow 2.1.0でビルドに成功したものの、手元にあるTensorFlow関連のPythonソースがほとんど使えないことに絶望し、何とか TensorFlow 1.x が使いたいと考えて再び 1.13 に挑戦しました。
今度はちゃんと上記のページを読んだところ対処方法がわかり無事 1.13 をビルドすることができた次第です。
せっかくなのでここに対処方法を記したいと思います。
はまりポイントの対処方法
どうやらrelease-62-1.tar.gzというファイルのチェックサムの値が想定していた値と異なることが原因のようです。このため、ローカルに保持している想定するチェックサムの値を下記のように書き換えます。書き換えたら再びbazelでビルドします。
- <tensorflowをcloneしたディレクトリ>/third_party/icu/workspace.bzlを開く
- 下記のように修正する
修正前:
sha256 = "e15ffd84606323cbad5515bf9ecdf8061cc3bf80fb883b9e6aa162e485aa9761",
修正後:
sha256 = "86b85fbf1b251d7a658de86ce5a0c8f34151027cc60b01e1b76f167379acf181",
その他TensorFlow関連で気づいたこと
Compute Capability 5.0だとビルドなしでTensorFlowのGPUが使えない
私今までCompute Capabilityが3.5以上ならビルドなしでTensorFlowでGPUが使えると思いこんでいました。しかし、GPUのハードウェア要件を見ると下記のように記載がありました。
NVIDIA® GPU カード(CUDA® アーキテクチャ 3.5、3.7、5.2、6.0、6.1、7.0、7.0 以降)。
5.0がない!なぜかバージョンがとびとびになっています。。5.0はダメなのか。。TensorFlowのDockerもダメっぽいです。。
Compute Capability 3.0でビルドしたTensorFlowは Compute Capability 5.0 のGPUで使えない
もしかしたらGeforce GTX 660 Ti(Compute Capability 3.0)でも使うかもしれないと思ってTensorFlowのビルド時、Compute Capability=3.0を指定しました。
すると、Compute Capability 5.0のGeforce GTX 745だとGPU処理部分で固まりました。。
以上、TensorFlow 1.13のビルドではまったお話でした。紆余曲折ありましたがようやく快適なTensorFlow環境ができました。苦労した分、今はハッピーです!