web-dev-qa-db-ja.com

CUDA対応デバイスが検出されない(ubuntu 12.04.4サーバーを使用)

便利だと思うので閉じたスタックオーバーフローからこの投稿を移行する

最近、cuda toolkit5.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
2
dermen

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

したがって、私が遭遇した主なエラーは、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 Webサイトのアーカイブから対応するドライバーコンポーネントをダウンロードしてインストールした後、

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
  ...
  ...
1
dermen