高レベルの深層学習ライブラリKeras
には、複数のタイプのリカレントレイヤーがあります。これらには、LSTM
(長期短期記憶)およびCuDNNLSTM
が含まれます。 Keras documentation によれば、CuDNNLSTM
は次のとおりです。
CuDNNが支援する高速LSTM実装。 TensorFlowバックエンドを使用して、GPUでのみ実行できます。
Kerasは可能な限りGPUを自動的に使用すると信じています。 TensorFlowビルド手順 によると、機能するTensorFlow GPUバックエンドを使用するには、CuDNNが必要です。
次のNVIDIAソフトウェアをシステムにインストールする必要があります。
- NVIDIAのCuda Toolkit(> = 7.0)。バージョン9.0をお勧めします。詳細については、NVIDIAのドキュメントを参照してください。 NVIDIAのドキュメントで説明されているように、関連するCudaパス名をLD_LIBRARY_PATH環境変数に必ず追加してください。
- NVIDIAのCuda Toolkitに関連付けられているNVIDIAドライバー。
- cuDNN(> = v3)。バージョン6.0を推奨します。詳細については、NVIDIAのドキュメント、特にLD_LIBRARY_PATH環境変数に適切なパス名を追加する説明を参照してください。
したがって、CuDNNLSTM
は、TensorFlow GPUバックエンドを使用した通常のLSTM
とどのように異なりますか?使用可能なTensorFlow GPUバックエンドが見つかった場合、CuDNNLSTM
が自動的に選択され、通常のLSTM
と置き換えられますか?
ぜひ試してみてください。私の場合、LSTM
を使用したモデルのトレーニングには10分30秒かかりました。呼び出しをLSTM()
からCuDNNLSTM()
に切り替えるだけで1分もかかりませんでした。
また、CuDNNLSTM()
に切り替えると、model.evaluate()
とmodel.predict()
も大幅に高速化されることに気付きました。
GPUは大規模な並列計算に適しています。線形代数演算のほとんどはパフォーマンスを向上させるために並列化できます。行列乗算や勾配降下などのベクトル演算は、GPUサポートと並行して実行される大きな行列に適用できます。 CUDA-Compute Unified Device Architectureは、ベクトルopがGPU並列処理を利用できるようにするインターフェースを提供します。 CuDNNは、CUDAを使用してGPUで大規模な行列演算を行うためのカーネルを実装しています。
ここで、CuDNNLSTMはCUDA並列処理用に設計されており、GPUがない場合は実行できません。ただし、LSTMは通常のCPU用に設計されています。実行時間が短縮されるのは、並列処理のためです。