突然，壊れたUbuntu.... Ubuntuよ，永遠なれ


これは，[NISE (南山大学 青山研究室) Advent Calendar 2019](https://qiita.com/advent-calendar/2019/nise)の18日目の記事です．


今年は，[本番環境でやらかしちゃった人 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/yarakashi-production)がめっちゃ盛り上がっていますね！

今回はそれに近いお話です．
ココでのお話は限りなくノンフィクションに近い，フィクションになりますので，予めご注意ください．

# 当時の状況
当時と言ってもそんなに昔というわけではなく，つい一ヶ月前に起こったできたてホヤホヤの事件です．現在のNISEには，学部生25人(1人豪州に留学中)，院生8人(うち3人社会人)という構成で，学部生と院生それぞれに研究室を与えられています．

そのそれぞれの部屋にはGPUを積んだPCが設置されており，問題はそのUbuntuで起きました．

# 何気なしに...

そのPCのスペックを記載しておきます．

|基本構成||
|---|---|
|PC名| MASTERPIECEシリーズ|
|OS|Windows 10 Home 64ビット,Ubuntu18.04のデュアルブート|
|CPU|Intel Core i7|
|グラフィックス|Geforce 1080ti|
|メモリ|64GB|
|SSD|512GB|
|HDD|1TB|

こんな感じです．

学部生のメンバーから，kerasをGPUを使って動かしたいと言われて，環境構築を今年の夏くらいにやってから，その後はノータッチでした．なので，内部のソフトウェアアップデートも行われておらず,各種ソフトウェアがかなり古いものになっていたと思います．

ある日，学部生のメンバーから，PythonのUpdateをしてほしいと言われて，`pyenv`をUbuntuに入れようとしました．

```terminal
$ apt install  git gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev
```

各種ライブラリのインストールが必要だったために`apt`を使って，installを試みました．ここまではよかったのですが，そこで，

```
214 個のパッケージがアップデート可能です。
34 個のアップデートはセキュリティアップデートです。
:
*** システムの再起動が必要です ***
```

みたいなメッセージが出てきているのに気づきました．
いや，ちゃんとUpdateくらいこまめにしておけよなんて，思ったのが間違いでした...

```
$ apt update
$ apt upgrade 
$ apt dist-upgrade
```

を実行し，その後に再起動をかけました


# 画面比がおかしいぞ

再起動後，いつもの紫（?）の画面からUbuntuを選択し，Ubuntuを起動させようとしました．そしたら，まさかのログインループ...

でも，これは16.04から18.04にUpgradeをしたときからちょくちょく起きてて，

- [Ubuntu 18.04 LTSが起動しない？Waylandを無効にすれば起動するかも！](https://linuxfan.info/ubuntu-gdm-wayland-false)

こちらの記事を参考にリカバリーモードからwaylandを無効にすることで，解決してきました．
ここでも，またかぐらいの気持ちで，リカバリーした記憶があります．

実際，無効にした後にログインすることができ，いつもの画面を拝見することになるのですが....

## 「あれ？アイコンでかくね？？」

つい言葉でちゃいました．
いつもだったら，ディスプレイに合わせた画面比で表示されるはずなのに，16:9のいつもよりでかでかとした画面比となってしまいました．

ここで，後輩から，ディスプレイを2枚にしたいと要望があり，HDMIとディスプレイポートでそれぞれのモニターにつなげることに．
HDMIの方は画面比がおかしいものの表示されましたが，ディスプレイポートの方は読み取ってくれさえしてくれませんでした．

まあ，とりあえず，使えるからいいやとここで諦めるのも1つでしたが，目の前にバグが有るのに解決しないのはエンジニアとしてどうなのかと思い直し，PCと向き合うことにしました．

# NVIDIAの闇

`nvidia-smi` がまだ動いているのを確認したところ...

```
Failed to initialize NVML: Driver/library version mismatch
```
が表示されるようになりました
あれれ〜

再起動したら，治るかなーなんて思って再起動したら最後，もう，私達の前にログイン画面が現れることはありませんでした


あ．やばし

心の焦りが大きく大きく広がってきます．

幸い，リカバリーモードに変更することは可能でしたので，そちらからログインしました．

[nvidia-driverをubuntu18.04にインストールする](https://qiita.com/ohta6/items/684b9ecd4d67a52e5a7f)

とか
[Ubuntu 18.04にNVIDIAドライバを入れようとしてハマった](https://qiita.com/9sako6/items/1555ff38e90ad3ecace1)

とかめちゃめちゃ調べまくって頑張りましたが，リカバリーモードからですらログインすることもできなくなり，真っ黒な画面と私の頭の中は同じ状態に陥りました．

ですが，内部に保存していた研究用のコードなどはちゃんとGithubのプライベートリポジトリで管理していたり，Google Driveに画像のスクショや構築されたモデルやなんかもバックアップしてあったことを思い出し，

Ubuntu18.04を入れ直すことにしました．

Ubuntu18.04のISOをUSBメモリに焼き直して，接続

かたかたしているうちにUbuntuを入れ直しました．

ディスクイメージが前に作ったやつが残っていてよかった

# 深層学習環境の構築の闇

さて，ここからが問題です．

うちの研究室では，深層学習フレームワークにChainerを推奨しています．
Chainerを使ったGPUでの深層学習環境では，`Cupy`というモジュールが必要になります．
これが，結構厄介なやつなんです．

まずは，大本になる`Cuda`をいれます．

```
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.1.105-1_amd64.deb

apt update
apt upgrade

apt-key adv --fetch-keys　http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub

apt install ./cuda-repo-ubuntu1804_10.1.105-1_amd64.deb

apt update

apt install cuda cuda-drivers
```
そして，PATHを通します．


```
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
```

次に`Cudnn`をインストールします．これは，先程インストールした`cuda`のversionによってインストールするversionが異なってくるので，注意が必要です．

```
wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libcudnn7_7.5.0.56-1+cuda10.1_amd64.deb
apt install ./libcudnn7_7.5.0.56-1+cuda10.1_amd64.deb
apt update

apt-get install libcudnn7
```

そして，`Chainer`や`Cupy`をインストールします．
ここで注意する必要があるのが，`Cupy`は`Cuda`のversionに依存するので，それにあったversionを利用することが必須です．また，`Chainer`を先に入れずに，`Cupy`をインストールしないと，`Chainer`のインストール時にコケます．

```
pip search cupy
pip install cupy

pip install chainer
```

# 裏技
さて，これでうまくいく！なんてなかなか世の中そんなに甘くはありませんｗ

実は，これには裏技がありまして，

```
conda install keras-gpu
```

でGPU周りのソフトウェアを一気にダウンロードすることができるという裏技があります．
こちらのほうが，めちゃくちゃ簡単なので，深層学習フレームワークにこだわりがない人はこちらをおすすめします．

# まとめ

今回は，`apt update` `apt upgrade`によって，nvidia-driverのバージョンが複数インストールされた状態になってしまい，それに気づくことが遅くなってしまったからこそ，Ubuntuを入れ直す，という最終手段を使って解決したお話です．

教訓としましては，

- 迂闊にUpdateしない
- 常にバックアップしておく
- 調べた対処法をコピペして使わない

です．

特に3つ目はこの環境構築の界隈だと同じような現象かと思っていたら，全く違うところでしたみたいなことが往々にして起こっているので，かなり注意が必要となります．

これで，環境構築芸人をやめたいとおもいます(願望)．

みなさんも，もし，深層学習の開発環境構築の際は，お気をつけてください．

# 次回

次回は，[NISE (南山大学 青山研究室) Advent Calendar 2019](https://qiita.com/advent-calendar/2019/nise)に初登場の[@chi-nosuke](https://qiita.com/chi-nosuke)です．どんな面白いことを書いてくれるのかお楽しみに！！