はじめに
Preferred Network が開発を主導するNumpy互換GPU計算を行うライブラリ Cupy を使う必要があったのでインストールしました。
いくつかはまりポイントがあったので、備忘録を兼ねてここに書きます。
なお、この情報は執筆時のものです。
(執筆日時:2017/11/21)
すぐに古くなると思いますので、気をつけてください。
現象
- グラフィックカードが認識されない
-
import cupyとしたときにCuPy is not correctly installed.と言われる
というようなことが起こりました。
CUDAのインストール
まず、 Cupy をインストールするのに CUDA が必要です。
Cupyはnumpy互換なので、CUDAをインストールしなかった場合はNumpyが使われるのかなと
勝手に思っていましたが、そうではないみたいでした。
CPU, GPU両方で動くコードを作るためには、明示的に実装しないといけないみたいです。
環境
私の研究室には、GPUマシンが2台あります。
- ml-server1 : GeForce GTX 1070 を2機搭載 Ubuntu 16.04
- ml-server2 : GeForce GTX 1070 を1機搭載 Ubuntu 16.04
条件として、Tensorflow, Cupyともに同じマシンで動かすことがあります。
現在のCUDAの最新バージョンは 9.0 ですが、
現状 Tensorflow master はまだCUDA8.0にしか対応していません。
CupyはCUDA8.0にも対応しているため、ダウングレードしてインストールする必要があります。
NVIDIA ドライバのダウンロード
NVIDIA のドライバダウンロードサイト
http://www.nvidia.com/Download/index.aspx
から、OS・グラフィックカードに対応するドライバをダウンロードします。
現在は、384.98 というバージョンが最新です。
NVIDIA-Linux-x86_64-384.98.run というようなファイルがダウンロードされます。
デフォルトでUbuntuはグラフィックドライバを用いる lightdm というサービスを実行しています。
これを止めてからインストールを始めます。
sudo service lightdm stop
chmod +x NVIDIA-Linux-x86_64-384.98.run
sudo ./NVIDIA-Linux-x86_64-384.98.run
色々聞かれますが、とりあえずデフォルトの選択肢を選んでおけばよいです。
CUDA のインストール
Google で CUDA と検索してたどり着く先はCUDA9.0のダウンロードサイトなので、
頑張って8.0が置いてあるサイトを探します。
過去のアーカイブはここにあるようです。
ここでCUDA8.0 ga2をダウンロードします。
いくつかの形式を選ぶことができますが、とりあえずは実行ファイル形式の run ファイルをダウンロードすることにしました。
cuda_8.0.61_375.26_linux.run というファイルがダウンロードされます。
これも実行権限をつけて実行します。
chmod +x cuda_8.0.61_375.26_linux.run
sudo ./cuda_8.0.61_375.26_linux.run
色々聞かれるので、全てデフォルトを選んで…とするとハマります。
CUDA にはグラッフィクドライバも同梱されています。
cuda_8.0.61_375.26_linux.run の 375.26 はドライバのバージョンを指しているのですが
上でインストールしたバージョン 384.98 と異なります。
インストールダイアログの中で
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 375.26?
と聞かれるのですが、これで yes を選択すると、せっかくインストールしたドライバが上書きされ、
グラフィックカードを認識しなくなります。
ここは No を選ぶ必要があります。
CUDA toolkit をインストールするか聞かれますので、これは yes を選択してください。
最後に、Path にCudaを追加すれば完成です。
インストールの確認
インストールがうまくいっていれば
nvidia-smi
を実行するとGPUの使用状況が表示されます。
NCCLのインストール
Cupy のドキュメントでは、NCCL はなくてもよいと書かれています。
しかし、GPUが2機以上ある環境ではないと動かないようです。
Cupy のインストール
あとはドキュメントに従ってインストールを進めてください。