読者です 読者をやめる 読者になる 読者になる

備忘録とか日常とか

機械学習を勉強中。ベース日々練習中。

Ubuntuアップデートしたらログインできなくなった(nvidia GPU使用)

linux メモ

いつものようにUbuntu14.04のアップデートが来たので、
促されるままにアップデート・再起動したらGUIでログインできなくなった話。
何とか直せたのでメモしておく。
結論から言うとnvidiaGPUのせいらしい。
かなり試行錯誤したのでもっとスマートにやる方法も多分あるけど一応。。

環境:
Ubuntu14.04
GeForce GTX970

参考元は以下
Ubuntuで認証画面を無限ループさせる方法と対処 - 拾い物のコンパス
本の虫: Ubuntu 14.04のUnityの設定をぶっ壊した場合の修復方法
Ubuntu14.04にCaffeをインストールしたらCUIでしか起動しなくなったからどうにかした話 - モノクロタイム
ubuntuにnVidiaドライバを入れたらUnityが起動しない場合の対処 - Qiita
Ubuntu 14.04 で 最新の NVIDIA ドライバーにアップデートする - ZONDEEL BLOG


症状

「あ・・・ありのまま今起こったことを話すぜ!
パスワードを入力すると、一瞬真っ暗な画面になったと思ったら
もう一度ログイン画面に戻っていた・・・
何を言っているのかわからねーと思うが
おれも何をされたのかわからなかった・・・」

と、冗談はさておき
いわゆるログインループにハマったわけである。
ログイン時の「ポコポンっ」みたいな音がトラウマになってしまった

画面の解像度が低くなっていたので
この時点でおそらくグラフィック周りの問題だろうなーとは思ったが
とりあえず色々試す羽目になった。
Ctl+Alt+F1で仮想コンソールは立ち上げることはできた。


試したこと

色々調べてみた結果、
ログインループにハマった時にまず試してみることがあるらしい。
Ctl+Alt+F1で仮想コンソールを立ち上げてログインしたあと、
homeディレクトリ直下にある以下のファイルを削除する

rm .Xauthority .ICEauthority

Xサーバの認証に使うファイルらしい。削除しても次回ログイン時に再生成される。
アップデートの時にこのへんの設定に不具合が生じる場合があるとかないとか。

ちなみに自分の場合は直りませんでした。


次、Unityの初期化をやってみる。
このサイトに従って以下のコマンドで初期化を図る。

sudo apt-get install unity-tweak-tool
unity-tweak-tool --reset-unity

unity-tweak-toolは公式のレポジトリに入っており、Unityの設定初期化とかを1行でやってくれるすごいやつらしい。
これを試してrebootするも、自分の場合ではダメでした。


めげずに次、そういえばDeep learningのライブラリであるcaffeを導入した時も
同じようなログインループに陥ったことを思い出す。その時は確かnvidia周りのファイルが原因だったような・・・

てことで以下のコマンドを叩く。

sudo apt-get purge nvidia*

で、rebootする。やっぱりログインできない。
ぶっちゃけこれで出来なかったら自分の知ってる範囲でやれることはやったので
やむなしクリーンインストールも視野に入れてた。。


nVidiaドライバのアップデートで解決

苦し紛れにやってみたら直った。
かなり苦し紛れなので正しい手順かどうかはわからん

とりあえず使っているドライバのバージョンを調べるため、以下のサイトでGPUの型番を入力する。
NVIDIAドライバダウンロード
自分の場合はGTX970だったので、バージョン361.28と出た(2016/2/25現在)

その後、以下のコマンドを打ち込む

sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
sudo apt-cache search 'nvidia-[0-9]+$'

するとインストール可能なバージョン一覧がずらっと出てくるのだが・・・

nvidia-173 - NVIDIA legacy binary driver - version 173.14.39
nvidia-310 - Transitional package for nvidia-310
nvidia-319 - Transitional package for nvidia-319
nvidia-304 - NVIDIA legacy binary driver - version 304.131
nvidia-331 - Transitional package for nvidia-331
nvidia-340 - NVIDIA binary driver - version 340.96
nvidia-346 - Transitional package for nvidia-346
nvidia-352 - NVIDIA binary driver - version 352.63

ふむふむ。バージョン361ないやんけ!
やっていいかどうかわからないけど、仕方なく352を入れてみる。

sudo apt-get install nvidia-352

で、おそるおそるrebootするとログインできた。
解像度も元の高解像度に戻ってました
たすかった・・・これでよかったのかはわからんけど・・・


theanoが使えなくなってた

ここからは個人的な環境の話だが、deep learningに使うtheanoのライブラリで問題が発生した。
GPUを使っての演算ができなくなっていたのである。

これでは困るので再度NVIDIAドライバダウンロードのサイトでドライバをダウンロードしてくる。
再起動後、GRUBメニューでUbuntuを選択した状態で'e'キーを押し、起動オプションをいじる。
'quiet splash'と書いてあるところの直後に'text 3'を追加してF10キーを押す。

するとランレベル3でCUIログインになるはずなので、
予めドライバをダウンロードしたディレクトリに移動して以下を実行。

sudo service lightdm stop
sudo service gdm stop
sudo chmod 755 ~/Downloads/NVIDIA-Linux-x86_64-361.28.run 
sudo ./NVIDIA-Linux-x86_64-340.32.run

するとインストールが始まる。
何を省いていいかわからないので基本yesで答えたが、32bitドライバは入れなかった。

終わってから再起動し、

python
import theano

として問題なく動いたので一安心。


後日談

ひと通りやったあとにこんなサイトを見つけた。
www.rokudw.net

もしかしたらこのサイトの方法で一発だったのかもしれない。
まあ直ったのでよしとしようか。


linuxではなにかとGPU関係で問題が起こるので
そのへんもっと情弱にもわかりやすくしてほしいです(怒)


【追記16/5/1】
どうやらnvidiaのドライバダウンロードのサイトから入手できる最新版(ここでは361.--)のドライバは
ubuntu14.04LTSの最新アップデートでは動作しないようです.
CUDAのインストーラに付いてくるGPUドライバのバージョンも352になっているので
公式がgpgpuには361を使わないことを推奨しているのかもしれません.
おとなしく352を入れておきましょう.