docstr: Since the CUDA FP only supports all data types being the same, we will alias the residual
  with our output.
docstr_tok: ["Since","the","CUDA","FP","only","supports","all","data","types","being","the","same",",","we","will","alias","the","residual","with","our","output","."]
code: def forward(
      self,
      residual: torch.Tensor,
      hidden_in: torch.Tensor,
      gamma: torch.Tensor,
      beta: torch.Tensor,
  ) -> Tuple[torch.Tensor, torch.Tensor]:
      """
      Since the CUDA FP only supports all data types being the same, we will alias the residual
      with our output.
      """
      self._residual_output = empty_from(self._output, residual.shape)
      self._fp_post_ln(residual, residual, hidden_in, gamma, beta)
      return residual, residual
  
file_path: deepspeed/deepspeed/inference/v2/modules/implementations/post_norm/cuda_post_ln.py
imports: from typing import Any, Dict, Tuple
  import torch
  from deepspeed.accelerator import get_accelerator
  from ...interfaces import DSPostNormBase, DSPostNormRegistry
  from ...configs import DSNormConfig
  from ....kernels.core_ops.cuda_layer_norm.cuda_post_ln import CUDAFPPostLN
  from ....allocator import empty_from
  from ....inference_parameter import InferenceParameter
label_desc: Use image node_id 5 for calling the DSPostLNCUDAModule obj's underlying member method code with example usage: obj.forward(residual, hidden_in, gamma, beta) and returns: residual,  residual