Ubuntu 16.04にGTX 1080Tiドライバをインストール（外付けGPUを計算のみで使用したい）

DNN環境を構築しています。
先日、[nvidiaのドライバを導入](https://qiita.com/spiderx_jp/items/460cd47ce0e0ff41c762)しましたが、以下のようにncidia-smiの結果のProcessesのところにXorgなど、ディスプレイするためのプロセスが外付けGPUとなるGTX 1080Tiで実行されていました。

※2017/03/17追記
事前に[nouveaドライバを確認](https://qiita.com/spiderx_jp/items/460cd47ce0e0ff41c762#1nouveau%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%81%AE%E7%A2%BA%E8%AA%8D)して、もし存在していたら、競合の可能性があるんで削除しておく必要があります。

```
$ nvidia-smi
Sat Mar  3 22:10:17 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 387.34                 Driver Version: 387.34                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:01:00.0 Off |                  N/A |
| 23%   37C    P8    13W / 250W |    502MiB / 11172MiB |      5%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1227      G   /usr/lib/xorg/Xorg                           312MiB |
|    0      1889      G   compiz                                        97MiB |
|    0      2233      G   ...-token=532F1718A85672DA26673917C31FD9C6    89MiB |
+-----------------------------------------------------------------------------+
```
私のPCは、[Intel Core i7 7700K](https://ark.intel.com/ja/products/97129/Intel-Core-i7-7700K-Processor-8M-Cache-up-to-4_50-GHz)を積んでいて、このCPUには、オンボードGPU（インテル® HD グラフィックス 630）が搭載されているので、ディスプレイ描画処理は、こちらに任せたい。
いろいろと調べた結果、ドライバインストール時にOpenGLを無効にしてインストールする日強yがあったようです。
以下に手順を示します。


#0.環境
- OS  : Ubuntu 16.04 LTS
- GPU : NVIDIA GTX 1080Ti
- PC  : DAIV-DGZ510（[Intel Core i7 7700K](https://ark.intel.com/ja/products/97129/Intel-Core-i7-7700K-Processor-8M-Cache-up-to-4_50-GHz)搭載）

#1.インストール済みのnvidiaのドライバをアンインストール
以下の手順で先日インストールしたnvidiaのドライバ（nvidia-387）をアンインストールします。

```
$ sudo apt-get --purge remove nvidia-387 
```

#2.nvidiaドライバのインストーラをダウンロード
aptパッケージでは、OpenGLの無効化ができない（？）ようでしたので、[Nvidia Unix Drivers](http://www.nvidia.com/object/unix.html)より、nvidiaドライバのインストーラ(~~NVIDIA-Linux-x86_64-387.34.run~~ ※NVIDIA-Linux-x86_64-390.48.run[2018/05/27更新、最新版にしました] )をダウンロードしてきました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/f15b7387-1a6d-25a9-a6dc-e33d5354971a.png)


#3.Dynamic Kernel Module Support(DKMS)のインストール（※以下、2018/05/27更新）
カーネルのバージョンアップ時に自動的に再コンパイルされるようにするため、DKMSをインストールします。

```
$ sudo apt install dkms
```

#4.nvidiaドライバのインストール
X Window Systemを停止させます。

```
$ sudo systemctl stop lightdm
```

**Ctrl+Alt+F2**で仮想コンソールに切り替え、ログインします。
ログイン後、nvidiaのドライバインストーラを起動し、ドライバをインストールします。
この時、**--no-opengl-files**、**--no-libglx-indirect**及び、**--dkms**を指定します。

```
$ sudo ./NVIDIA-Linux-x86_64-390.48.run  --no-opengl-files --no-libglx-indirect --dkms
```

インストール後、リブートします。

```
$ sudo reboot
```

#5.確認
システムが起動したら、nvidia-smiでGPUの状態を確認します。

```
$ nvidia-smi
Sun May 27 12:58:14 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.48                 Driver Version: 390.48                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:01:00.0 Off |                  N/A |
| 23%   29C    P8     9W / 250W |      9MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1585      G   /usr/lib/xorg/Xorg                             6MiB |
+-----------------------------------------------------------------------------+
```
Processes項目が、「No running processes found」となり、他のプロセスがGTX 1080Tiで動作していないことが確認できます。

尚、intelのオンボードGPUの状況確認は、intel_gpu_topコマンドで確認できます。

```
$ sudo intel_gpu_top
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/6c218ed9-4a7e-dd1a-47eb-8a27dd217d69.png)

#6.nvidia-settingsを利用可能にする
nvidia-settingsを使ったクロックやファンの制御を行うには、**xorg.conf**を作成して、nvidiaのドライバを読み込む必要があります。

以下のコマンドでGPUのBusIDを調べます。

```
$ nvidia-xconfig --query-gpu-info
Number of GPUs: 1

GPU #0:
  Name      : GeForce GTX 1080 Ti
  UUID      : GPU-46bd0afa-863e-20ff-6c5e-6a2694391aa0
  PCI BusID : PCI:1:0:0

  Number of Display Devices: 0
```

以下の内容で、**/etc/X11/xorg.conf**を作成します。
BusIDは、先ほど調べたBusIDを指定します。

```/etc/X11/xorg.conf
Section "ServerLayout"
    Identifier  "Layout"
    Screen 0    "intel"
    Screen 1    "nvidia"
EndSection

Section "Device"
    Identifier  "intel"
    Driver      "intel"
EndSection

Section "Device"
    Identifier  "nvidia"
    Driver      "nvidia"
    BusID       "PCI:1:0:0"
EndSection

Section "Screen"
    Identifier  "intel"
    Device      "intel"
EndSection

Section "Screen"
    Identifier  "nvidia"
    Device      "nvidia"
    Option      "AllowEmptyInitialConfiguration" "True"
    Option      "Coolbits" "12"
EndSection

```


以上です。

※2018/05/27追記
xorg.confの設定後、X Windowの端末を開くと、右上に寄って表示されるようになった。
どうも**AllowEmptyInitialConfiguration**が悪さをしている模様・・
このオプションを外すと、nvidia-settingsが正しく起動しない。
とりあえず、nvidia-settingsについては、保留。

#参考ページ
- [UbuntuでGeForceをGPGPUのみで使用する@電気飴さん](https://blog.denkiame.net/post/ebd2752344a54d362757)
- [第454回　Ubuntu 16.04 LTSにNVIDIA製ドライバーをインストールする3つの方法@技術評論社](http://gihyo.jp/admin/serial/01/ubuntu-recipe/0454)