一般論ですが、ローカルにTensorFlowをinstallするのはオススメできません。poetryでもanacondaでもいいので、仮想環境にinstallするようにしてください。
必要なもの
もし、ただnvidia driverを入れただけの環境(nvidia-smi
だけは使える)だと、TFでGPUを使うことができません。
GPUが使えるかは、以下のコードを実行し、GPUのデバイス情報が出てくるかで確認することができます。
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
ピチピチの環境だと、cudnnだったり、xxxdatrだったり諸々がないと言われてしまいます。
- nvidia driver
- CUDA toolkit(いわゆるCUDA)
- cuDNN
TFを使うにはこちらの3点セットが必要となります!
nvidia driversを入れる
このx11-drivers/nvidia-drivers
というパッケージをinstallすることで、nvidia-smi
が使えるようになります。
gentooのパッケージはArch系統と比べると慎重なので、stableが470.94になっています(2022/01/21時点)。自分は気分的に495を入れたかったので、emerge -a =nvidia-drivers-491.44-r2
と打って、推奨はされていない新しいversionを入れました。
使えるバージョンは先程のリンクから確認できるので、使えるバージョンを選択してください。
自分がUbuntu使ってた頃は、driverをHPから落としてローカルで実行してinstallしていました。ただ、こうしてしまうとversionのup / downgradeが難しくなってしまうという問題があります。Gentooに限らないとは思いますが、package managerで管理することは将来の自分のためにもなります。
ちなみに、自分は最初stable(470.94)を入れて後から495.44-r2を入れました。問題ないです。
やること
emerge -a x11-drivers/nvidia-drivers
必要に応じてversionを指定。
emerge -a =x11-drivers/nvidia-drivers-495.x.x
CUDAを入れる
driverを入れた時点で、nvidia-smi
をし、CUDAのversionが出て安堵していたら大目玉を食らいます。自分は11.4と出ていました。nvidia-driverを入れた時点でCUDA 11.4も依存関係に入ってくるかはわからないのですが、後にinstallするcuDNN
というpackageはCUDA 11.5しか対応していないので、おとなしくCUDA11.5をinstallしましょう。
じゃあ、またversionを確認しましょう。
10.2, 11.5, 11.6しか使えないようですね。今回は11.5以外は入れます。(それ以外はだめ)
やること
emerge -a =nvidia-cuda-toolkit-11.5.1-r1
versionはその時その時で変わっていくので、Gentoo Packageのwebサイトからversionを確認してから入れましょう。
cuDNNを入れる
一番の鬼門です。正攻法で戦ってもinstallできません。
なんかFとかついていますよね。
emergeのdocsから--pretend
の部分を一部抜粋してきました。
F fetch restricted (must be manually downloaded)
B blocked by another package (unresolved conflict)
手動でdownloadしなきゃいけないらしいですね。
これを知らずに普通にemergeしようとすると、cannot be fetched for cudnn
みたいなエラーが出て終わってしまいます。
cuDNN
はnvidiaのdeveloperなんちゃらにloginしないとdownloadできないパッケージなので、emergeコマンドで全部やってもらうのは無理なようです。
この公式forumの質問が無かったら死んでいました。fetch(downloadしてくること)されたfile群は/usr/portage/distfiles/
下に保管されているので、手動でここにcuDNN
のfileを置きなさいとのこと。
やること
- https://developer.nvidia.com/cuDNN のダウンロードページに飛ぶ
-
Download cuDNN v8.3.1 (November 22nd, 2021), for CUDA 11.5
からfileをdownload - downloadしたfileを/usr/portage/distfilesにmv
-
emerge -a cudnn
を実行
HPに飛ぶと8.3.2もあったのですが、Gentooのほうだと8.3.1までしか無かったので一応8.3.1にしておきました。
ここまでやれば
おそらくTensorFlowが入ってる環境で以下のコードを実行すればエラーなしでGPU情報が得られるのではないでしょうか。もしエラーになったら、コメント等で教えてください。
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
MNISTも動きました。
長々となってしまいましたが、これはGentooの仕様をよくわかっていなかったことに起因するものなので、慣れたら手間取らずにかんたんにできると思います。
躓いたとき用のメモ
公式wikiが便利です。全部日本語です。
あんまエラー出てないけどemerge
してもinstallできなかった
dispatch-conf
commandを実行し、u
を入力して再度emerge
を実行しましょう。
maskがどうたらこうたら
危険性があるpackageに対する警告なのですが、今回は変なことはしないのでunmask
しちゃいましょう。
emerge -a --autounmask=y --autounmask-write ***packagename***
でmaskを解除できます。
参考文献