Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

参考

http://sweng.web.fc2.com/ja/linux/ubuntu/change-default-boot-kernel.html

https://askubuntu.com/questions/216398/set-older-kernel-as-default-grub-entry

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした