Memo_GPU

ページ名:mem

素人がGPUでモデルを動かしてみた

GPUで高速演算が可能になるかを検証してみます。

●材料

モデル:SIMRIW(中川・堀江, 1995) Python3.7 + CuPy6.0.0使用
マシン:Windows マシン(Win10Home, Core i7-7700, 8GBRAM, GeForce GTX-1060(VRAM6GB))
実行環境:Anaconda 

●環境の構築

・ドライバーのインストール

 

・新しい仮想環境を作る
 base環境を破壊するのが恐ろしいので、仮想環境を作りました。NumPyやPandasなどをの導入も忘れずに。


・CuPyのインストール
condaに上がってるのはver. 6.0.0と古いようですが、pipでインストールするのが怖いので(Anacondaの環境をぶっ壊した経験あり)、6.0.0で我慢します。
condaから入れると、必要なCUDA Tool kitとcudnnが付いてくるのがありがたい。

注意:cudnnやCUDA tool kitは個別に入れてはいけない(ここでハマりました)
別々に入れると、最新版がインストールされますが、その最新版はCuPy6.0.0はサポートしていません(CuPyとバージョンが揃っていないと動かない)。
バージョンの整合性を確保するという意味で、conda update --allなども避けた方がよいかもしれません。

・NVIDIA Visual Profilerを使うための準備
 NVIDIA Visual Profilerというのを使うとGPUの状況を可視化できるそうです。($nvppで起動)
起動にはJava JSEとJDKが必要です。JSEとJDKは同じバージョンを入れましょう。
 

●プログラムを書き換える

CuPyとNumPyは非常に互換性が高く、ほとんどnp. をcp. に書き換えればOKです。

気を付けるところ
その1 - カーネル融合を使う

ユーザー定義関数はCPU計算版では定義⇒vectorizeして適用していましたが、GPUでの計算ではちょっと違うようです。
これはstackoverflowで先人に尋ねたところ、「カーネル融合」(carnel fusion)なるものをするのだというお答えをいただきました。カーネル融合とは何か、理解できていませんがとりあえずその通りにしておきます。

 

●結果

 

 

 

 

シェアボタン: このページをSNSに投稿するのに便利です。

コメント

返信元返信をやめる

※ 悪質なユーザーの書き込みは制限します。

最新を表示する

NG表示方式

NGID一覧