python
machine_learning
あるときいつものようにPyTorchを使って機械学習関係のコードを回そうと思ったところ
In [1]: import torch RuntimeError: Unexpected error from cudaGetDeviceCount(). Did you run some cuda functions before calling NumCudaDevices() that might have already set an error? Error 803: system has unsupported display driver / cuda driver combinationなるCUDA周りのエラーが出てインポートが通らなくなってしまった。
色々試したところ、最後にfabricmanagerのデーモンが起動していないことが判明し
$ systemctl status nvidia-fabricmanager # inactive だったので $ sudo systemctl start nvidia-fabricmanagerとしたら直った。
Nvidia Fabric Managerとは
Nvidia Fabric ManagerはGPU間の接続をおこなうNVLink/NVSwitchなどを用いてfabric型の相互接続を構成してくれる管理ツールであるようだ。 私は触った記憶がないのでもしかするとインフラ担当者がいつの間にかに入れてくれていたのかもしれない(?)これのデーモンnvidia-fabricmanagerが寝ていると、単体GPUしか使わないような用途でもGPUを取るGetDeviceCountが 動かなくなってまずいようだ。
参考: https://docs.nvidia.com/datacenter/tesla/fabric-manager-user-guide/index.html
うまくいかなかった検討事項
PyTorch再インストール:CUDAのバージョンとGPUの対応バージョンの食い違いを最初に疑った。 GPUの型番にあったバージョンを指定してpipでpytorchを入れなおしたが、同様のエラーが出た。CUDAの(再)インストール:マシンには直接CUDAのインストールをしていない(pytorchのCUDAビルド済みのものを利用)ため これは除外した。
Nvidia Driver再インストール:最後はこれだとは思ったのだが、面倒くさいので後回しにした。先に試したnvidia-fabricmanager周り で直ったのでよかった(笑)
おすすめ記事
PIL, NumPy, PyTorchのデータ相互変換早見表NumPyのarray.sizeに相当するのはPytorchのTensor.numel()
PyTorch Tensorを確実にNumpy Arrayに変換する
同人ゲーム・イラストなど