今回はDeepLearning 4jでGPUを利用する方法を確認する。DeepLearning 4jでは行列計算をND4Jライブラリで行っているが、GPUによってこの行列計算を高速化することになる。
■ GPUの利用方法
DeepLearning 4jでのGPU利用は、現在のところCUDA(NVIDIA製のグラフィック・カードで利用可能な開発環境)のバージョン5.5以降にしか対応していない。グラフィック・カードを持っていてもCUDAが利用できない場合はGPU利用もできないため、注意が必要である。DeepLearning 4jでGPU利用するには、以下の手順を行う。
- CUDAのインストール
- POMファイルの編集
手順1については
CUDAのダウンロードサイトでインストーラをダウンロードし、インストールをする必要がある。インストールは特に難しいことはなく、「次へ」を選択して進んでいけばよい。手順2についてはDeepLearning 4jプロジェクトのPOMファイルに以下の依存性記述を追加するだけでよい。ただし、artifactIdタグは「nd4j-cuda-○○」(○○はインストールしたCUDAのバージョン)という値に変更する必要があり、以下の記述はCUDA 7.5の場合の記述である。
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-cuda-7.5</artifactId>
<version>${nd4j.version}</version>
</dependency>
特に本サイトの方法で環境を構築した場合(=『
dl4j-0.4-examples/pom.xml』を利用して環境構築した場合)、すでにPOMファイル内に上記は記述されており、以下のように「nd4j.backend」タグの設定を修正するだけで計算にGPUが利用されるようになる。
<name>DeepLearning4j Examples</name>
<description>Examples of training different data sets</description>
<properties>
<nd4j.backend>nd4j-native</nd4j.backend>
<name>DeepLearning4j Examples</name>
<description>Examples of training different data sets</description>
<properties>
<nd4j.backend>nd4j-cuda-7.5</nd4j.backend>
■ 性能比較
GPUを利用した場合の性能を計測するため、CPU利用時とGPU利用時の実行速度差を比較する。実行速度の計測には、公式サイトに掲載されている『
LenetMnistExample』(LeNet:2014年度開催の画像認識コンテストILSVRCでGoogleが利用し、高い認識精度を示したニューラルネットワーク構成)を利用し、1世代分の学習(6万個の学習データで各1回学習)にかかる時間を比較した。結果は以下の通り。
◇実行環境
機能 |
内容 |
OS |
Windows7(64bit) |
CPU |
Intel Core2 (1.86GHz)
…プロセッサ数=2 |
GPU |
GeForce GTX650
…プロセッサ数=384 |
Java |
1.8.0_60 |
CUDA |
CUDA 7.5 |
◇実行結果
CPU/GPU |
実行時間 |
CPU |
820.489秒 (=13分40.489秒) |
GPU |
349.991秒 (=05分49.991秒) |
処理時間は2分の1以下となり、高速化できたことが確認できた。
■ 参照
- ND4J 公式 「JCublas Backend for GPUs」