     // cudnn v5 does not support dilations
     std::vector<int> dilations = ctx.Attr<std::vector<int>>("dilations");
     int groups = ctx.Attr<int>("groups");
-    int user_workspace_size = ctx.Attr<int>("workspace_size_MB");
     const T* filter_data = filter->data<T>();
     const std::string data_layout_str = ctx.Attr<std::string>("data_format");
     const paddle::operators::DataLayout data_layout =

      auto cudnn_func = [&](void* cudnn_workspace) {
        PADDLE_ENFORCE_CUDA_SUCCESS(
            platform::dynload::cudnnConvolutionBackwardData(
                handle, &alpha, cudnn_filter_desc,
                filter_data + filter_offset * g, cudnn_input_desc,
                input_data + input_offset * g, cudnn_conv_desc, algo,
                cudnn_workspace, workspace_size_in_bytes, &beta,
                cudnn_output_desc,
                transformed_output_data + output_offset * g));
      };
      workspace_handle.RunFunc(cudnn_func, workspace_size_in_bytes);
    }

    if (!is_sys_pad && strides.size() == 2U) {
      Slice<paddle::platform::CUDADeviceContext, T, 4>(
          ctx, &transformed_output, output, starts, ends, axes);

namespace operators {

using Tensor = framework::Tensor;
using DataLayout = platform::DataLayout;

template <typename T, int D>
static void DataTranspose(const framework::ExecutionContext& ctx,
