UbuntuにCUDAを入れようとしたらハマった

# 背景
Deep Learning用に手元のcuda対応のグラボが指してあるLinuxPCにcudaを入れるべく、[公式ドキュメント](http://developer.download.nvidia.com/compute/cuda/7_0/Prod/doc/CUDA_Getting_Started_Linux.pdf)の通りにインストールしたらハマりました。

# 試した環境
* ubuntu 14.04
* GeForce GTX 560
* CUDA 7.0

# 行った手順
## nvidiaの環境の確認
```
lspci | grep -i nvidia
=====================
01:00.0 VGA compatible controller: NVIDIA Corporation GF114 [GeForce GTX 560] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GF114 HDMI Audio Controller (rev a1)
```

## ubuntuの環境確認
```
uname -m && cat /etc/*release
===================================
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.2 LTS"
NAME="Ubuntu"
VERSION="14.04.2 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.2 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
```

## gcc環境設定
```
sudo apt-get install build-essential
gcc --version
```

## CUDA 7.0 インストール

### パッケージファイルのダウンロード
```
wget http://developer.download.nvidia.com/compute/cuda/7_0/Prod/local_installers/rpmdeb/cuda-repo-ubuntu1404-7-0-local_7.0-28_amd64.deb
```

### インストール
```
sudo dpkg -i cuda-repo-ubuntu1404-7-0-local_7.0-28_amd64.deb  
sudo apt-get update  
sudo apt-get install cuda
```

### 環境変数設定
```
export PATH=/usr/local/cuda-7.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-7.0/lib64:$LD_LIBRARY_PATH
source .bashrc
sudo init 6
```

### 再起動
```
sudo init 6
```

### 確認
```
cat /proc/driver/nvidia/version

NVRM version: NVIDIA UNIX x86_64 Kernel Module  346.46  Tue Feb 17 17:56:08 PST 2015
GCC version:  gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04) 
```

```
nvcc -V

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Mon_Feb_16_22:59:02_CST_2015
Cuda compilation tools, release 7.0, V7.0.27
```

```
dpkg -l | grep nvidia

ii  nvidia-346                                            346.46-0ubuntu1                                     amd64        NVIDIA binary driver - version 346.46
ii  nvidia-346-dev                                        346.46-0ubuntu1                                     amd64        NVIDIA binary Xorg driver development files
ii  nvidia-346-uvm                                        346.46-0ubuntu1                                     amd64        NVIDIA Unified Memory kernel module
ii  nvidia-modprobe                                       346.46-0ubuntu1                                     amd64        Load the NVIDIA kernel driver and create device files
ii  nvidia-opencl-icd-346                                 346.46-0ubuntu1                                     amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                                          0.6.2                                               amd64        Tools to enable NVIDIA's Prime
ii  nvidia-settings                                       346.46-0ubuntu1                                     amd64        Tool for configuring the NVIDIA graphics driver
```

## サンプルファイル実行
``` 
cd /usr/local/cuda-7.0/sample
sudo make
cd bin
sudo ./deviceQuery

cd ../0_Simple/bandwidthTest
sudo ./bandwidthTest
```

# ハマったところ
サンプルファイルの実行の際に、deviceQueryを実行させても、何も返ってこずフリーズする。
ためしに以下のコマンドを打って、gpuの状態を確認しようとしても、同じくフリーズする。
```nvidia-smi
```

またx-windowが表示されなくなった。

# 原因
nouveauとNVidiaのドライバを同時に使用すると、うまくいかない。
[公式ドキュメント](http://developer.download.nvidia.com/compute/cuda/7_0/Prod/doc/CUDA_Getting_Started_Linux.pdf)では、2つのインストール方法が記載されており、１つは今回行った、パッケージマネージャーを利用する方法、もう一つはインストーラーを利用する方法である。
後者のほうでは、インストールを開始する前の手順にこのような記載があった
> To install the Display Driver, the Nouveau drivers must first be disabled.

"ディスプレイドライバをインストールするときは、まずNouveauを無効にすべし"

[CentOSで行った他の方の記事](http://moznion.hatenadiary.com/entry/2015/02/23/160016)でも、同様の記載があったため、ここが怪しいと判断。

# 対応方法
ubuntuでNouveauを無効にする方法は公式ドキュメントに書いてあり、

/etc/modprobe.d/blacklist-nouveau.confを作成
以下を記載
```blacklist nouveau  
options nouveau modeset=0
```
```sudo /sbin/mkinitrd```
```sudo init 6```

でいける。これを行った後、x-windowが復帰し、サンプルファイルの実行でフリーズすることがなくなった。


# 参考
[CentOS 6.6 上で NVIDIA の GPU (の一部) と共に nouveau 使うと発狂して死ぬ](http://moznion.hatenadiary.com/entry/2015/02/23/160016)
[公式ドキュメント](http://developer.download.nvidia.com/compute/cuda/7_0/Prod/doc/CUDA_Getting_Started_Linux.pdf)
[UbuntuでNVIDIAのディスプレイドライバが動作しない場合のチェック項目](http://qiita.com/gm3d2/items/8346c76961d3fdb257b7)