web-dev-qa-db-ja.com

KerasのCuDNNLSTMとLSTMの違いは何ですか?

高レベルの深層学習ライブラリ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と置き換えられますか?

25
krismath

ぜひ試してみてください。私の場合、LSTMを使用したモデルのトレーニングには10分30秒かかりました。呼び出しをLSTM()からCuDNNLSTM()に切り替えるだけで1分もかかりませんでした。

また、CuDNNLSTM()に切り替えると、model.evaluate()model.predict()も大幅に高速化されることに気付きました。

16
cryanbhu

GPUは大規模な並列計算に適しています。線形代数演算のほとんどはパフォーマンスを向上させるために並列化できます。行列乗算や勾配降下などのベクトル演算は、GPUサポートと並行して実行される大きな行列に適用できます。 CUDA-Compute Unified Device Architectureは、ベクトルopがGPU並列処理を利用できるようにするインターフェースを提供します。 CuDNNは、CUDAを使用してGPUで大規模な行列演算を行うためのカーネルを実装しています。

ここで、CuDNNLSTMはCUDA並列処理用に設計されており、GPUがない場合は実行できません。ただし、LSTMは通常のCPU用に設計されています。実行時間が短縮されるのは、並列処理のためです。