@@ -100,7 +100,7 @@ def load_model_checkpoint(folder, model):
100100
101101 If tensor parallel mode is isp, the saved weight is named:
102102 - folder
103- - model_tp{tp_rank}_wp {wp_rank}_pp{pp_rank}.pt
103+ - model_wp {wp_rank}_pp{pp_rank}.pt
104104
105105 If fsdp is activated, the saved weight is named:
106106 - folder
@@ -122,19 +122,19 @@ def load_model_checkpoint(folder, model):
122122 fns = get_fns (folder )
123123
124124 # avoid ckpt misuse between FSDP and no-FSDP
125- test_fn = list ([f for f in fns if f .startswith ("model_t" ) and not f .endswith (".md5" )]).pop ()
125+ _start_with = "model_w" if is_using_isp () else "model_t"
126+ test_fn = list ([f for f in fns if f .startswith (_start_with ) and not f .endswith (".md5" )]).pop ()
126127 assert ("_dp" in test_fn and gpc .config .parallel .zero1 .fsdp ) or (
127128 "_dp" not in test_fn and not gpc .config .parallel .zero1 .fsdp
128129 ), "FSDP model wants to load no-FSDP ckpts or reverse"
129130
130131 max_pp , max_wp , max_tp , max_zo = 0 , 0 , 0 , 0
131132 for fn in fns :
132- if fn .startswith ("model_t" ) and not fn .endswith (".md5" ):
133+ if fn .startswith (_start_with ) and not fn .endswith (".md5" ):
133134 segements = os .path .splitext (fn )[0 ].split ("_" )
134135 if is_using_isp ():
135136 max_pp = max (max_pp , int (segements [- 1 ][2 :]))
136137 max_wp = max (max_wp , int (segements [- 2 ][2 :]))
137- max_tp = max (max_tp , int (segements [- 3 ][2 :]))
138138 elif gpc .config .parallel .zero1 .fsdp :
139139 max_zo = max (max_zo , int (segements [- 1 ][2 :]))
140140 max_pp = max (max_pp , int (segements [- 2 ][2 :]))
@@ -149,16 +149,17 @@ def load_model_checkpoint(folder, model):
149149 assert (
150150 wp_size == max_wp + 1
151151 ), f"The weights are save for { max_wp + 1 } parallelism, while current has { wp_size } weight parallelism"
152- assert (
153- tp_size == max_tp + 1
154- ), f"The weights are save for { max_tp + 1 } parallelism, while current has { tp_size } tensor parallelism"
152+ if not is_using_isp ():
153+ assert (
154+ tp_size == max_tp + 1
155+ ), f"The weights are save for { max_tp + 1 } parallelism, while current has { tp_size } tensor parallelism"
155156 if gpc .config .parallel .zero1 .fsdp :
156157 assert (
157158 dp_size == max_zo + 1
158159 ), f"The weights are save for { max_zo + 1 } FSDP shards , while current has { dp_size } FSDP shards"
159160
160161 if is_using_isp ():
161- should_load_name = f"model_tp { tp_rank } _wp { wp_rank } _pp{ pp_rank } .pt"
162+ should_load_name = f"model_wp { wp_rank } _pp{ pp_rank } .pt"
162163 elif gpc .config .parallel .zero1 .fsdp :
163164 should_load_name = f"model_tp{ tp_rank } _pp{ pp_rank } _dp{ dp_rank } .pt"
164165 else :
@@ -205,7 +206,7 @@ def save_model_checkpoint(folder, model):
205206
206207 If tensor parallel mode is isp, the saved weight is named:
207208 - folder
208- - model_tp{tp_rank}_wp {wp_rank}_pp{pp_rank}.pt
209+ - model_wp {wp_rank}_pp{pp_rank}.pt
209210
210211 If fsdp is activated, the saved weight is named:
211212 - folder
@@ -243,11 +244,11 @@ def save_model_checkpoint(folder, model):
243244
244245 # for tensor parallel mode with isp
245246 if is_using_isp ():
246- if wdp_rank == 0 or dp_rank == 0 :
247- fn = f"model_tp { tp_rank } _wp { wp_rank } _pp{ pp_rank } .pt"
247+ if wdp_rank == 0 :
248+ fn = f"model_wp { wp_rank } _pp{ pp_rank } .pt"
248249 fp = os .path .join (folder , fn )
249250 llm_save (fp , saved_obj = states )
250- topo_fn = f"topo_tp { tp_rank } _wp { wp_rank } _pp{ pp_rank } .json"
251+ topo_fn = f"topo_wp { wp_rank } _pp{ pp_rank } .json"
251252 topo_fp = os .path .join (folder , topo_fn )
252253 llm_save (topo_fp , saved_obj = topo )
253254 else :
@@ -292,13 +293,12 @@ def load_optimizer_checkpoint(folder, optim):
292293 """
293294
294295 fns = get_fns (folder )
295- max_tp , max_wp , max_pp , max_zero , max_dp = 0 , 0 , 0 , 0 , 0
296+ max_tp , max_wp , max_pp , max_zero = 0 , 0 , 0 , 0
296297 for fn in fns :
297298 if fn .startswith ("optimizer_" ) and not fn .endswith (".md5" ):
298299 if is_using_isp ():
299- _ , tp , wp , pp , dp = os .path .splitext (fn )[0 ].split ("_" )
300- max_dp = max (max_dp , int (dp [2 :]))
301- max_tp = max (max_tp , int (tp [2 :]))
300+ _ , wp , pp , zero = os .path .splitext (fn )[0 ].split ("_" )
301+ max_zero = max (max_zero , int (zero [2 :]))
302302 max_wp = max (max_wp , int (wp [2 :]))
303303 max_pp = max (max_pp , int (pp [2 :]))
304304 else :
@@ -311,24 +311,18 @@ def load_optimizer_checkpoint(folder, optim):
311311 tp_size = gpc .get_world_size (ParallelMode .TENSOR )
312312 wp_size = gpc .get_world_size (ParallelMode .WEIGHT )
313313 pp_size = gpc .get_world_size (ParallelMode .PIPELINE )
314- dp_size = gpc .get_world_size (ParallelMode .DATA )
315314
316- if is_using_isp ():
317- assert dp_size == max_dp + 1 , (
318- f"The optimizer states are save for { max_dp + 1 } data parallelism, "
319- f"while current has { dp_size } data parallelism"
320- )
321- if not is_using_isp ():
322- assert zero_size == max_zero + 1 , (
323- f"The optimizer states are save for { max_zero + 1 } zero parallel, "
324- f"while current has { zero_size } zero broadcast range."
325- )
315+ assert zero_size == max_zero + 1 , (
316+ f"The optimizer states are save for { max_zero + 1 } zero parallel, "
317+ f"while current has { zero_size } zero broadcast range."
318+ )
326319 assert (
327320 pp_size == max_pp + 1
328321 ), f"The optimizer states are save for { max_pp + 1 } pipelines, while current has { pp_size } pipelines"
329- assert (
330- tp_size == max_tp + 1
331- ), f"The optimizer states are save for { max_tp + 1 } parallelism, while current has { tp_size } tensor parallelism"
322+ if not is_using_isp ():
323+ assert (
324+ tp_size == max_tp + 1
325+ ), f"The optimizer states are save for { max_tp + 1 } parallelism, while current has { tp_size } tensor parallelism"
332326 assert (
333327 wp_size == max_wp + 1
334328 ), f"The optimizer states are save for { max_wp + 1 } parallelism, while current has { wp_size } weight parallelism"
@@ -337,9 +331,8 @@ def load_optimizer_checkpoint(folder, optim):
337331 tp_rank = gpc .get_local_rank (ParallelMode .TENSOR )
338332 wp_rank = gpc .get_local_rank (ParallelMode .WEIGHT )
339333 pp_rank = gpc .get_local_rank (ParallelMode .PIPELINE )
340- dp_rank = gpc .get_local_rank (ParallelMode .DATA )
341334 if is_using_isp ():
342- fp = f"optimizer_tp { tp_rank } _wp { wp_rank } _pp{ pp_rank } _dp { dp_rank } .pt"
335+ fp = f"optimizer_wp { wp_rank } _pp{ pp_rank } _zo { zero_rank } .pt"
343336 else :
344337 fp = f"optimizer_tp{ tp_rank } _pp{ pp_rank } _zo{ zero_rank } .pt"
345338
@@ -387,16 +380,17 @@ def save_optimizer_checkpoint(optim, state_path):
387380 tp_rank = gpc .get_local_rank (ParallelMode .TENSOR )
388381 wp_rank = gpc .get_local_rank (ParallelMode .WEIGHT )
389382 pp_rank = gpc .get_local_rank (ParallelMode .PIPELINE )
390- dp_rank = gpc .get_local_rank (ParallelMode .DATA )
391383 zero_size = gpc .get_world_size (ParallelMode .ZERO1 )
392384 tp_size = gpc .get_world_size (ParallelMode .TENSOR )
385+ wp_size = gpc .get_world_size (ParallelMode .WEIGHT )
393386 dp_size = gpc .get_world_size (ParallelMode .DATA )
394387
395388 states = optim .state_dict ()
396389 if isinstance (optim , (HybridZeroOptimizer , HybridZeroOptimizer_v2 )):
397390 if is_using_isp ():
398- fp = f"optimizer_tp{ tp_rank } _wp{ wp_rank } _pp{ pp_rank } _dp{ dp_rank } .pt"
399- llm_save (os .path .join (state_path , fp ), states )
391+ fp = f"optimizer_wp{ wp_rank } _pp{ pp_rank } _zo{ zero_rank } .pt"
392+ if (gpc .get_global_rank () % (tp_size * dp_size )) < zero_size * wp_size :
393+ llm_save (os .path .join (state_path , fp ), states )
400394 else :
401395 fp = f"optimizer_tp{ tp_rank } _pp{ pp_rank } _zo{ zero_rank } .pt"
402396 if (gpc .get_global_rank () % (tp_size * dp_size )) < zero_size * tp_size :
0 commit comments