code: def forward(
      self,
      input: torch.Tensor,
      weight: torch.Tensor,
      weight_scales: torch.Tensor,
      weight_zeros: torch.Tensor,
      g_idx: torch.Tensor = None,
      act_type=0,
      bias: torch.Tensor = None,
      residual: torch.Tensor = None,
      qkv_fused=False,
  ):
      add_bias = True
      if bias is None:
          bias = self.empty_tensor
          add_bias = False
  
      add_residual = True
      if residual is None:
          residual = self.empty_tensor
          add_residual = False
      x = input.view(-1, input.shape[-1])
  
      out = gptq_fused_linear_triton(
          x,
          weight,
          weight_scales,
          weight_zeros,
          bias,
          residual,
          self.bits,
          self.maxq,
          self.group_size,
          qkv_fused,
          add_bias,
          add_residual,
          act_type=act_type,
          g_idx=g_idx,
      )
      if qkv_fused:
          out = out.view(
              3, input.shape[0], input.shape[1], weight.shape[-1]
          )
      else:
          out = out.view(
              input.shape[0], input.shape[1], weight.shape[-1]
          )
  
      return out
  
imports: import torch
  from colossalai.kernel.triton import gptq_fused_linear_triton
label_desc: Use image node_id 2 for calling the CaiGPTQLinearOp obj's underlying member method code with example usage: obj.forward(input, weight, weight_scales, weight_zeros, g_idx, act_type, bias, residual, qkv_fused) and returns: out