Ubuntu16.04 + GTX1080 + CUDA8.0で 機械学習環境を構築する


ubuntu+CUDA8.0で機械学習する際の設定メモ。anaconda(numpy/matplotlib), scikit-learn, chainerを入れます。

## PC仕様
- PC: GTune NEXTGEAR i650PA7-SP3
- MB: Z170-S01 MSI
- CPU: Intel Core i7-6700K CPU 4.0GHz x 8
- GPU: Geforce GTX1080
- Memory: 32GB
- SSD: 256GB
- HDD: 2TB
- OS: Ubuntu 16.04 64bit + Windows 10 Home 64bit

## ubuntuインストール手順
- [ubuntu16.04 LTS](https://www.ubuntulinux.jp/News/ubuntu1604-ja-remix)をDLしてisoファイルを作成
- UEFI (BIOS)に入る
  - UEFI menuでsecure bootをことごとく無効化する
  - DVDからubuntuインストール
- ブート選択画面でinstall ubuntuのラインで「e」を押して以下を変更、その後F10で起動
  - 変更前: quiet splash
  - 変更後：nomodeset
- install
  - boot: 128 MB(少ないかも), ext4
  - swap: メモリ量の1〜2倍(e.g. 64000 MB), swap
  - /: 残り全て, ext4
  - ブートローダーをインストールするHDD: bootを入れたdev/sdc


## ubuntu基本セットアップ
- 環境を最新にする

```shell-session:terminal
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt-get install git
sudo apt-get install python-pip
```

- ディレクトリを英語表記にする

```shell-session:terminal
LANG=C xdg-user-dirs-gtk-update
```

- vimで矢印キーを押すとABDなどが出る問題を解消

```shell-session:terminal
touch ~/.vimrc
vi ~/.vimrc
set nocompatible　#vimrcに追記
```

- 内蔵HDDを自動マウント

```shell-session:terminal
sudo fdisk -l  # /dev/sda2が当該HDD
sudo blkid /dev/sda2  # UUID確認

# fstabにUUIDを追記
sudo vi /etc/fstab
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx       /media/USER/HDD2TB        ext4    defaults        0       0  #fstab
```

- USB Wifiドライバをインストール(自分が使っているのは[WI-U3-866D](http://k9q.hateblo.jp/entry/2016/07/23/220519))

- macからSSH接続したいので、ubuntuにopensshを入れる。

```shell-session:terminal
sudo apt-get install openssh-server
```

```shell-session:OSX_terminal
rm ~/.ssh/known_hosts # Host key verification failed.エラーの回避
ssh IP_ADDRESS # これでつながるはず
```

- dropboxインストール。[ここ](https://www.dropbox.com/install-linux)からubuntuのdebファイルをDLしてインストール。なおSSDの容量が足りなかったので別の内蔵HDDに同期するようにした。

```shell-session:terminal
sudo dpkg -i dropbox_2015.10.28_amd64.deb
dropbox start -i
```


## CUDAインストール
- 最初にやること

```shell-session:terminal
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-367
sudo apt-get install mesa-common-dev
sudo apt-get install freeglut3-dev
```

- [CUDA 8.0](https://developer.nvidia.com/cuda-downloads) をDL(deb)し、インストール

```shell-session:terminal
sudo dpkg -i ダウンロードしたファイル名.deb
sudo apt-get update
sudo apt-get install cuda
```

- [cuDNN 5.1](https://developer.nvidia.com/cudnn) をDLしてインストール。DLする前に登録が必要。

```shell-session:terminal
tar -zxf cudnn-8.0-linux-x64-v5.1.tgz
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
```

- .bashrcにてCUDAとcuDNNへのパスを通す

```shell-session:.bashrc
# CUDA Toolkit
export CUDA_ROOT=/usr/local/cuda
export PATH=/usr/local/cuda/bin:${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CPATH=/usr/local/cuda/include:$CPATH

# cuDNN
export LIBRARY_PATH=/usr/local/cuda/lib64:$LIBRARY_PATH
```

- bashrc反映

```shell-session:terminal
source .bashrc
```

- GPUの動作確認。ちゃんとSamplesのmakeが通ることを確認すること。makeの際にcuda_runtime.hがないとか言われたら sudo -E でmakeするとうまくいくかもしれない。

```shell-session:terminal
nvidia-smi # GTX-1080と表示されるはず
nvcc -V # エラーなしを確認
./NVIDIA_CUDA-8.0_Samples/1_Utilities/deviceQuery/deviceQuery # Result=PASSとなることを確認
cd NVIDIA_CUDA-8.0_Samples/5_Simulations/nbody
make
./nbody -benchmark -numbodies=256000 -device=0
```

## その他開発環境

- pyenvインストール

```shell-session:terminal
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
```

- anacondaインストール

```shell-session:terminal
pyenv install -l | grep ana  # 最新版を確認。anaconda2-4.1.1
pyenv install anaconda2-4.1.1
pyenv rehash
pyenv global anaconda2-4.1.1
echo 'export PATH="$PYENV_ROOT/versions/anaconda2-4.1.1bin/:$PATH"' >> ~/.bashrc
source ~/.bashrc
```

- scikit-learnインストール

```shell-session:terminal
sudo apt-get install python-sklearn
```

- ffmpegインストール

```shell-session:terminal
sudo add-apt-repository ppa:jonathonf/ffmpeg-3
sudo apt update && sudo apt install ffmpeg libav-tools x264 x265
ffmpeg -version #  ffmpeg 3.1.4.1
```

- chainerインストール

```shell-session:terminal
pip install chainer

# MNISTで動作確認
wget https://github.com/pfnet/chainer/archive/v1.16.0.tar.gz
tar xzf v1.16.0.tar.gz
python chainer-1.16.0/examples/mnist/train_mnist.py #CPUモードOK
python chainer-1.16.0/examples/mnist/train_mnist.py -g=0 #GPUモードOK
```


## 後日やること
- Caffe+OpenCVインストール


## 参考
- [GTX-1080 など GeForce を Ubuntu 16.04 LTS で CUDA-8.0RC と共に使う](http://qiita.com/hidenorly/items/a3eb3a0375e6703d163b)
- [Ubuntu16.04のインストールからGTX1080/CUDA8.0RCでcaffeをビルド](http://mokotixfemilar.hatenablog.com/entry/2016/07/13/025433)