RTX3070などの30xx系GPU かつ CUDA11.3 インストール済みのホストPC上でTensorFlow v1.15.5を動かす

3 min read読了の目安(約3500字

1. はじめに

NVIDIA のドライバをアップグレードして 465.19.01 へ上げた頃からなのか、apt upgrade を叩いたときからなのかが正確には分かりませんが、2週間前頃からDockerのランタイムを経由するとGPUの認識に5分〜10分ほど待たされるようになり、普段であれば5秒ほどで終わる処理が無限に待たされる感覚に襲われていました。私の環境は下記のとおりです。Ubuntu20.04, GeForce RTX3070

Wed May 26 00:59:02 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 465.19.01    Driver Version: 465.19.01    CUDA Version: 11.3     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  On   | 00000000:01:00.0  On |                  N/A |
|  0%   55C    P8    23W / 220W |    423MiB /  7959MiB |      4%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
Client: Docker Engine - Community
 Version:           20.10.6
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        370c289
 Built:             Fri Apr  9 22:47:17 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.6
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       8728dd2
  Built:            Fri Apr  9 22:45:28 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

M4Depth という最新の深度推定モデルの動作確認をしたく、意地になって TensorFlow v1.15.5CUDA 11.3 ビルドを実施していたのですが、CUDA周りのバージョンと内部実装の齟齬のオンパレードで苦戦していました。公式のコードを改造しながらエラーをひとつひとつ潰し込みしていたのですが、たまたま調査の過程で nividia-tensorflow という pip wheel インストーラを発見し、試してみた所、Dockerを介さずピュアに上記のホストPC環境へ TensorFlow v1.15.5 の導入ができ、さらに正常にGPUを認識させ高速に動作させることができましたので手順をシェアします。 誰かの御役に立てれば幸いです。

https://github.com/michael-fonder/M4Depth

2. 手順

公式のチュートリアルはこちらに記載があります。
https://developer.nvidia.com/blog/accelerating-tensorflow-on-a100-gpus/

$ sudo pip3 uninstall tensorboard-plugin-wit tb-nightly \
tensorboard tf-estimator-nightly tensorflow-gpu \
tensorflow tf-nightly tensorflow_estimator -y

$ sudo pip3 install nvidia-pyindex
$ sudo pip3 install nvidia-tensorflow

感動のあまり吠えました。

終わり。 RTX30xx Series 上でどうしても TensorFlow v1.x 環境でGPUをランニングさせたくてお困りの方はいちどお試しください。

ご参考までに、本日時点では下記のものが強制的にインストールされます。 TensorRT 7.2.3cuDNN 8.2 も導入されるようです。

gast-0.3.3
h5py-2.10.0
numpy-1.18.5
nvidia-cublas-11.5.1.101
nvidia-cuda-cupti-11.3.58
nvidia-cuda-nvcc-11.3.58
nvidia-cuda-nvrtc-11.1.105
nvidia-cuda-runtime-11.3.58
nvidia-cudnn-8.2.0.51
nvidia-cufft-10.4.2.58
nvidia-curand-10.2.4.58
nvidia-cusolver-11.1.1.58
nvidia-cusparse-11.5.0.58
nvidia-dali-cuda110-1.0.0
nvidia-dali-nvtf-plugin-1.0.0+nv21.5
nvidia-nccl-2.9.8
nvidia-tensorboard-1.15.0+nv21.4
nvidia-tensorflow-1.15.5+nv21.5
nvidia-tensorrt-7.2.3.4
tensorboard-1.15.0
tensorflow-estimator-1.15.1