code: def _create_param_mapping(self):
      param_mapping = []
      for i, _ in enumerate(self.optimizer.param_groups):
          param_mapping_per_group = OrderedDict()
          for lp in self.bf16_groups[i]:
              if lp._hp_mapping is not None:
                  lp_name = self.param_names[lp]
                  param_mapping_per_group[
                      lp_name
                  ] = lp._hp_mapping.get_hp_fragment_address()
          param_mapping.append(param_mapping_per_group)
  
      return param_mapping
  
imports: from collections import OrderedDict
  import torch
  import sys
  import os
  from torch._utils import _flatten_dense_tensors, _unflatten_dense_tensors
  from deepspeed import comm
  from deepspeed.runtime.constants import PIPE_REPLICATED
  from deepspeed.runtime import ZeROOptimizer
  from packaging import version
  from deepspeed.git_version_info import version
  from deepspeed.runtime.utils import get_global_norm_of_tensors, clip_tensors_by_global_norm, DummyOptim, align_dense_tensors, all_gather_dp_groups, bwc_tensor_model_parallel_rank, is_model_parallel_parameter, see_memory_usage, graph_process
  from deepspeed.utils import link_hp_params, fragment_address
  from deepspeed.checkpoint import enable_universal_checkpoint
  from deepspeed.checkpoint.constants import DS_VERSION, PARTITION_COUNT, BASE_OPTIMIZER_STATE, SINGLE_PARTITION_OF_FP32_GROUPS, CLIP_GRAD, GROUP_PADDINGS, PARAM_SLICE_MAPPINGS
label_desc: Use image node_id 4 for calling the BF16_Optimizer obj's underlying member method code with example usage: obj._create_param_mapping() and returns: param_mapping