MoE VLM Training
Stable docs: @docs/training/moe-optimization.md
Card: @skills/nemo-mbridge-perf-moe-vlm-training/card.yaml
FSDP vs 3D Parallel
| Approach |
Strength |
Best fit |
| FSDP |
Simplest path to a working multimodal run |
first bring-up, memory-first tuning, awkward PP boundaries |
| 3D parallel |
Higher ceiling after tuning |
stable models with a clean PP layout and time for deeper sweeps |
For MoE VLMs, the practical workflow is usually:
- get the first reliable run with FSDP
- stabilize real-data input, recompute, and memory behavior
- move to 3D parallel only if the throughput headroom is worth the extra work
Rounded Findings From Recent VLM Runs
Qwen3-VL class models
The main patterns were consistent across the tracker:
- FSDP on GB200-class systems can already reach healthy high-teens utilization
with a comparatively simple setup
- B200 FSDP runs are viable, but more sensitive to recompute choice and frozen
vision settings
- 3D parallel can recover to a similar or better operating point, but only after
tuning MBS, recompute, and the real vision path together
Real data vs mock data
Mock-data VLM runs are not trustworthy performance proxies. In the experiments,
image-free mock runs looked closer to "roughly twice as fast" than "slightly
optimistic" when compared with real multimodal input.
Use real or realistic image payloads before drawing any conclusion about VLM
throughput.
Smaller multimodal MoE runs
The smaller Qwen3.5-style multimodal experiments reinforce the same lessons:
- HybridEP is a solid default on GB200
- TE-scoped CUDA graphs help once the training loop is stable
- larger MBS can pay off, but only if the vision encoder does not become the
next bottleneck
Decision Guide
Choose FSDP when
- you are bringing up a new VLM for the first time
- the model has awkward stage boundaries across embedding, vision, and decoder
- memory fit matters more than absolute throughput
- you may freeze the vision stack during decoder-focused tuning
Choose 3D parallel when
- the model is already stable under FSDP
- the PP layout is clear and repeatable
- you can sweep MBS, recompute, and CUDA-graph scope together
- the goal is best steady-state throughput, not easiest bring-up
Key Tuning Knobs
Keep TP as small as memory permits: prefer activation recompute over
increasing TP when activations, rather than model weights, are the reason the
run does not fit. Lower TP keeps GEMMs larger and avoids unnecessary TP
communication. TP may still be required for dense weights, the vocabulary
head, or a workable PP boundary; verify the actual memory limiter before
removing it.
Make EP large enough to shard expert weights effectively: for an MoE
model whose expert count is divisible by the rank count, start with EP8 on an
8-GPU allocation and EP32 on a 32-GPU allocation. Treat these as starting
points, not unconditional rules: EP does not shard dense, vision, embedding,
or output-layer weights, and the final choice must respect PP/DP rank layout
and the hardware topology.
Prefer selective activation recompute after fit is established: use full
recompute to get a memory-constrained configuration running, then replace it
with the narrowest supported selective modules. This usually recovers more
throughput than adding TP solely for activation memory.
Qwen3.5/Qwen3.6 requires special care. Megatron-Core supports the targeted
gdn_norm_out recompute module, but that does not checkpoint the complete GDN
recurrence. If core_attn, gdn_norm_out, and moe_act still do not provide
enough headroom—commonly with smaller EP such as EP8—retain full recompute
rather than claiming unsupported GDN selective coverage. Larger EP, such as
EP32, can reduce expert-weight pressure enough to retry the selective policy.
Prefer HybridEP, then measure against AllToAll: HybridEP is the default
candidate when the topology supports it. Within one 8-GPU NVLink domain in
BF16, HybridEP and conventional AllToAll can be close; benchmark both with
identical work instead of assuming HybridEP must win.
Freeze the vision stack when appropriate: if the work is decoder-focused,
freezing the vision side often gives a small but real throughput gain and
reduces memory pressure.
Sweep MBS aggressively: VLMs are more MBS-sensitive than text-only MoE
runs because the vision path changes the compute-to-overhead balance.
Match CUDA-graph scope to the workload: attn moe_router moe_preprocess
is the safer MoE default, while narrower scopes can still be useful for
controlled experiments.
Use ETP only when EP alone is insufficient: it can unlock a layout, but
it also introduces more communication and more tuning surface.
Fit-First Tuning Order
Use this order so each measurement answers one question:
- Select the largest topology-compatible EP that usefully shards the experts.
- Minimize TP while retaining enough memory for non-expert weights.
- Start with full recompute if needed to obtain a stable real-data run.
- Replace full recompute with supported selective modules and remeasure memory.
- Inspect per-rank peak allocated and reserved memory in the experiment logger.
- If there is headroom, increase MBS; if TP was used for activation pressure,
lower TP and remeasure. Change one of these two controls at a time.
- Compare HybridEP with AllToAll on the same topology and precision.
- Add communication overlap and CUDA graphs only after the memory and batch
operating point is stable.
At every step, keep the dataset, sequence/image shapes, global batch, precision,
trainable parameters, and useful-work accounting fixed. A configuration that
fits is the baseline; it is not automatically the performance recipe.
Representative Config Families
FSDP-first GB200 path
TP=1 CP=1 PP=1
EP sized to the expert topology, often large
Dispatcher: HybridEP on GB200-class systems
Recompute: start with full, then relax toward selective recompute
3D-parallel GB200 path
TP=1 CP=1 PP=1 or modest PP
EP and ETP sized to the expert topology
Dispatcher: HybridEP
CUDA Graph: start narrow, then widen only after the real-data path is stable
Compatibility
| Feature |
FSDP |
3D parallel |
| HybridEP on GB200 |
strong default |
strong default once topology is stable |
| CUDA graphs |
useful after bring-up |
useful, but more scope-sensitive |
| Freeze vision |
natural fit |
possible, but less often used as the headline perf path |
| Selective recompute |
recommended |
recommended |
Pitfalls
Mock multimodal data is misleading: it can make the decoder look much
healthier than the real end-to-end VLM path.
The vision encoder can dominate unexpectedly: profile encoder, projector,
and decoder separately before attributing everything to the dispatcher.
Do not compare FSDP and 3D-parallel runs with different effective work:
normalize by useful tokens and workload shape, not only by step time.
ETP is not free: use it as a fit or topology tool, not as the default.
Recompute and CUDA-graph choices are coupled: the setting that gets the
model to fit is often not the setting that gives the best steady-state speed.
Qwen3.5 GDN recompute coverage is easy to overstate: gdn_norm_out
checkpoints the normalization/output portion, not the full GDN recurrence.
Confirm the supported module names in the pinned Megatron-Core before
replacing full recompute.
High EP does not solve every memory problem: it reduces expert-weight
pressure but does not shard the vision encoder, embeddings, dense attention,
or output head.
1---2name: nemo-mbridge-perf-moe-vlm-training3description: Practical guidance for training MoE VLMs in Megatron Bridge. Compares FSDP and 3D-parallel approaches, using rounded lessons from Qwen3-VL, Qwen3-Next, and other multimodal experiments.4license: Apache-2.05---67# MoE VLM Training89Stable docs: @docs/training/moe-optimization.md10Card: @skills/nemo-mbridge-perf-moe-vlm-training/card.yaml1112## FSDP vs 3D Parallel1314| Approach | Strength | Best fit |15|---|---|---|16| FSDP | Simplest path to a working multimodal run | first bring-up, memory-first tuning, awkward PP boundaries |17| 3D parallel | Higher ceiling after tuning | stable models with a clean PP layout and time for deeper sweeps |1819For MoE VLMs, the practical workflow is usually:20211. get the first reliable run with FSDP222. stabilize real-data input, recompute, and memory behavior233. move to 3D parallel only if the throughput headroom is worth the extra work2425## Rounded Findings From Recent VLM Runs2627### Qwen3-VL class models2829The main patterns were consistent across the tracker:3031- FSDP on GB200-class systems can already reach healthy high-teens utilization32 with a comparatively simple setup33- B200 FSDP runs are viable, but more sensitive to recompute choice and frozen34 vision settings35- 3D parallel can recover to a similar or better operating point, but only after36 tuning MBS, recompute, and the real vision path together3738### Real data vs mock data3940Mock-data VLM runs are not trustworthy performance proxies. In the experiments,41image-free mock runs looked closer to "roughly twice as fast" than "slightly42optimistic" when compared with real multimodal input.4344Use real or realistic image payloads before drawing any conclusion about VLM45throughput.4647### Smaller multimodal MoE runs4849The smaller Qwen3.5-style multimodal experiments reinforce the same lessons:5051- HybridEP is a solid default on GB20052- TE-scoped CUDA graphs help once the training loop is stable53- larger MBS can pay off, but only if the vision encoder does not become the54 next bottleneck5556## Decision Guide5758### Choose FSDP when5960- you are bringing up a new VLM for the first time61- the model has awkward stage boundaries across embedding, vision, and decoder62- memory fit matters more than absolute throughput63- you may freeze the vision stack during decoder-focused tuning6465### Choose 3D parallel when6667- the model is already stable under FSDP68- the PP layout is clear and repeatable69- you can sweep MBS, recompute, and CUDA-graph scope together70- the goal is best steady-state throughput, not easiest bring-up7172## Key Tuning Knobs73741. **Keep TP as small as memory permits**: prefer activation recompute over75 increasing TP when activations, rather than model weights, are the reason the76 run does not fit. Lower TP keeps GEMMs larger and avoids unnecessary TP77 communication. TP may still be required for dense weights, the vocabulary78 head, or a workable PP boundary; verify the actual memory limiter before79 removing it.80812. **Make EP large enough to shard expert weights effectively**: for an MoE82 model whose expert count is divisible by the rank count, start with EP8 on an83 8-GPU allocation and EP32 on a 32-GPU allocation. Treat these as starting84 points, not unconditional rules: EP does not shard dense, vision, embedding,85 or output-layer weights, and the final choice must respect PP/DP rank layout86 and the hardware topology.87883. **Prefer selective activation recompute after fit is established**: use full89 recompute to get a memory-constrained configuration running, then replace it90 with the narrowest supported selective modules. This usually recovers more91 throughput than adding TP solely for activation memory.9293 Qwen3.5/Qwen3.6 requires special care. Megatron-Core supports the targeted94 `gdn_norm_out` recompute module, but that does not checkpoint the complete GDN95 recurrence. If `core_attn`, `gdn_norm_out`, and `moe_act` still do not provide96 enough headroom—commonly with smaller EP such as EP8—retain full recompute97 rather than claiming unsupported GDN selective coverage. Larger EP, such as98 EP32, can reduce expert-weight pressure enough to retry the selective policy.991004. **Prefer HybridEP, then measure against AllToAll**: HybridEP is the default101 candidate when the topology supports it. Within one 8-GPU NVLink domain in102 BF16, HybridEP and conventional AllToAll can be close; benchmark both with103 identical work instead of assuming HybridEP must win.1041055. **Freeze the vision stack when appropriate**: if the work is decoder-focused,106 freezing the vision side often gives a small but real throughput gain and107 reduces memory pressure.1081096. **Sweep MBS aggressively**: VLMs are more MBS-sensitive than text-only MoE110 runs because the vision path changes the compute-to-overhead balance.1111127. **Match CUDA-graph scope to the workload**: `attn moe_router moe_preprocess`113 is the safer MoE default, while narrower scopes can still be useful for114 controlled experiments.1151168. **Use ETP only when EP alone is insufficient**: it can unlock a layout, but117 it also introduces more communication and more tuning surface.118119## Fit-First Tuning Order120121Use this order so each measurement answers one question:1221231. Select the largest topology-compatible EP that usefully shards the experts.1242. Minimize TP while retaining enough memory for non-expert weights.1253. Start with full recompute if needed to obtain a stable real-data run.1264. Replace full recompute with supported selective modules and remeasure memory.1275. Inspect per-rank peak allocated and reserved memory in the experiment logger.1286. If there is headroom, increase MBS; if TP was used for activation pressure,129 lower TP and remeasure. Change one of these two controls at a time.1307. Compare HybridEP with AllToAll on the same topology and precision.1318. Add communication overlap and CUDA graphs only after the memory and batch132 operating point is stable.133134At every step, keep the dataset, sequence/image shapes, global batch, precision,135trainable parameters, and useful-work accounting fixed. A configuration that136fits is the baseline; it is not automatically the performance recipe.137138## Representative Config Families139140### FSDP-first GB200 path141142```text143TP=1 CP=1 PP=1144EP sized to the expert topology, often large145Dispatcher: HybridEP on GB200-class systems146Recompute: start with full, then relax toward selective recompute147```148149### 3D-parallel GB200 path150151```text152TP=1 CP=1 PP=1 or modest PP153EP and ETP sized to the expert topology154Dispatcher: HybridEP155CUDA Graph: start narrow, then widen only after the real-data path is stable156```157158## Compatibility159160| Feature | FSDP | 3D parallel |161|---|---|---|162| HybridEP on GB200 | strong default | strong default once topology is stable |163| CUDA graphs | useful after bring-up | useful, but more scope-sensitive |164| Freeze vision | natural fit | possible, but less often used as the headline perf path |165| Selective recompute | recommended | recommended |166167## Pitfalls1681691. **Mock multimodal data is misleading**: it can make the decoder look much170 healthier than the real end-to-end VLM path.1711722. **The vision encoder can dominate unexpectedly**: profile encoder, projector,173 and decoder separately before attributing everything to the dispatcher.1741753. **Do not compare FSDP and 3D-parallel runs with different effective work**:176 normalize by useful tokens and workload shape, not only by step time.1771784. **ETP is not free**: use it as a fit or topology tool, not as the default.1791805. **Recompute and CUDA-graph choices are coupled**: the setting that gets the181 model to fit is often not the setting that gives the best steady-state speed.1821836. **Qwen3.5 GDN recompute coverage is easy to overstate**: `gdn_norm_out`184 checkpoints the normalization/output portion, not the full GDN recurrence.185 Confirm the supported module names in the pinned Megatron-Core before186 replacing full recompute.1871887. **High EP does not solve every memory problem**: it reduces expert-weight189 pressure but does not shard the vision encoder, embeddings, dense attention,190 or output head.