code: def backward(ctx, grad_output, grad_input):
      grad_output = grad_output.contiguous()
      grad_input = grad_input.contiguous()
      x, weight = ctx.saved_tensors
      batch_shape, n = x.shape[:-1], x.shape[-1]
      batch_dim = np.prod(batch_shape)
      (
          grad_input,
          grad_weight,
          grad_bias,
      ) = fused_dense_cuda.linear_bias_residual_backward(
          x.reshape(batch_dim, n),
          weight,
          grad_output.reshape(batch_dim, grad_output.shape[-1]),
          grad_input.reshape(batch_dim, n),
      )
      return grad_input.reshape_as(x), grad_weight, grad_bias, None
  
imports: import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  from torch.cuda.amp import custom_bwd, custom_fwd
  import fused_dense_lib
  from src.ops.gelu_activation import gelu_bwd
label_desc: Use image node_id 2 for calling the FusedDenseResidualFunc obj's underlying member method code with example usage: obj.backward(ctx, grad_output, grad_input) and returns: grad_input,  grad_weight,  grad_bias,  None