アップグレードしたらnvidia-smi出来なくなった話

経緯

別件で環境構築している時にupgradeやらdist-upgradeしたらカーネルが新しくなってnvidia-smiが実行できなくなりました
解決に1日掛かったので一応メモ

こんな感じ

 1$ nvidia-smi
 2NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
 3もしくは
 4modprobe: ERROR: could not insert 'nvidia_367'
 5...
 6
 7$ nvcc -V
 8nvcc: NVIDIA (R) Cuda compiler driver
 9Copyright (c) 2005-2015 NVIDIA Corporation
10Built on Tue_Aug_11_14:27:32_CDT_2015
11Cuda compilation tools, release 7.5, V7.5.17

アップデート前環境

当初以下の環境を組んでいました

  • Ubuntu14.04 LTS(64bit)
  • GTX980 Ti
  • nvidia-361(361.42)
  • CUDA (7.5)

ドライバ CUDA 共にnvidia公式からダウンロードしたものを使用して構築しました.

解決策

※多分ドライバ入れ直すだけで良い

アンインストール

一度関連するものを削除

1$ sudo apt-get remove nvidia-*
2$ sudo apt-get remove cuda-*

ドライバのダウンロード・インストール

最新のドライバを落としてくる
http://www.nvidia.com/Download/index.aspx
ここから環境に合わせて選ぶ

1$ wget http://jp.download.nvidia.com/XFree86/Linux-x86_64/375.20/NVIDIA-Linux-x86_64-375.20.run
2$ chmod +x NVIDIA-Linux-x86_64-375.20.run
3$ sudo ./NVIDIA-Linux-x86_64-375.20.run

CUDAのインストール

CUDAはレポジトリから7.5が取れるようになってるのでそちらを利用する

1$ sudo apt-get install nvidia-cuda-toolkit

エラー解決

以下メモ

You appear to be running an X server

XWindowが立ち上がってると怒られます
そういえばこのマシンは最初デスクトップ版をインストールしたので

1$ sudo service lightdm stop

して停止した上で再度実行します

Kernel preparation unnecessary for this kernel. Skipping...

全文は

1ERROR: Failed to run `/sbin/dkms build -m nvidia -v 4.4.0-53-generic`: 
2Kernel preparation unnecessary for this kernel. Skipping...

エラーログが
/var/log/nvidia-installer.log
にあるので確認すると以下のエラーログがある

unrecognized command line option ‘-fstack-protector-strong’

今回ハマってたのはここだった
gccのバージョンが古い(4.8以前)だとこのエラーが出るようです.

1$ gcc --version
2gcc (Ubuntu 4.8.x-2ubuntu1~16.04) 4.8.x
3$ sudo apt-get install gcc-4.9
4$ sudo update-alternatives --config gcc
5$ gcc --version
6gcc (Ubuntu 4.9.4-2ubuntu1~16.04) 4.9.4
7$ sudo ./NVIDIA-Linux-x86_64-375.20.run

4.9を選択した上で再度実行すると成功する