mlm-bridge-training
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseMLM vs Bridge Training
MLM 与 Bridge 训练对比
For how they differ, the arg mapping tables, gotchas, and translation script, see:
- @docs/megatron-lm-to-megatron-bridge.md
关于两者的差异、参数映射表、注意事项以及转换脚本,请参考:
- @docs/megatron-lm-to-megatron-bridge.md
Correlation Testing
相关性测试
Use for loss-correlation testing. This recipe uses
bare defaults (LayerNorm, GeLU, learned_absolute position
embeddings, inherited from tokenizer) — matching MLM
defaults with no args.
vanilla_gpt_pretrain_configGPTModelProvidervocab_sizepretrain_gpt.py使用进行损失相关性测试。该配置模板采用基础的默认设置(LayerNorm、GeLU、可学习绝对位置嵌入,从分词器继承)——与MLM的默认设置一致,无需额外参数。
vanilla_gpt_pretrain_configGPTModelProvidervocab_sizepretrain_gpt.pyMLM Correlation Run (2L/256H, 1 GPU)
MLM 相关性测试运行(2层/256隐藏层大小,1 GPU)
bash
PYTHONPATH=3rdparty/Megatron-LM:$PYTHONPATH \
uv run python -m torch.distributed.run --nproc_per_node=1 \
3rdparty/Megatron-LM/pretrain_gpt.py \
--num-layers 2 --hidden-size 256 --num-attention-heads 4 \
--ffn-hidden-size 1024 --seq-length 512 --max-position-embeddings 512 \
--micro-batch-size 4 --global-batch-size 32 \
--train-iters 10 --eval-iters 2 --eval-interval 10 \
--mock-data --bf16 --use-mcore-models \
--tokenizer-type NullTokenizer --vocab-size 32000 \
--lr 3e-4 --min-lr 3e-5 --seed 1234 --log-interval 1bash
PYTHONPATH=3rdparty/Megatron-LM:$PYTHONPATH \
uv run python -m torch.distributed.run --nproc_per_node=1 \
3rdparty/Megatron-LM/pretrain_gpt.py \
--num-layers 2 --hidden-size 256 --num-attention-heads 4 \
--ffn-hidden-size 1024 --seq-length 512 --max-position-embeddings 512 \
--micro-batch-size 4 --global-batch-size 32 \
--train-iters 10 --eval-iters 2 --eval-interval 10 \
--mock-data --bf16 --use-mcore-models \
--tokenizer-type NullTokenizer --vocab-size 32000 \
--lr 3e-4 --min-lr 3e-5 --seed 1234 --log-interval 1Bridge Correlation Run (same config, 1 GPU)
Bridge 相关性测试运行(相同配置,1 GPU)
bash
rm -rf nemo_experiments && \
uv run python -m torch.distributed.run --nproc_per_node=1 \
scripts/training/run_recipe.py \
--recipe vanilla_gpt_pretrain_config \
model.num_layers=2 model.hidden_size=256 \
model.num_attention_heads=4 model.ffn_hidden_size=1024 \
model.seq_length=512 dataset.sequence_length=512 \
train.train_iters=10 train.global_batch_size=32 train.micro_batch_size=4 \
validation.eval_interval=10 validation.eval_iters=2 \
optimizer.lr=3e-4 optimizer.min_lr=3e-5 \
scheduler.lr_warmup_iters=1 scheduler.lr_decay_iters=10 \
rng.seed=1234 logger.log_interval=1bash
rm -rf nemo_experiments && \
uv run python -m torch.distributed.run --nproc_per_node=1 \
scripts/training/run_recipe.py \
--recipe vanilla_gpt_pretrain_config \
model.num_layers=2 model.hidden_size=256 \
model.num_attention_heads=4 model.ffn_hidden_size=1024 \
model.seq_length=512 dataset.sequence_length=512 \
train.train_iters=10 train.global_batch_size=32 train.micro_batch_size=4 \
validation.eval_interval=10 validation.eval_iters=2 \
optimizer.lr=3e-4 optimizer.min_lr=3e-5 \
scheduler.lr_warmup_iters=1 scheduler.lr_decay_iters=10 \
rng.seed=1234 logger.log_interval=1Verification
验证
With matched parameters the LM losses should be nearly identical at each
iteration. Compare values from both logs — they should agree to
within BF16 rounding.
lm loss在参数匹配的情况下,每次迭代的语言模型损失值应几乎完全一致。对比两次运行日志中的值——它们的差异应在BF16的舍入误差范围内。
lm lossMulti-GPU Examples
多GPU示例
MLM 2-GPU with TP=2
MLM 2-GPU (TP=2)
bash
PYTHONPATH=3rdparty/Megatron-LM:$PYTHONPATH \
uv run python -m torch.distributed.run --nproc_per_node=2 \
3rdparty/Megatron-LM/pretrain_gpt.py \
--tensor-model-parallel-size 2 --sequence-parallel \
--num-layers 4 --hidden-size 256 --num-attention-heads 4 \
--seq-length 1024 --max-position-embeddings 1024 \
--micro-batch-size 2 --global-batch-size 16 \
--train-iters 10 --eval-iters 2 --eval-interval 10 \
--mock-data --bf16 --use-mcore-models \
--tokenizer-type NullTokenizer --vocab-size 1024 \
--lr 1e-4 --log-interval 1bash
PYTHONPATH=3rdparty/Megatron-LM:$PYTHONPATH \
uv run python -m torch.distributed.run --nproc_per_node=2 \
3rdparty/Megatron-LM/pretrain_gpt.py \
--tensor-model-parallel-size 2 --sequence-parallel \
--num-layers 4 --hidden-size 256 --num-attention-heads 4 \
--seq-length 1024 --max-position-embeddings 1024 \
--micro-batch-size 2 --global-batch-size 16 \
--train-iters 10 --eval-iters 2 --eval-interval 10 \
--mock-data --bf16 --use-mcore-models \
--tokenizer-type NullTokenizer --vocab-size 1024 \
--lr 1e-4 --log-interval 1Bridge 2-GPU with TP=2
Bridge 2-GPU (TP=2)
bash
rm -rf nemo_experiments && \
uv run python -m torch.distributed.run --nproc_per_node=2 \
scripts/training/run_recipe.py \
--recipe vanilla_gpt_pretrain_config \
model.tensor_model_parallel_size=2 model.sequence_parallel=true \
model.num_layers=4 model.hidden_size=256 \
model.num_attention_heads=4 model.ffn_hidden_size=1024 \
model.seq_length=1024 dataset.sequence_length=1024 \
train.train_iters=10 train.global_batch_size=16 train.micro_batch_size=2 \
validation.eval_interval=10 validation.eval_iters=2 \
scheduler.lr_warmup_iters=2 scheduler.lr_decay_iters=10 \
logger.log_interval=1bash
rm -rf nemo_experiments && \
uv run python -m torch.distributed.run --nproc_per_node=2 \
scripts/training/run_recipe.py \
--recipe vanilla_gpt_pretrain_config \
model.tensor_model_parallel_size=2 model.sequence_parallel=true \
model.num_layers=4 model.hidden_size=256 \
model.num_attention_heads=4 model.ffn_hidden_size=1024 \
model.seq_length=1024 dataset.sequence_length=1024 \
train.train_iters=10 train.global_batch_size=16 train.micro_batch_size=2 \
validation.eval_interval=10 validation.eval_iters=2 \
scheduler.lr_warmup_iters=2 scheduler.lr_decay_iters=10 \
logger.log_interval=1Available Recipes
可用训练配置模板
Common recipes (use with ):
--recipe- — Minimal GPT (bare GPTModelProvider defaults, ideal for correlation testing and custom configs)
vanilla_gpt_pretrain_config - — Llama 3.2 1B (16L, 2048H, GBS=512, seq=8192)
llama32_1b_pretrain_config - — Llama 3 8B
llama3_8b_pretrain_config - — Qwen3 8B
qwen3_8b_pretrain_config - — DeepSeek-V2-Lite 16B MoE
deepseek_v2_lite_pretrain_config
SFT/PEFT variants use / suffix.
_sft_config_peft_config常用配置模板(通过参数使用):
--recipe- — 极简GPT(基础GPTModelProvider默认设置,适用于相关性测试和自定义配置)
vanilla_gpt_pretrain_config - — Llama 3.2 1B(16层,2048隐藏层大小,全局批量大小=512,序列长度=8192)
llama32_1b_pretrain_config - — Llama 3 8B
llama3_8b_pretrain_config - — Qwen3 8B
qwen3_8b_pretrain_config - — DeepSeek-V2-Lite 16B MoE
deepseek_v2_lite_pretrain_config
SFT/PEFT变体使用 / 后缀。
_sft_config_peft_configMegatron-Core Submodule
Megatron-Core 子模块
For what the submodule is and why two versions exist, see
@docs/megatron-lm-to-megatron-bridge.md.
关于该子模块的作用以及为何存在两个版本,请参考@docs/megatron-lm-to-megatron-bridge.md。
Check current version
查看当前版本
bash
./scripts/switch_mcore.sh statusbash
./scripts/switch_mcore.sh statusSwitch to dev for testing newer MCore features
切换到dev版本测试新增MCore功能
bash
./scripts/switch_mcore.sh devbash
./scripts/switch_mcore.sh devuv sync (without --locked) since lockfile is for main
由于锁文件对应main版本,运行uv sync时无需加--locked参数
uv sync
undefineduv sync
undefinedSwitch back to main
切换回main版本
bash
./scripts/switch_mcore.sh mainbash
./scripts/switch_mcore.sh mainAfter pulling latest main
拉取最新main分支后
When you pull the latest Bridge main branch, the submodule pointer may have
been updated. Re-sync the submodule:
bash
git submodule update --init 3rdparty/Megatron-LM当你拉取Bridge的最新main分支时,子模块指针可能已更新。重新同步子模块:
bash
git submodule update --init 3rdparty/Megatron-LMPitfalls
注意事项
-
Alwaysbefore a fresh correlation run. Bridge auto-resumes from stale checkpoints silently.
rm -rf nemo_experiments -
required: Always use
uv run(not bareuv run python -m torch.distributed.runortorchrun).python -
MLM PYTHONPATH: Must includeso
3rdparty/Megatron-LMis importable.gpt_builders.py -
Scheduler overrides: When overridingto a small value, also set
train.train_itersandscheduler.lr_warmup_itersor you get an assertion error.scheduler.lr_decay_iters -
Usein CLI overrides, not
dataset.sequence_length.dataset.seq_length -
MoE OOM: Large MoE models require full activation recomputation and typically multi-node EP. TP does NOT reduce per-GPU expert memory.
-
fails after switching to dev: The lockfile is generated against the main MCore commit. Use
uv sync --locked(withoutuv sync) when on dev.--locked
- 每次新的相关性测试前务必执行:Bridge会自动从旧检查点静默恢复训练。
rm -rf nemo_experiments - 必须使用:始终使用
uv run(而非直接使用uv run python -m torch.distributed.run或torchrun)。python - MLM的PYTHONPATH设置:必须包含,这样才能导入
3rdparty/Megatron-LM。gpt_builders.py - 调度器覆盖:当将覆盖为较小值时,同时需要设置
train.train_iters和scheduler.lr_warmup_iters,否则会触发断言错误。scheduler.lr_decay_iters - CLI覆盖时使用:不要使用
dataset.sequence_length。dataset.seq_length - MoE模型内存不足(OOM):大型MoE模型需要完全激活重计算,通常需要多节点数据并行(EP)。张量并行(TP)不会减少每个GPU上的专家内存占用。
- 切换到dev版本后失败:锁文件是基于MCore的main版本生成的。在dev版本上使用
uv sync --locked(不带uv sync参数)。--locked