code: def _build_transformer_file_map(self):
      transformer_layer_keys = self.layer_keys[1:-1]
      file_map = {}
      # XXX: this is not guaranteed
      layers_per_pp = 1
      if self.pp_degree > 0:
          layers_per_pp = len(transformer_layer_keys) // self.pp_degree
      # print(f"{transformer_layer_keys} {layers_per_pp}")
      for key_index, layer_key in enumerate(transformer_layer_keys):
          pp_index = key_index // layers_per_pp
          layer_files = get_files_with_prefix(
              self.layer_files, layer_key
          )
          layer_file_partitions = partition_data(
              layer_files, self.tp_degree
          )
          for tp_index in range(self.tp_degree):
              map_key = (tp_index, pp_index)
              if not map_key in file_map.keys():
                  file_map[map_key] = []
              file_map[map_key].append(layer_file_partitions[tp_index])
  
      return file_map
  
imports: import os
  from typing import Dict
  import torch
  from .reshape_3d_utils import model_3d_desc
  from .reshape_utils import basic_folder_validation, merge_state, partition_data, get_files, get_files_with_prefix
  from .constants import MODEL_FILE_PREFIX, LAYER_FILE_PREFIX
  from .reshape_meg_2d import reshape_meg_2d_parallel, meg_2d_parallel_map
  from .zero_checkpoint import ZeROCheckpoint
  from .constants import *
label_desc: Use image node_id 30 for calling the DeepSpeedCheckpoint obj's underlying member method code with example usage: obj._build_transformer_file_map() and returns: file_map