【コラム】GPUを用いた学習

一覧に戻る

 深層畳み込みニューラルネットワークは、数万〜数百万のラベル付き訓練データを必要とし、モデルのパラメータの最適化のためには長い時間を要します。実験をする際には、多くのモデル、多くのパラメータの組み合わせを試す必要があり、計算時間は何倍にもなります。そこで、訓練の一部の計算をCPUの代わりにGPUを利用することで5倍から10倍の高速化を可能にしました。高速化の性能は、GPUのタイプに依存し、独自の環境のモデル、メモリサイズ、データの処理方法などに依存します。

 GPUによる深層ニューラルネットワークの訓練の高速化は、GPUが数千のコアを利用して、異なるパラメータに対する同じ計算の繰り返しを並列に出来るようにデザインされていることによって実現されています。例えば、GTX TITAN X (Pascal)は、3584個のCUDAコアを持ちます。モデルを訓練するとき、全てのGPUコアは異なる入力データについて、数千パラメータを同時に更新できます。これはCPUによってパラメータを逐次処理(一つずつ処理)する更新よりも高速に処理できるというわけです。

 しかしながら、GPUのメモリに入力データを読み込ませる処理に時間がかかるため、データの転送速度についてはCPUよりもGPUの方が遅い場合があります。ニューラルネットワークモデルが多くのサンプルデータを読み込む必要がある場合、パラメータの更新よりもデータの読み込みの方が時間がかかります。そのため、GPUを使った高速化を試すときには訓練用のバッチ処理のサイズが重要となります。

 さらに、GPUのメモリには限りがあります。もしモデルが大きすぎたなら、GPUはパラメータの全てをメインメモリ上で扱うことが出来ず、パラメータの一部だけをメモリで扱う様に設定をする必要があります。これは訓練速度を減速させる大きな要因になります。訓練のバッチ処理で、GPUが全てのモデルパラメータを更新するために、何度もメインメモリにアクセスしているような場合には、モデルのサイズを小さくする必要があります。それは、例えば、いくつかの階層か、あるいはニューロンの数を減らします。あるいはCPUによる処理に変更します。転送速度がボトルネックとなってCPUを使ったほうが早い場合もあるからです。要約すると、深層ニューラルネットワークの学習のためにGPUを使うとき、一番気にしなければならないのは、常にGPUのメモリサイズだということです。

一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA