Skip to content

Commit 13a2f7b

Browse files
authored
[fix] fix writer in training & engram allreduce mode (flagos-ai#1200)
### PR Category <!-- One of [ Train | Inference | Compress | Serve | RL | Core | Hardware | CICD | Tools | Others ] --> Train ### PR Types <!-- One of [ User Experience | New Features | Bug Fixes | Improvements | Performance | Breaking Change| Deprecations | Test Case | Docs | Others ] --> Bug Fixes ### PR Description <!-- Describe what you’ve done --> - fix writer logic when it is None - fix engram hang when parallel mode is allreduce
1 parent f81c089 commit 13a2f7b

3 files changed

Lines changed: 69 additions & 291 deletions

File tree

flagscale/train/megatron/training/arguments_fs.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -422,13 +422,13 @@ def _parse_recompute_refined_config(recom_config, recom_config_name):
422422
f"[rank0]: We do not recommend using allreduce for engram embedding, this is deprecated and will be removed in a later version.",
423423
DeprecationWarning,
424424
)
425-
if self.args.engram_embedding_parallel_size is not None:
426-
warnings.warn(
427-
"[rank0]: If set the embedding_parallel_method to allreduce, "
428-
"the embedding module will be the tensor_parallel.layers.VocabParallelEmbedding with tensor_parallel."
429-
"So the embedding_parallel_size is useless and set to None."
430-
)
431-
self.args.engram_embedding_parallel_size = None
425+
if self.args.engram_embedding_parallel_size is not None:
426+
warnings.warn(
427+
"[rank0]: If set the embedding_parallel_method to allreduce, "
428+
"the embedding module will be the tensor_parallel.layers.VocabParallelEmbedding with tensor_parallel."
429+
"So the embedding_parallel_size is useless and set to None."
430+
)
431+
self.args.engram_embedding_parallel_size = None
432432
elif self.args.engram_embedding_parallel_method == "alltoall":
433433
assert (
434434
self.args.engram_embedding_parallel_size is not None

flagscale/train/megatron/training/global_vars.py

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import signal
77
import sys
88
import torch
9-
import torch.distributed
109

1110
from datetime import timedelta
1211

@@ -15,12 +14,13 @@
1514
from megatron.core.energy_monitor import EnergyMonitor
1615
from megatron.core.jit import disable_jit_fuser
1716
from megatron.core.num_microbatches_calculator import init_num_microbatches_calculator, unset_num_microbatches_calculator
18-
from megatron.training.tokenizer import build_tokenizer
17+
from megatron.training.tokenizer import build_tokenizer ########## FlagScale Add ##########
1918
from megatron.training.dist_signal_handler import DistributedSignalHandler
2019

20+
########## FlagScale Begin ##########
2121
from megatron.training.spiky_loss import SpikyLossDetector
2222
from megatron.plugin.utils import get_device_type_for_comm
23-
23+
########## FlagScale End ##########
2424

2525
_GLOBAL_ARGS = None
2626
_GLOBAL_TOKENIZER = None
@@ -32,8 +32,10 @@
3232
_GLOBAL_ENERGY_MONITOR = None
3333
_GLOBAL_SIGNAL_HANDLER = None
3434

35+
########## FlagScale Begin ##########
3536
_GLOBAL_SPIKY_LOSS_DETECTOR = None
3637
_GLOBAL_EXTRA_VALID_DATASETS = None
38+
########## FlagScale End ##########
3739

3840

3941

@@ -165,15 +167,13 @@ def set_global_writers(args):
165167
Note that this function should be called after calling finish_mpu_init.
166168
This is because we can know which rank is the last one after the rank mapping in finish_mpu_init.
167169
"""
170+
from .utils import is_last_rank
168171

169172
assert args is not None
170173

171174
_ensure_var_is_initialized(_GLOBAL_ARGS, 'args')
172-
173-
from .utils import is_last_rank
174-
if is_last_rank():
175-
_set_tensorboard_writer(args)
176-
_set_one_logger(args)
175+
_set_tensorboard_writer(args)
176+
_set_one_logger(args)
177177

178178
# build wandb writers for all processes in the dp group of the last rank
179179
from megatron.core import mpu
@@ -252,7 +252,7 @@ def _set_tensorboard_writer(args):
252252
'tensorboard writer')
253253

254254
if hasattr(args, 'tensorboard_dir') and \
255-
args.tensorboard_dir:
255+
args.tensorboard_dir and args.rank == (args.world_size - 1):
256256
try:
257257
from torch.utils.tensorboard import SummaryWriter
258258
print('> setting tensorboard ...')
@@ -274,7 +274,6 @@ def _set_wandb_writer(args):
274274
raise ValueError("Please specify the wandb experiment name!")
275275

276276
import wandb
277-
rank = torch.distributed.get_rank()
278277
if args.wandb_save_dir:
279278
save_dir = args.wandb_save_dir
280279
else:
@@ -286,9 +285,8 @@ def _set_wandb_writer(args):
286285
# settings were.
287286
with open(wandb_config['kitchen_config_file'], "r") as f:
288287
wandb_config['kitchen_config_file_contents'] = f.read()
288+
rank = torch.distributed.get_rank()
289289
save_dir = os.path.join(save_dir, "rank-{}".format(rank))
290-
os.makedirs(save_dir, exist_ok=True)
291-
292290
wandb_id = f"{args.wandb_exp_name}-rank-{rank}"
293291
name = f'{args.wandb_exp_name}-rank-{rank}'
294292
group = args.wandb_exp_name
@@ -303,9 +301,7 @@ def _set_wandb_writer(args):
303301
'config': wandb_config}
304302
if args.wandb_entity:
305303
wandb_kwargs['entity'] = args.wandb_entity
306-
if args.wandb_entity:
307-
wandb_kwargs['entity'] = args.wandb_entity
308-
304+
os.makedirs(wandb_kwargs['dir'], exist_ok=True)
309305
if args.wandb_mode == 'online' or args.wandb_api_key:
310306
assert args.wandb_api_key, 'wandb_api_key is required for online mode'
311307
wandb.login(key=args.wandb_api_key)
@@ -406,6 +402,7 @@ def destroy_global_vars():
406402
_GLOBAL_SIGNAL_HANDLER = None
407403

408404

405+
########## FlagScale Begin ##########
409406
def get_spiky_loss_detector():
410407
"""Return spiky loss detector."""
411408
_ensure_var_is_initialized(_GLOBAL_SPIKY_LOSS_DETECTOR, "spiky loss detector")
@@ -427,4 +424,5 @@ def get_extra_valid_datasets():
427424
def set_extra_valid_datasets(extra_valid_datasets):
428425
"""Set extra_valid datasets.""" ""
429426
global _GLOBAL_EXTRA_VALID_DATASETS
430-
_GLOBAL_EXTRA_VALID_DATASETS = extra_valid_datasets
427+
_GLOBAL_EXTRA_VALID_DATASETS = extra_valid_datasets
428+
########## FlagScale End ##########

0 commit comments

Comments
 (0)