注意: この記事はもう古いです.今時(このコメントつけてるのは 2016年9月)は次の記事の方が役に立つかもしれません:
- GPGPUマシンの更新(1) 〜 Ubuntu 16.04 をインストールして NVIDIA ドライバを入れる 〜 - まんぼう日記
- GPGPUマシンの更新(2) 〜 CUDA 7.5 と cuDNN 5.0RC - まんぼう日記
雨ですねぇ.いつものように歩いたり走ったりして仕事とか現実とかから逃避できなくて (^^; 少々ストレスたまり気味のたかたかです.
- GPGPU用のマシンを手に入れました - まんぼう日記
- GPGPU用マシンに Ubuntu をインストールして Theano を使えるようにする - まんぼう日記
- GPGPU用マシンにCUDAをインストール - まんぼう日記
のつづき.無事 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 しまくりな環境を手に入れましたですよ.