68
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ubuntuでnvidiaドライバーが動作しない

Last updated at Posted at 2018-01-13

HDDが壊れたので新しくSSDを買ってUbuntuを入れ直して、CUDAを入れたが、インストールされたNVIDIAドライバーがうまく動作せず、nvidia-smiを打つとこのようなメッセージが出て困った

$ nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running."

結論としては、Ubuntuの最新カーネルではnvidiaドライバが機能しないトラブルが起きているようなので、ubuntuカーネルを古いものに変えると正常になった。

環境

  • Ubuntu 16.04
  • GTX 1080
  • CUDA 8.0

一応作業手順

$ wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
$ sudo apt-get update
$ sudo apt-get install cuda
$ sudo init 6

これでcuda-toolkitとnvidia-387が自動でインストールされて、以前なら問題なく動作していた。
しかしnvidiaドライバにアクセスできない、ドライバが合ってないみたいなことを言われて困った。
起動時も解像度が合っておらず、うまくドライバが読み込めていない模様。

$ nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running."

もしかしてnvidiaドライバのバージョンが違う?と思い、nvidiaのサイトで対象GPUのドライバのバージョンを確認してみる。
GTX1080だと384と出たので、nvidia-387を削除してnvidia-384を入れようと試みる。

削除するときは、

$ sudo apt-get --purge remove nvidia-*
$ sudo apt-get --purge remove cuda-*

で削除する。一応関連するものが残っていないか以下で確認し、残っていたら個別に削除する。

$ dpkg -l | grep nvidia
$ dpkg -l | grep cuda

でnvidia-384を入れる

$ sudo apt-get install nvidia-384

これならば、nvidia-smiが通る。
しかしCUDAパッケージはnvidia-387に依存しているかつnvidia-384を入れるとnvidia-387が削除されるので、CUDAは削除されてしまう。

解決方法

似たような状況になっている人がいないか調べたところ、ここ数日で同じ状況に遭遇している人がそこそこいた。

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver" Ubuntu 16.0...

どうやら、Ubuntu16.04のカーネルが最近4.10から4.13に変わり、環境を新しくした場合にnvidia-ドライバがうまく働かない状況になっている模様。

そこで暫定的に、PC起動時にESCキーを押してブート選択メニューに入り、Advanced Option for Ubuntuを選択

image.png

デフォルトでは4.13.26になっていたが、前の4.10.28があったのでそれを選択して起動する。
画像は借り物なのでバージョンが違うので注意。
image.png

すると解像度も正常になり、nvidia-smiもちゃんと返ってくるようになった

$ nvidia-smi
Sat Jan 13 14:05:15 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 387.26                 Driver Version: 387.26                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 1080    Off  | 00000000:01:00.0  On |                  N/A |
| 55%   82C    P2   146W / 180W |    842MiB /  8111MiB |     98%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 1080    Off  | 00000000:03:00.0 Off |                  N/A |
| 48%   67C    P2   166W / 198W |    783MiB /  8114MiB |     99%      Default |
+-------------------------------+----------------------+----------------------+
|   2  GeForce GTX 1080    Off  | 00000000:04:00.0 Off |                  N/A |
| 48%   67C    P2   185W / 198W |    783MiB /  8114MiB |     98%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               

起動時のデフォルトカーネルを変更

さすがに再起動のたびに毎回カーネルを変更するのは面倒なので、デフォルトで設定しておく。

まずはGRUBの起動オプションの確認をする。

$ grep menuentry /boot/grub/grub.cfg
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-e0077458-0564-44fa-8774-8de1e30bfe34' {
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-e0077458-0564-44fa-8774-8de1e30bfe34' {
	menuentry 'Ubuntu, with Linux 4.13.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.13.0-26-generic-advanced-e0077458-0564-44fa-8774-8de1e30bfe34' {
	menuentry 'Ubuntu, with Linux 4.13.0-26-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.13.0-26-generic-init-upstart-e0077458-0564-44fa-8774-8de1e30bfe34' {
	menuentry 'Ubuntu, with Linux 4.13.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.13.0-26-generic-recovery-e0077458-0564-44fa-8774-8de1e30bfe34' {
	menuentry 'Ubuntu, with Linux 4.10.0-28-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.10.0-28-generic-advanced-e0077458-0564-44fa-8774-8de1e30bfe34' {
	menuentry 'Ubuntu, with Linux 4.10.0-28-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.10.0-28-generic-init-upstart-e0077458-0564-44fa-8774-8de1e30bfe34' {
	menuentry 'Ubuntu, with Linux 4.10.0-28-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.10.0-28-generic-recovery-e0077458-0564-44fa-8774-8de1e30bfe34' {

これは起動時にESCキーを押して入った起動メニューと対応している。

デフォルトでどのオプションで起動するかは、/etc/default/grubにかかれている。

GRUB_DEFAULT=0

これだと、トップメニューの0番目、Ubuntuを選ぶようになる。

この部分を以下のように変更する。

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.10.0-28-generic"

確認していないが、おそらく以下でもOK

GRUB_DEFAULT="1>3"

2番目(Advanced options for Ubuntu)を選択→3番目(Ubuntu, with Linux 4.10.0-28-generic)を選択みたいな感じ。

GRUBの設定を反映させるために、以下を実行

$ sudo update-grub

その後、再起動して、使用カーネルを確認すると、4.10.28になっていた。

$ uname -r
4.10.0-28-generic

参考

68
58
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
68
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?