\\\\ ٩( 'ω' )و ////

いろんな形がなかったりするものをこねてこねてこねまくります

Ubuntu 16.04にNVIDIAドライバをインストールしようとしたらハマった話

研究室にある深層学習マシンのNVIDIAドライバがおかしくなったので再インストールしたんですが、その時にどハマりしたので書いておきます。

先に結論

結論から言うとインストールCDで入るカーネルが古すぎることが原因でしたので、カーネルを4.13.0に上げることでうまく動きました

ハマった時の状況

まず、ハマった時の構成を以下に記しておきます

この状態で

sudo add-apt-repository ppa:graphics-drivers/ppa

をして現時点(2018/06/26)のLatest Long Lived Branchである nvidia-390 をインストールします

sudo apt update
# 今回はサーバ用途として使用するのでGUI環境はいらない
sudo apt install -y nvidia-390 --no-install-recommends

そうすると 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.

インストールできたーと思ったらこれです。悲しいですね…

ちなみに nvidia-384 にしてみても変わらなかったので何が正解なのかこの時点ではわかりませんでした

解決までの道のり

今回のケースではカーネルが古すぎてドライバがうまく動いていない感じだったのでカーネルを16.04.4の最新にしてあげましょう

sudo apt install linux-generic-hwe-16.04

を実行してあげて、再起動すると

$ uname -a
Linux host 4.13.0-45-generic #50~16.04.1-Ubuntu SMP Wed May 30 11:18:27 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

のように16.04.4のサポートカーネルである4.13にアップデートされるので、すでにドライバをインストールしてしまったのであれば一度アンインストールします

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

そしてもう一度ドライバをインストールします

sudo apt install -y nvidia-390 --no-install-recommends

その後再起動してあげてから nvidia-smi コマンドを実行すると今度はちゃんと実行できるはずです。

$ nvidia-smi
Tue Jun 26 10:34:39 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.67                 Driver Version: 390.67                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Quadro K420         Off  | 00000000:02:00.0 Off |                  N/A |
| 25%   50C    P0    N/A /  N/A |      0MiB /  1994MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 1080    Off  | 00000000:03:00.0 Off |                  N/A |
| 28%   43C    P0    44W / 180W |      0MiB /  8119MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   2  GeForce GTX 1080    Off  | 00000000:81:00.0 Off |                  N/A |
| 27%   41C    P0    42W / 180W |      0MiB /  8119MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

NVIDIAのドライバはカーネルと強く依存しているので、何らかの拍子に apt upgrade をしてカーネルをアップデートして再起動すると死にます。なので、dpkg –set-selections を使ってカーネルを勝手にアップグレードしないようにします。

echo "linux-generic-hwe-16.04 hold" | dpkg –set-selections

とすることでカーネルアップデートによる突然の死を回避することができます。