CUDA 対応デバイスが検出されません (Ubuntu 12.04.4 サーバーを使用)

CUDA 対応デバイスが検出されません (Ubuntu 12.04.4 サーバーを使用)

この投稿は役に立つと思うので、スタックオーバーフローから移行しました。

最近、cuda ツールキット 5.5 とドライバー 331.67 をインストールしました (GeForce GTX 680 を使用しています)。何らかの理由で、どのテスト スクリプトも実行できません。

$./NVIDIA_CUDA-5.5_Samples/1_Utilities/deviceQuery/deviceQuery 
./NVIDIA_CUDA-5.5_Samples/1_Utilities/deviceQuery/deviceQuery Starting...

CUDA Device Query (Runtime API) version (CUDART static linking)

cudaGetDeviceCount returned 38
-> no CUDA-capable device is detected
Result = FAIL

私はここの「入門ガイド」の手順に従いました

http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/

起動時に文字デバイス ファイルを作成するスクリプトを作成しました (Ubuntu のサーバー エディションを実行しているため、このようなグラフィック ファイルはデフォルトでは作成されません)。

$ls -l /dev/nvidia*
crw-rw-rw- 1 root root 195,   0 Apr 11 17:29 /dev/nvidia0
crw-rw-rw- 1 root root 195, 255 Apr 11 17:29 /dev/nvidiactl

コマンドを実行した場合の出力は次nvidia-smi -aのとおりです (通常ユーザーと root ユーザーの両方の場合)。

Failed to initialize NVML: Unknown Error

ここにnvidiaモジュールに関する情報があります

$ lsmod | grep nvidia
nvidia              11335080  0 
$ modinfo nvidia
filename:       /lib/modules/3.11.0-17-generic/updates/dkms/nvidia.ko
alias:          char-major-195-*
version:        331.67
supported:      external
license:        NVIDIA
...
...

何か提案はありますか? ありがとうございます。

編集#1 ドライバー319.76にダウングレードしてみました:

$ modinfo nvidia
filename:       /lib/modules/3.11.0-17-generic/updates/dkms/nvidia.ko
alias:          char-major-195-*
version:        319.76
supported:      external
...

実行するとnvidia-smi -a次のようになります:

NVIDIA: API mismatch: the NVIDIA kernel module has version 304.116,
but this NVIDIA driver component has version 319.76.  Please make
sure that the kernel module and all NVIDIA driver components
have the same version.
Failed to initialize NVML: Unknown Error

nvidia-current-updatesドライバファイルをインストールする前にリポジトリからパッケージをインストールしましたnvidia-settings-updatesが、そこで競合が発生したと思います。解決策は見つかりませんでしたが、これで一歩近づいたと思います。結果は次のとおりです。modprobe -l | grep nvidia

kernel/drivers/video/nvidia/nvidiafb.ko
kernel/drivers/net/ethernet/nvidia/forcedeth.ko
updates/dkms/nvidia.ko
updates/dkms/nvidia_304_updates.k

答え1

この回答はスタックオーバーフローから移行されました

つまり、私が遭遇した主なエラーは、nvidia カーネル モジュールとドライバー コンポーネントのバージョンが一致していないことが原因であることがわかりました。解決策を見つけるために私が実行した手順は次のとおりです。

1) ドライバーをダウングレードすると、nvidia-smi -aドライバー コンポーネントの不一致に関するエラーが表示されるようになりました。当初はこれが問題になるかどうかわかりませんでした。私は単に CUDA ツールキットのセットアップ ガイドに従っていただけで、このことが問題になることは言及されていませんでした。

2) リポジトリからカーネルモジュールをインストールしたら、適切なバージョンの対応するドライバーコンポーネントを選択しました。インストールしたカーネルモジュールのバージョンがわからない場合は、modprobeとmodinfoを使用できます。たとえば、私のシステムでは

$ modprobe -l | grep nvidia
kernel/drivers/video/nvidia/nvidiafb.ko
kernel/drivers/net/ethernet/nvidia/forcedeth.ko
updates/dkms/nvidia.ko
updates/dkms/nvidia_304_updates.ko

モジュール nvidia_304_updates はリポジトリ (パッケージ nvidia-updates-current) からインストールされました。正確なバージョンは modinfo で確認できます。

$ modinfo /lib/modules/3.11.0-17-generic/updates/dkms/nvidia_304_updates.ko 
filename:       /lib/modules/3.11.0-17-generic/updates/dkms/nvidia_304_updates.ko
alias:          char-major-195-*
version:        304.116
supported:      external

NVIDIAのウェブサイトのアーカイブから対応するドライバーコンポーネントをダウンロードしてインストールした後、

http://www.nvidia.com/Download/Find.aspx?lang=en-us

、コマンドを実行することができました

$ nvidia-smi -a

==============NVSMI LOG==============

Timestamp                       : Mon Apr 14 15:17:44 2014
Driver Version                  : 304.116

Attached GPUs                   : 1
GPU 0000:04:00.0
    Product Name                : GeForce GTX 680
...
...

そして私が実行しようとしていた元のスクリプトは

$ ./deviceQuery 
./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GTX 680"
  CUDA Driver Version / Runtime Version          5.0 / 5.0
  CUDA Capability Major/Minor version number:    3.0
  Total amount of global memory:                 2047 MBytes (2146762752 bytes)
  ( 8) Multiprocessors x (192) CUDA Cores/MP:    1536 CUDA Cores
  ...
  ...

関連情報