nVIDIA製GPUを積んだノートPCにUbuntu16.04をインストール

# はじめに
以前投稿した記事（[UbuntuにNVIDIAドライバを入れる手順](https://qiita.com/Reizouko/items/c5826dbcc113321fbbcd)）をより
詳細に記述したもの．後に調べたことで，GRUBの設定変更の内容やPPAの追加など，新たに判明した内容を記した．

Ubuntu，カーネル，nVIDIAドライバのバージョン，PCのオンボード，BIOSによって挙動はそれぞれ異なる．ここでは，MSI製のGE72MVR-7RG-059JPの使用を前提としている．

この記事では，Ubuntu16.04 LTS kernel 4.15をインストールし，UbuntuのインストールからNVIDIAドライバのインストールまでを扱う．
なお，Windows10とのデュアルブート，BIOSは設定済みであることを想定している．

### 使用環境

|||
|:--:|:--:|
|PC|MSI GE72MVR-7RG-059JP|
|OS|Ubuntu16.04LTS|
|kernel|4.15|
|GPU|NVIDIA GeForce GTX 1070|

kernelのバージョンにより必要な設定がやや異なる場合がある．

# インストール時

インストールメディアからブートする場合にも，デフォルトのGPUドライバnouveau(ヌーヴォー)を停止させ，画面解像度の設定を無効化する必要がある．無効化しなかった場合，インストール中またはブート直後にフリーズが生じた．

インストールメディアをブートしGRUBの選択メニューに入った際，`e`キーを押して編集ページに移る．ここで，

```
kernel /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash -- debian-installer/language=ja keyboard-configuration/layoutcode?=jp keyboard-configuration/modelcode?=jp106
```

の`quiet splash`の項目を`quiet splash nomodeset`と書き換える．
`nomodeset`は，nouveauを停止させ，画面の解像度を設定するkernel mode settingを無効化する．

![nomodeset.jpg](https://qiita-image-store.s3.amazonaws.com/0/215782/f1de0702-2691-9afc-838b-c1167491f4cb.jpeg)

設定が上手く行けば，画面解像度が崩れ画面に合わなくなるのですぐにわかる．

[](このとき，サードパーティ製のソフトウェアインストールは行わないほうが良いだろう．Ubuntuのインストール時にサードパーティ製ソフトウェアを同時にインストールした場合，インストールが上手くいかなかった例が存在する．)

# インストール後：nVIDIAドライバのインストール

### 1. GRUBの編集
インストールが完了した後も，GRUBの編集ページにて`quiet splash`の前後に`nomodeset`を追加する．
他に，`/etc/default/grub`を編集し恒常的に`nomodeset`を適用する方法も存在するが，環境によっては上手くいかない場合もある．今回筆者が使用している環境では上手くいかずフリーズした．

![2018_08_13 20_49 Office Lens.jpg](https://qiita-image-store.s3.amazonaws.com/0/215782/f4ec69d7-b520-7d3b-c79a-4a53242cdbfe.jpeg)

GRUB編集後，ログイン画面にて`Ctrl+Alt+F1`を押してCUI環境へ移る.

### 2. Xwindowを停止
CUI環境へ移った後，ドライバをインストールする前にX Window Systemを停止する．これにより，GUIを停止する．

```
$ sudo service lightdm stop
```

### 3. ドライバのインストール

ここでは，aptによってドライバを管理する．
ppaリポジトリに下記を追加する．

```
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update
```
ドライバのインストール．ここでは，nvidia-396をインストールする．

```
$ sudo apt-get install nvidia-396
```

ドライバのversionは任意．なお，使用環境に対応しているドライバは下記のコマンドで確認できる．

```
$ sudo apt search nvidia
```

再起動

`$ sudo reboot`

# インストールの確認

`$ nvidia-smi`

# 補足

本記事ではnVIDIAドライバをaptの管理下に置いているが，この他に

- ubuntu-driversを使用する方法
[Ubuntuでnvidiaドライバをインストールしたらログインループにorz..](https://hiroyky.hatenablog.com/entry/2017/01/03/050900)

- [nVIDIAのドライバダウンロードページ
](https://www.nvidia.co.jp/Download/index.aspx?lang=jp)より直接スクリプトをダウンロードし，インストールする方法
[NVIDIAのドライバのインストール](https://slackware.jp/configuration/nvidia_driver.html)

も存在する．aptでのインストールに失敗する場合はこれらの方法を試すのも良いかもしれない．

# 今後について

GPGPUとして並列処理に用いる場合，本来はここでcudaをインストールする事が多い．しかし，複数のバージョンのcudaを使い分けたい等の事情がある場合，nvidia-dockerを使用しコンテナごとに環境を構築してあげると良いと思われる．

# 参考記事

[nomodesetとLinuxにおけるGPUドライバーの問題](https://cpplover.blogspot.com/2012/03/nomodesetlinuxgpu.html)
[Ubuntu 16.04LTSにNVIDIAドライバ(nvidia-390)とCUDA 9.1を入れた時のメモ](http://swytel.hatenablog.com/entry/2018/05/08/174943)
[Installing Ubuntu 16.04 on MSI GE72MVR, system freezes when I restart](https://askubuntu.com/questions/949496/installing-ubuntu-16-04-on-msi-ge72mvr-system-freezes-when-i-restart)
[How to Install Ubuntu 16.04 on MSI GE62 6QC](https://medium.com/@gentra/how-to-install-ubuntu-16-04-on-msi-ge62-6qc-ae4f30f50465)
[【罠がいっぱい！】ubuntu 16.04 LTS をMSI製ノート(GE62 6QC)にinstall](https://qiita.com/Urushibara01/items/b64f86afe5908bd30d5c)