Transform the model name in each model_chunk in each pp stage into the name in inference engine
(name, pp_rank, vpp_rank, pp_size, vpp_size, num_layers)
| 207 | """ |
| 208 | |
| 209 | def normalize_model_name(name, pp_rank, vpp_rank, pp_size, vpp_size, num_layers): |
| 210 | """ |
| 211 | Transform the model name in each model_chunk in each pp stage into the name in inference engine |
| 212 | """ |
| 213 | if vpp_size > 1: |
| 214 | # print(f'try to bind vpp params to inference engine...') |
| 215 | layers_per_pp = num_layers // pp_size |
| 216 | layers_per_vpp = layers_per_pp // vpp_size |
| 217 | pp_offset = layers_per_vpp * pp_rank |
| 218 | vpp_offset = (layers_per_vpp * pp_size) * vpp_rank |
| 219 | layer_offset = pp_offset + vpp_offset |
| 220 | else: |
| 221 | layers_per_pp = num_layers // pp_size |
| 222 | layer_offset = layers_per_pp * pp_rank |
| 223 | |
| 224 | if layer_name in name: # belong to an intermediate layer |
| 225 | split_name = name.split('.') |
| 226 | # find the num next to split_name |
| 227 | for i, name in enumerate(split_name): |
| 228 | if name == layer_name: |
| 229 | break |
| 230 | layer_num_idx = i + 1 |
| 231 | # check the name |
| 232 | assert len(split_name) >= layer_num_idx + 1, f'split_name = {split_name}' |
| 233 | assert split_name[layer_num_idx].isdigit(), f'split_name = {split_name}' |
| 234 | # increment layer_num_idx by layer_offset |
| 235 | split_name[layer_num_idx] = str(int(split_name[layer_num_idx]) + layer_offset) |
| 236 | name = '.'.join(split_name) # weight name in inference_tp_model |
| 237 | return name |
| 238 | |
| 239 | pp_size = len(params) |
| 240 | normalized_name_to_param = {} |
no outgoing calls
no test coverage detected