Ubuntu16.04とCUDA、DIGITS 6の導入

Ubuntu16.04の導入に苦戦したのでメモしておきます。

(追記:全部Docker上でやるなら、以下がよさそうです。CUDAはNVIDIA Docker上で導入してくれるようなので。 
Ubuntu16.04を入れて、nvidia-docker2を入れて、Chainerを動かす - Qiita



まずWindows導入後パーティションを切ってisoを焼いたUbuntuのCDからブートする。

この、Ubuntuインストールの際にNVIDIAのドライバと相性が悪くはまります。
インストールか起動かの選択画面(GNU GRUB)で、eを押して起動コマンドを編集を表示し、
起動コマンドのquiet splash ---の箇所をquiet splash nomodesetに書き換える必要があります。

正しいグラフィックドライバを入れるまではインストール後も同様です。
Ubuntuの起動時も e でquiet splash -> quiet splash nomodesetと変更し、起動し、必要に応じて
起動後にsudo gedit /etc/default/grub (もしくは sudo nautilusで該当ファイルに移動)で「quiet splash -> quiet splash nomodeset」に変更し、sudo update-grubとして、grubを最初から書き換えてしまいます。

以下の方法でグラフィックドライバをいったん無効にします。

パッケージの更新と必要なパッケージのインストール
sudo apt-get update -y
sudo apt-get install -y build-essential
sudo apt-get install jq
sudo apt-get install -y linux-image-extra-virtual
sudo apt-get install -y linux-source

##Nouveauドライバの無効化
lsmod | grep -i nouveau
#/etc/modprobe.d/blacklist-nouveau.confを作成し
sudo sh -c "cat << ETX > /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
ETX" && cat /etc/modprobe.d/blacklist-nouveau.conf

#/bootにある既存のInitramfsの更新
sudo update-initramfs -u
#result-example
update-initramfs: Generating /boot/initrd.img-3.13.0-85-generic
#command
sudo reboot


次に、ドライバ入れるのも一苦労です。以下を参考に適切なドライバを検索しておきます。
https://qiita.com/sasayabaku/items/2323a2c501e58c0621b6
https://qiita.com/daikumatan/items/26039fc23edabf76a9c4

16.04 is new and all packages are not ready to use in all servers. The problem is not about nvidia drivers or anything about broken pacages.
Using Main Server to download packages solve my problem.
System Settings
Software & Updates
Select "Main Server" from "Download from" section
https://askubuntu.com/questions/765448/ubuntu-16-04-nvidia-gpu-driver-can-not-use-proprietary-driver


そしてドライバーを入れます。

#GTX1080Tiのドライバをインストール
#aptのリポジトリに追加する.
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
#ドライバのインストール
sudo apt install nvidia-381
#確認
sudo modprobe nvidia
nvidia-smi

ここまででようやく、画面がまっとうな解像度でに表示されるようになります


Windowsとのデュアルブートの使い勝手を良くするために以下のような設定をします。

grubの編集による起動順の変更
http://robotics4society.com/2016/06/15/ubuntu-boot/ (sudo nautilusで直接変更するのが便利)


また、リモートで実行できるようにXRDPを以下に従って設定しました。
これでインストール待ち時間も他の仕事ができます。
設定後はWindowsリモートデスクトップから接続し、「console」を選択して設定したパスをいれると画面にアクセスでいます。

Windows10からUbuntu16.04へリモートデスクトップ接続する設定
http://watarisein.hatenablog.com/entry/2017/06/24/235551

Ubuntu 16.04: Unityデスクトップ環境にXRDPで接続する
https://www.hiroom2.com/2016/08/28/ubuntu-16-04-unity%E3%81%ABvnc-xrdp%E3%81%A7%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B/

次に、いよいよCUDAやDIGITSをいれていきます。

#CUDA Download: https://developer.nvidia.com/cuda-downloadsからDLしておいて、
sudo dpkg -i cuda-repo-ubuntu1404_7.5-18_amd64.deb
sudo apt update
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F60F4B3D7FA2AF80
sudo apt update
sudo apt install cuda

#以下の設定を~/.bashrcなどに記述すると,CUDAライブラリが使用可能になる.(sudo nautilusでエディタで直接変更しましたが、もっといい方法があるかと)
cat << ETX >> ${HOME}/.bashrc
export PATH=/usr/local/cuda/bin:\$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:\$LD_LIBRARY_PATH
ETX
source .bashrc

#参考https://ystklog.com/412
#インストール確認
nvcc -V

#参考
#https://qiita.com/daikumatan/items/26039fc23edabf76a9c4
#https://qiita.com/JeJeNeNo/items/05e148a325192004e2cd


cuDNNについて

https://developer.nvidia.com/rdp/cudnn-download

cuDNN v6.0 Runtime Library for Ubuntu16.04 (Deb)
cuDNN v6.0 Developer Library for Ubuntu16.04 (Deb)
cuDNN v6.0 Code Samples and User Guide for Ubuntu16.04 (Deb)
の3つをダウンロードしたフォルダで以下実行

sudo dpkg -i libcudnn*deb


続けてDockerとNVIDEA Dockerを入れます。

参考:
https://qiita.com/Sert/items/48fafa5b28be5b739784

https://qiita.com/koara-local/items/ee887bab8c7186d00a88
...
https://qiita.com/yukoba/items/3692f1cb677b2383c983

ここでどうもドライバのバージョンが合わないとのエラーがでてはまりました。

なんかうまくいかない?
sudo usermod -a -G docker $USER
apt-get install cuda-drivers
#リブートする
https://qiita.com/Sert/items/48fafa5b28be5b739784

Nvidia Docker
https://github.com/NVIDIA/nvidia-docker


最終的に、再起動してやりなおしたらうまくいったようです。