素人が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)なるものをするのだというお答えをいただきました。カーネル融合とは何か、理解できていませんがとりあえずその通りにしておきます。
●結果
コメント
最新を表示する
NG表示方式
NGID一覧