code: def forward(ctx, X_3D, W, bias):
      # reshape input to [N * L, D]
      X = X_3D.view(-1, X_3D.size(-1))
  
      ctx.save_for_backward = X, W
      # rowwise quantize for X
      # columnwise quantize for W (first rowwise, transpose later)
      X_int8, state_X = quantize_rowwise(X)
      W_int8, state_W = quantize_rowwise(W)
  
      # matmult, fused dequant and add bias
      # call kernel which expects rowwise quantized X and W
      return int8_matmul_rowwise_dequantize(
          X_int8, W_int8.t(), state_X, state_W, bias
      ).view(*X_3D.size()[:-1], -1)
  
imports: import torch
  import torch.nn
  import time
  from functools import partial
  from bitsandbytes.triton.triton_utils import is_triton_available
  from bitsandbytes.triton.dequantize_rowwise import dequantize_rowwise
  from bitsandbytes.triton.quantize_rowwise import quantize_rowwise
  from bitsandbytes.triton.quantize_columnwise_and_transpose import quantize_columnwise_and_transpose
  from bitsandbytes.triton.int8_matmul_rowwise_dequantize import int8_matmul_rowwise_dequantize
  from bitsandbytes.triton.quantize_global import quantize_global, quantize_global_transpose
  from bitsandbytes.triton.int8_matmul_mixed_dequantize import int8_matmul_mixed_dequantize
label_desc: Use image node_id 1 for calling the _switchback_vectorrize obj's underlying member method code with example usage: obj.forward(ctx, X_3D, W, bias) and returns: int8_matmul_rowwise_dequantize