まえがき
本研究では、深層学習の計算にMPIを用いて、どの程度高速化できるかの検証を行なった。並列処理可能なアルゴリズムで排他的論理和の計算を3層のニューラルネットワークに学習させた。その結果、同じ時間の長さで比較した場合、並列処理を行わなかった場合に比べ、並列化を行なった場合により学習の収束が早くなることがわかった。
研究の目的
本研究では、深層学習の学習部分を、並列処理を行うことでどの程度高速化できるかを調査することを目的とする。
実験環境
実験では、コアが4つ搭載してあるIntel Core i7のCPUを使用した。オーバークロックの機構が搭載してあるので、実験で正確な評価はできなかった。使用言語はC言語である。
処理のフローチャート
今回の実験では、MPIの初期化と学習に必要な変数などの初期化を行った後に、学習を行い、処理時間を評価した。
処理時間については、初期化に要した時間と学習に要した時間を別々に評価した。
学習の方法は、複数のコアで別々に学習を行い、重みの更新量を求め、1エポックごとに重みの更新量を同期するようにした。それぞれのコアでニューラルネットワーク全体の重みの更新量が求まり、同期の際には同じ位置に相当する重みの更新量をコア数分単純に足し合わせ、元のニューラルネットワークの重みを更新する。その処理をフローチャートでまとめた図を以下に示す。
以下に述べる全ての実験では、排他的論理和を3層のニューラルネットワークに学習させることを目的としている。入力は2つで、中間層には20ノードを割り当てた。各コアで計算した重みの更新量が同一にならないように、入力データには0から0.1までの範囲でノイズとなる乱数を加えた。また、コアが1つの場合の実験結果は、MPIを使用しない場合と比べ、MPIを使用した場合により短い処理時間となったので、そちらを採用した。
まず、一つ目の実験ではコア数を1個から2個、4個まで増やして強スケーリングの実験を行った。学習では、1000000エポックの計算をさせた。トレーニングデータの総数は16個で、一つのコアが担当するトレーニングデータはその数を稼働している全てのコア数で割ったものである。実験結果を以下に示す。
実験結果から、コア数を増やすと処理時間が短くなることがわかった。しかしながら、1コアから4コアにした場合に単純に計算速度が4倍になるわけではなかった。
また、MPIの初期化や変数の初期化に要した時間は1コアの場合0.008172秒、2コアの場合0.009878秒、4コアの場合0.013155秒である。
次に、弱スケーリングを評価する実験を行う。今回の実験でも同様にコア数は1個から2個、4個まで増やし、1000000エポックの計算をさせた。問題サイズについては、1コアにつき4つのトレーニングデータを担当させた。データの種類は排他的論理和を表すのに必要な4種類の入力データに乱数を加えたものとなっており、
4種類*4セットのデータとなっているので基本的には不変である。
実験結果を以下に示す。
実験結果から、1コアの場合と4コアの場合であまり処理
時間が変わっていないことから、弱スケーリングで評価した場合でも、高速化ができていることがわかる。
最後に、学習の収束具合について述べる。トレーニングデータの総数は16個で、一つのコアが担当するトレーニングデータの数は16個を稼働している全てのコア数で割ったものである。以下に実験結果を示す。
図からわかるように、1 コアで学習させた場合よりも、2 コア、4 コアで学習させた場合により収束が早くなる傾向がある。それに加え、1000000エポックの学習に掛かる時間はコア数が多い場合により短くなる。ゆえに、深層学習を分散して行った場合により収束が早くなると言える。
結論
本研究では、強スケーリング、弱スケーリング共にある程度の高速化ができていることがわかった。また、1000000エポックの学習をさせた場合の収束具合は、コア数を1個から2個、3個に増やした場合でも問題なかった。
以上のことにより、深層学習を並列化することにより、高速化することができたと言える。