Lstm CUDNN_状态_执行_调用cudnnRNNForwardTrainingEx函数失败错误

Lstm CUDNN_状态_执行_调用cudnnRNNForwardTrainingEx函数失败错误,lstm,recurrent-neural-network,cudnn,Lstm,Recurrent Neural Network,Cudnn,我想对可变序列长度使用cudnnrnforwardtrainingex,但是当我通过调用设置可变序列长度时 cudnnSetRNNDataDescriptor(_x_data_desc , _cudnn_data_type , CUDNN_RNN_DATA_LAYOUT_SEQ_MAJOR_UNPACKED//curent fix time major , step , batch , _input_size , seq_len , (void *)&fill_value // ); c

我想对可变序列长度使用cudnnrnforwardtrainingex,但是当我通过调用设置可变序列长度时

cudnnSetRNNDataDescriptor(_x_data_desc
, _cudnn_data_type
, CUDNN_RNN_DATA_LAYOUT_SEQ_MAJOR_UNPACKED//curent fix time major
, step
, batch
, _input_size
, seq_len
, (void *)&fill_value //
);
cudnnSetRNNDataDescriptor(_y_data_desc
, _cudnn_data_type
, CUDNN_RNN_DATA_LAYOUT_SEQ_MAJOR_UNPACKED//curent fix time major
, step
, batch
, _hidden_size * _dir_count
, seq_len
, (void *)&fill_value //, NULL
);
我得到错误CUDNN\u STATUS\u EXECUTION\u FAILED,但只设置seq\u len all equals step,它运行正确,有什么问题

环境详情:

  • 特斯拉T4
  • NVIDIA-SMI 440.33.01驱动程序版本:440.33.01
  • CUDA版本:10.2
  • Cudnn v7.6.5
一些示例代码详细信息:

auto rnn_direction_mode = _bi_direction ?
CUDNN_BIDIRECTIONAL : CUDNN_UNIDIRECTIONAL;

CudnnRunCheckRet(cudnnDropoutGetStatesSize(_handle, &_dropout_state_size));
CudaRunCheckRet(cudaMalloc(&_dropout_state_ptr, _dropout_state_size));
CudnnRunCheckRet(cudnnSetDropoutDescriptor(_dropout_desc, _handle, 0.0f
, _dropout_state_ptr, _dropout_state_size, 0));
CudnnRunCheckRet(cudnnSetRNNDescriptor_v6(_handle
, _rnn_desc
, _hidden_size, _stack_layer_num
, _dropout_desc, _rnn_input_mode
, rnn_direction_mode, _cudnn_rnn_mode
, CUDNN_RNN_ALGO_STANDARD
, _cudnn_data_type));
CudnnRunCheckRet(
cudnnSetRNNMatrixMathType(_rnn_desc, CUDNN_TENSOR_OP_MATH));
float fill_value = 0;
CudnnRunCheckRet(
cudnnSetRNNDataDescriptor(_x_data_desc
, _cudnn_data_type
, CUDNN_RNN_DATA_LAYOUT_SEQ_MAJOR_UNPACKED//curent fix time major
, step
, batch
, _input_size
, seq_len
, (void *)&fill_value //, NULL
));
CudnnRunCheckRet(
cudnnSetRNNDataDescriptor(_y_data_desc
, _cudnn_data_type
, CUDNN_RNN_DATA_LAYOUT_SEQ_MAJOR_UNPACKED//curent fix time major
, step
, batch
, _hidden_size * _dir_count
, seq_len
, (void *)&fill_value //, NULL
));

_x0_desc.set3dDesc(_cudnn_data_type, batch, _input_size, 1);
_y0_desc.set3dDesc(_cudnn_data_type, batch, _hidden_size * _dir_count, 1);
_state_size = 2 * _dir_count * _stack_layer_num * batch * _hidden_size ;
_ht_desc.set3dDesc(_cudnn_data_type, _stack_layer_num * _dir_count, batch, _hidden_size);
_ct_desc.set3dDesc(_cudnn_data_type, _stack_layer_num * _dir_count, batch, _hidden_size);
CudnnRunCheckRet(
cudnnRNNForwardTrainingEx(
_handle
, _rnn_desc
, _x_data_desc, gx->void_ptr()
, _ht_desc, init_ht
, _ct_desc, init_ct
, _par_desc, gw->void_ptr()
, _y_data_desc, gy->void_ptr()
, _ht_desc, out_ht
, _ct_desc, out_ct
, nullptr, nullptr
, nullptr, nullptr
, nullptr, nullptr
, nullptr, nullptr
, g_work->void_ptr(), _work_size
, g_reser->void_ptr(), _reserver_size
));
有人能告诉我有什么问题吗?谢谢