JP / EN

広告

Unexpected error from cudaGetDeviceCount(): nvidia-fabricmanagerを再起動したら直った

タグ: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に変換する



このエントリーをはてなブックマークに追加

https://wonderhorn.net/