class_docstr: Float16 optimizer wrapper for half precision (fp16 and bf16) data types.
  This optimizer wrapper holds main parameters and gradients in fp32 to support
  stable convergence.
  
  Arguments:
      optimizer: base optimizer such as Adam or SGD.
      fp32_grad_accum: to enable the use of fp32 in gradient accumulation and allreduce.
      contiguous_grad_bucket: to enable allocating the master gradients in the 
          contiguous memory space to reduce memory fragmentation.
      async_grad_allreduce: enable asynchronous gradient allreduce that is executed
          along with the training step backprop.
code: def _get_model_and_main_params_data_float16(self):
      model_data = []
      main_data = []
      half_dtype = None
      for model_group, main_group in zip(
          self.float16_groups, self.fp32_from_float16_groups
      ):
          for model_param, main_param in zip(model_group, main_group):
              if half_dtype is None:
                  half_dtype = model_param.data.dtype
              model_data.append(model_param.data)
              main_data.append(main_param.data)
      return model_data, main_data, half_dtype
  
imports: from contextlib import contextmanager
  import torch
  from nemo.utils import logging
label_desc: Use image node_id 5 for calling the MainParamsOptimizerWrapper obj's underlying member method code with example usage: obj._get_model_and_main_params_data_float16() and returns: model_data,  main_data,  half_dtype