LSTMを最初のレイヤーとしてモデルを正常に実行しました。しかし、好奇心から、私はLSTMをCuDNNLSTMに置き換えます。しかし、model.fitの後で、次のエラーメッセージが返されました。
UnknownError: Fail to find the dnn implementation.
[[{{node cu_dnnlstm_5/CudnnRNN}} = CudnnRNN[T=DT_FLOAT, _class=["loc:@training_2/Adam/gradients/cu_dnnlstm_5/CudnnRNN_grad/CudnnRNNBackprop"], direction="unidirectional", dropout=0, input_mode="linear_input", is_training=true, rnn_mode="lstm", seed=87654321, seed2=0, _device="/job:localhost/replica:0/task:0/device:GPU:0"](cu_dnnlstm_5/transpose, cu_dnnlstm_5/ExpandDims_1, cu_dnnlstm_5/ExpandDims_1, cu_dnnlstm_5/concat_1)]]
[[{{node metrics_3/mean_squared_error/Mean_1/_1877}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="Edge_4852_metrics_3/mean_squared_error/Mean_1", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
私はこれでTestCudnnLSTM()を試しました discussion とテストに成功しました:
Kerasバージョン:2.2.4 Tensorflowバージョン:1.12.0 作成モデル _________________________________________________________________ レイヤー(タイプ)出力形状パラメーター# =============================================== ================== cu_dnnlstm_1(CuDNNLSTM)(なし、1000、1)16 ========== ================================================== ===== 合計パラメータ:16 トレーニング可能なパラメータ:16 トレーニング不可能なパラメータ:0 _________________________________________________________________ なし モデルがコンパイルされました
モデルのフィッティング中に問題が発生したようです。しかし、何が問題なのか正確にはわかりませんか?
Tensorflow 2.0では、RNN LSTMモデルの実行中に同じエラーが発生しました。その理由は、私のcuDNNのバージョンが低いことが原因でした。tensorflowgpu要件ページで、
cuDNN SDK >= 7.4.1.
詳細は https://www.tensorflow.org/install/gp で参照できます。
Tensorflow Redditフォーラムで質問
使用しているCUDAのバージョンに適したNvidiaドライバーバージョンがあることを確認してください。こちらでチェックできます。 https://docs.nvidia.com/deploy/cuda-compatibility/index.html#binary-compatibility
CUDA 9.0を使用していますが、384.81未満のNvidiaドライバーを使用していました。 Nvidiaドライバーを新しいドライバーに更新すると、問題が解決しました。