Megatron Bridge integrates Megatron-Core training with Hugging Face–centric workflows. In Primus, the megatron_bridge framework is used for post-training with module preset sft_trainer.yaml, and the repository also ships a pretraining preset at primus/configs/modules/megatron_bridge/pretrain_trainer.yaml.
Megatron Bridge resolves training defaults through a recipe and flavor:
recipeis a Python module path undermegatron.bridge.recipes(e.g.qwen.qwen3).flavoris the function name inside that module (e.g.qwen3_8b_finetune_config) that returns aConfigContainer.
At runtime, load_recipe_config in primus/backends/megatron_bridge/config_utils.py:
- Imports
megatron.bridge.recipes.<recipe>and calls<flavor>(**filtered_backend_args)to build the baselineConfigContainer. - Deep-merges Primus
backend_args(from YAML + CLI) into that dataclass via_merge_dict_to_dataclass, so user overrides sit on top of recipe defaults.
You normally specify recipe, flavor, hf_path, and dataset in the model YAML; training hyperparameters and parallelism go in module overrides or experiment module overrides (modules.post_trainer.overrides for SFT/post-training, modules.pre_trainer.overrides for pretraining examples).
From primus/configs/modules/megatron_bridge/sft_trainer.yaml (extends module_base.yaml). Pretraining examples use pretrain_trainer.yaml instead.
| Parameter | Default | Description |
|---|---|---|
trainable |
true |
Module participates in the training graph. |
sink_level |
null |
Inherited from module_base.yaml; structured logging sink level. |
file_sink_level |
DEBUG |
File sink verbosity. |
stderr_sink_level |
INFO |
Stderr sink verbosity. |
| Parameter | Default | Description |
|---|---|---|
stage |
"sft" |
Backend stage selector. Primus dispatches post-training via primus train posttrain and loads the Megatron Bridge posttrain trainer when this module is used under post_trainer. |
trainable |
true |
See Base module parameters. |
CLI note: The user-facing suite is posttrain (primus train posttrain --config ...). The YAML stage field selects the Megatron Bridge trainer implementation (sft), not the CLI suite name.
For Bridge pretraining, use the normal pretraining suite (primus train pretrain --config ...) with experiments that reference modules.pre_trainer.config: pretrain_trainer.yaml.
Primus examples set these under modules.post_trainer.overrides (see examples/megatron_bridge/configs/).
| Parameter | Example | Description |
|---|---|---|
peft |
"none", "lora" |
Parameter-efficient fine-tuning mode. |
peft_dim |
16 |
LoRA rank (example: llama31_70b_lora_posttrain.yaml). |
peft_alpha |
32 |
LoRA scaling alpha (same example). |
packed_sequence |
false |
Pack multiple short sequences per microbatch when supported. |
Additional keys such as pretrained_checkpoint, use_distributed_optimizer, or cross_entropy_loss_fusion appear in larger examples and are merged into the recipe ConfigContainer when the dataclass exposes matching fields.
Typical overrides from Megatron Bridge examples:
| Parameter | Example | Description |
|---|---|---|
tensor_model_parallel_size |
1, 2, 8 |
Tensor parallelism degree. |
pipeline_model_parallel_size |
1 |
Pipeline parallelism degree. |
virtual_pipeline_model_parallel_size |
null |
Virtual pipeline stages per rank when PP > 1. |
context_parallel_size |
1 |
Context parallelism degree. |
sequence_parallel |
false |
Sequence parallelism within TP groups. |
use_megatron_fsdp |
false |
Optional Megatron FSDP path. |
| Parameter | Example | Description |
|---|---|---|
train_iters |
200, 1000 |
Total training iterations. |
global_batch_size |
8, 128 |
Global batch across data-parallel groups. |
micro_batch_size |
1, 2 |
Per-GPU microbatch before gradient accumulation. |
seq_length |
2048, 8192 |
Training sequence length. |
eval_interval |
30 |
Steps between evaluations. |
save_interval |
50 |
Steps between checkpoint saves. |
| Parameter | Example | Description |
|---|---|---|
finetune_lr |
1.0e-4, 5.0e-6 |
Peak learning rate for fine-tuning. |
min_lr |
0.0 |
Floor learning rate after decay. |
lr_warmup_iters |
50 |
Linear warmup length in iterations. |
lr_decay_iters |
null |
Optional decay span; null defers to recipe defaults. |
| Parameter | Example | Description |
|---|---|---|
precision_config |
bf16_mixed, fp16_mixed, fp32 |
Mixed-precision recipe for Megatron Bridge. |
comm_overlap_config |
null |
Optional communication/compute overlap policy object. |
pipeline_dtype |
null |
Dtype for pipeline stages when PP is enabled. |
| Parameter | Example | Description |
|---|---|---|
recompute_granularity |
full |
Activation recomputation granularity. |
recompute_method |
uniform |
How recomputation is scheduled across layers. |
recompute_num_layers |
1 |
Number of layers per recompute group (workload-dependent). |
From sft_trainer.yaml (defaults shown).
| Parameter | Default | Description |
|---|---|---|
enable_primus_turbo |
true |
Master flag for Primus-Turbo optimized kernels and paths. |
use_turbo_attention |
false |
Turbo attention implementation. |
use_turbo_parallel_linear |
false |
Turbo parallel linear layers. |
use_turbo_grouped_gemm |
false |
Turbo grouped GEMM flag for MoE paths (the preset ships this key). The former use_turbo_grouped_mlp alias has been removed. |
moe_use_fused_router_with_aux_score |
false |
Fused MoE router with auxiliary loss handling. |
enable_turbo_attention_float8 |
false |
FP8 path inside Turbo attention. |
use_turbo_deepep |
false |
DeepEP-style expert-parallel integration. |
turbo_deepep_num_cu |
32 |
Compute-unit count hint for DeepEP. |
turbo_deepep_use_comm_stream |
false |
Use dedicated communication streams. |
turbo_sync_free_moe_stage |
0 |
Sync-free MoE scheduling stage. |
use_turbo_fused_act_with_probs |
false |
Fuse activation with probability tensors where applicable. |
use_turbo_rms_norm |
false |
Turbo RMSNorm path. |
Environment: PRIMUS_TURBO_MOE_DISPATCH_COMBINE_BACKEND (default TURBO) is read in primus/backends/megatron/patches/args/rocm_arg_validation.py to select MoE dispatch/combine behavior when Turbo MoE is active.
Model YAML files (qwen3_8b.yaml, qwen3_32b.yaml, llama31_70b.yaml) supply:
| Parameter | Example | Description |
|---|---|---|
recipe |
qwen.qwen3, llama.llama3 |
Recipe module under megatron.bridge.recipes. |
flavor |
qwen3_8b_finetune_config, llama31_70b_finetune_config |
Flavor function producing the baseline ConfigContainer. |
hf_path |
Qwen/Qwen3-8B, meta-llama/Meta-Llama-3.1-70B |
Hugging Face model id for weights/tokenizer flows. |
dataset |
nested | Example: dataset_name: "rajpurkar/squad" for SQuAD-style fine-tuning. |
Logging (optional overrides in examples): wandb_project, wandb_entity, wandb_exp_name might be set under overrides for experiment tracking when Weights & Biases is configured.
MegatronBridgeArgBuilder (primus/backends/megatron_bridge/argument_builder.py) performs a deep merge of CLI and YAML into a single dict/namespace before load_recipe_config runs. Nested dicts (for example dataset or optimizer sections) combine recursively; explicit None in the merged structure can clear fields depending on merge rules in _merge_dict_to_dataclass.
Under examples/megatron_bridge/configs/, per-GPU directories (for example MI300X/, MI355X/) contain full experiment YAMLs that set work_group, user_name, exp_name, workspace, and Megatron Bridge modules. Post-training examples use modules.post_trainer with config: sft_trainer.yaml; MI300X pretraining examples use modules.pre_trainer with config: pretrain_trainer.yaml. Both patterns set framework: megatron_bridge, model: <preset>.yaml, and an overrides block for parallelism, LR, precision, and related options.