まんぼう日記

takataka's diary

続 GPGPU用マシンにCUDAをインストール

注意: この記事はもう古いです.今時(このコメントつけてるのは 2016年9月)は次の記事の方が役に立つかもしれません:

 

 

雨ですねぇ.いつものように歩いたり走ったりして仕事とか現実とかから逃避できなくて (^^; 少々ストレスたまり気味のたかたかです.

のつづき.無事 CUDA をインストールして, Theano で GPGPU できました.

 

結論から言うと…

前回( GPGPU用マシンにCUDAをインストール - まんぼう日記  )は,Theano のページの情報( http://deeplearning.net/software/theano/install_ubuntu.html#contributed-gpu-instruction )に従って,Ubuntu 14.04 LTS に apt-get で NVIDIA のドライバと CUDA tool kit をインストールしようとしてましたが,これが混乱のもとでした.現時点では,Theano をインストールした後は,NVIDIA の CUDA 7 Downloads から最新の CUDA を直接ダウンロード&インストールするのが一番いいようです.こちらが参考になります: Installing CUDA Toolkit 7.0 on Ubuntu 14.04 Linux | R Tutorial

 

以下,前回のつづきでいろいろ回り道をしてしまった作業手順なので,余計なことをいろいろやってます.

 

 

NVIDIA のドライバを最新版にする

注意たかたかのハードウェア環境では,Ubuntu 14.04 LTS のインストール時に選択されたドライバで NVIDIA Quadro が問題なく使えていたので,後から考えればたぶんこの作業は不要だったと思われます.

 

GPGPU用マシンにCUDAをインストール - まんぼう日記 の時に nvidia-331 をインストールするはめになった行きがかり上,より最新のドライバに入れ直すことにしました. UbuntuでNVIDIAのドライバをインストールする - Qiita というページの情報を参考に, NVIDIAドライバダウンロード で検索してみると,たかたかの場合はバージョン 346 を入れればよさげ.というわけで,add-apt-repository して該当ドライバをインストールします.

$ sudo add-apt-repository ppa:xorg-edgers/ppa
$ sudo apt-get update
$ sudo apt-cache search 'nvidia-[0-9]+$'
   :
nvidia-346 - NVIDIA binary driver - version 346.72
   :
$ sudo apt-get install nvidia-346

 

上述のようにたぶんこの作業は不要ですが,このおかげで nvidia-smi というコマンドが入って,ビデオカードをモニタリングできるようにはなります.

$ nvidia-smi 
Thu Jun 11 23:57:55 2015       
+------------------------------------------------------+                       
| NVIDIA-SMI 346.72     Driver Version: 346.72         |                       
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K20c          Off  | 0000:05:00.0     Off |                    0 |
| 35%   47C    P0   184W / 225W |   4673MiB /  4799MiB |     99%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Quadro K620         Off  | 0000:0A:00.0      On |                  N/A |
| 34%   39C    P8     0W /  30W |    409MiB /  2047MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0     15096    C   python                                        4657MiB |
|    1     11308    G   /usr/bin/X                                       0MiB |
|    1     14053    G   /usr/bin/X                                     193MiB |
|    1     14574    G   compiz                                          91MiB |
+-----------------------------------------------------------------------------+

試しに計算させてる時の様子ですが,Tesla単体で 184W も電力消費してまっせ.エコくないですな.

 

CUDA をインストール

何も考えずに apt-get install cuda-toolkit やと古いバージョンの CUDA しか入らず,ちゃんと動かへん気配やったので,NVIDIA のサイトから手動で最新版(現在は CUDA 7.0)をダウンロードしてインストールします.

 

CUDA 7 Downloads で Linux x86 の Ubuntu 14.04 用インストーラをダウンロード.落とした .deb ファイルをクリックすると Ubuntu ソフトウェアセンターが開いて,インストールを促してきます.たかたかは最初 Network Installer の方を入れようとしましたが,結局本体(ダウンロードページ見たらわかるように 1GB ほどあります)のダウンロードでものすごい時間がかかりました.3時間ほど.Local Package Installer を選択してダウンロードした方が,ブラウザが所要時間の予想を教えてくれるぶん,気が楽かも.

 

で,時間がかかるのでレポートの採点とか授業の準備とかしながら作業してたら,なんかエラーが出たりしました.以下にその記述と対応法を説明しますが,ソフトウェアセンター使ったりコマンドラインでやろうとしたりいい加減に対応した上に,ちゃんとメモとらへんかったので,かなり怪しいです…

 

$ sudo apt-get update

を実行すると,

公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY D88C3D385C37D3BE

だそうで….ググったらプロキシ経由してるせいみたい(cf.  まぁるいしっぽ:proxyを使ったPPAリポジトリの追加 ).こちらの記事を参考に,

$ gpg --keyserver keyserver.ubuntu.com --keyserver-option http-proxy=プロキシサーバのURL:ポート番号 --recv-keys D88C3D385C37D3BE
(出力はメモ忘れた)
$ gpg --armor --export D88C3D385C37D3BE | sudo apt-key add -
OK  (apt-key コマンドの出力)

とやったら解決.apt-get update がちゃんとできるようになりました.で,

$ sudo apt-get install cuda

します.これもすごい時間かかったんやったか…覚えてへん (^^; すいません.途中で,nvidia-331 とか nvidia-304 とかの依存関係で入ったらしきいくつかのパッケージのせいでエラーが出たりしたので,apt - Ubuntu 14.04 : Installing cuda 7 - Ask Ubuntu の記事なんかを参考に,いくつか不要なものを apt-get purge したりしました.これまたメモがないんですが,

$ apt list | grep cuda
$ apt list | grep nvidia

して,304,331に関係ありそうなん(「設定未完了」とか表示されてた)を選んで purge.そして再度 apt-get install cuda したら無事終了.とにかく,これで CUDA のインストールは完了です.

 

環境変数の設定と Theano の動作テスト

Installing CUDA Toolkit 7.0 on Ubuntu 14.04 Linux | R Tutorial の記述を参考に,~/.bashrc に以下を追加.

export CUDA_HOME=/usr/local/cuda

PATH=${CUDA_HOME}/bin:${PATH} 
export PATH
LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH

 

そして,まずは check_blas.py で動作確認.

$ THEANO_FLAGS=floatX=float32,device=gpu python /usr/local/lib/python2.7/dist-packages/theano/misc/check_blas.py
Using gpu device 0: Tesla K20c
   :
We executed 10 calls to gemm with a and b matrices of shapes (2000, 2000) and (2000, 2000).

Total execution time: 0.08s on GPU.
   :

ちゃんと Tesla 使って実行してくれたようです.よしよし.

 

次は,続 Theano + CUDA - まんぼう日記 の時のプログラムに少し手を加えた,次のプログラムで.

 

まずは CPU で実行した結果.Theano の T.dot() も Numpy の np.dot() も変わりません.

$ THEANO_FLAGS=device=cpu python theano-test.py
##### using Theano ( on  cpu )
N =  10000 elapsed time [sec] =  15.0598778725
##### using Numpy ( on cpu )
N =  10000 elapsed time [sec] =  15.0805418491

 

一方,Theano で Quadro に計算させるようにすると,CPUで15秒かかってたのが3秒になりました.

$ THEANO_FLAGS=device=gpu1 python theano-test.py
Using gpu device 1: Quadro K620
##### using Theano ( on  gpu1 )
N =  10000 elapsed time [sec] =  2.96234703064

 

そして,Tesla だと,1秒 \(^o^)/

$ THEANO_FLAGS=device=gpu0 python theano-test.py
Using gpu device 0: Tesla K20c
##### using Theano ( on  gpu0 )
N =  10000 elapsed time [sec] =  1.01048898697

 

ふむふむ.ついに GPGPU しまくりな環境を手に入れましたですよ.