TensorFlow - ikymrkw/pydepot GitHub Wiki
NVIDIA の GPU を使う
pip install tensorflowとする。print(tf.__version__)でバージョン確認。- 以前は
tensorflow-gpuというパッケージが分かれていたが、今はtensorflowに統一されている
- 以前は
- TensorFlowのGPUサポートのページを見て NVIDIA のドライバーやライブラリをインストールする
- 無闇に最新バージョンを入れないこと! わざと古いバージョンを入れないと動かないことがある。
- そのために Linux ディストロの公式パッケージではなく、NVIDIAが用意したパッケージを使うべき。
- ただしドライバーは互換性が高くなっているので、公式パッケージで入れても良さそう。
- 詳しくは下のエラー時の情報を見よ
- 次のコードでGPUが使える状態になったか確認できる
こんなメッセージが出てきたら成功from tensorflow.python.client import device_lib print(device_lib.list_local_devices())Created device /device:GPU:0 with 4621 MB memory: -> device: 0, name: NVIDIA GeForce GTX 1660 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5 ... name: "/device:GPU:0" device_type: "GPU" memory_limit: 4845731840 locality { bus_id: 1 links { } }
よくあるエラー
- NUMA ノードエラー
there must be at least one NUMA node, so returning NUMA node zeroが出た場合- これをする: https://gist.github.com/zrruziev/b93e1292bf2ee39284f834ec7397ee9f
- OS側の問題で、 root 権限が必要
lspci | grep -i nvidia # => GPUデバイスのアドレスを確認。たとえば 01:00 ls /sys/bus/pci/devices/ # => 0000:01:00.0 が存在することを確認 cat /sys/bus/pci/devices/0000\:01\:00.0/numa_node # => -1 が返されるはず sudo echo 0 | sudo tee -a /sys/bus/pci/devices/0000\:01\:00.0/numa_node cat /sys/bus/pci/devices/0000\:01\:00.0/numa_node # => 0 が返されるはず
- CUDA のバージョン違い
- ドライバーと CUDA のバージョンが不整合、と言われる(
nvidia-smiでもエラーが出る) - 2023年3月時点で CUDA の最新版は 12.1 だが、 Tensorflow は 11.2 のみ対応で、12.1 を入れても動かない。
- libcudart.so.11 を要求する。ソースコードから自分でビルドすれば対処可能かもしれないが、少なくともビルド済みのバイナリパッケージを使う限りは動かない。
- とはいえ、メジャーバージョンが 11 なら動きそうではある。CUDA 11.8 でも動きそうだった。
- というのも、CUDA 11.2 は 2021年リリースだから、Ubuntu 22.04 LTS 用の deb は用意されておらず、そうせざるを得ない。
- 古いバージョンのCUDAは CUDA Toolkit Archive から入手できる。
- CUDA 11 をインストールしたのに不整合な場合は、CUDA のある場所が LD_LIBRARY_PATH に入っていないだけかもしれない。 Ubuntu で、NVIDIA からの deb を使った場合、/usr/local/cuda*/lib64 あたりにある。
- ドライバーと CUDA のバージョンが不整合、と言われる(
- libnvinfer.so.7, libnvinfer_plugin.so.7 がない
- TensorRT が入っていない。これはオプションなので入れなくてもよい。
- Tensorflow の GPUサポートのページには「TensorRT 6.0」と書いてあるが、
*.so.7がないと言われる場合は TensorRT 7.x が必要。 - TensorRT 6.x や 7.x の配布物 deb は Ubuntu 1604 や 1804 用のものしかないので、2004 や 2204 には入れられない。 7.2.3 を tar.gz から手動で入れても CUDA 11.1 や 11.2 が前提なので動かない(libnvrtc.so.11.1 を要求してくるが、上記のように CUDA 11.8 には含まれていない)。
- libcudnn.so.8 がない
- cuDNN が入っていない。
- TF のページでは cuDNN 8.1.0 と指定されているが、 8.8.0 でも行けそう。CUDA 11.x に対応しているほうを入れること。