NeMo
Megatron-LM / docs /user-guide /parallelism-guide.md
KexuanShi's picture
Upload folder using huggingface_hub
88e6849 verified
|
Raw
History Blame Contribute Delete
6.58 kB

Parallelism Strategies Guide

Megatron Core supports multiple parallelism strategies that can be combined to efficiently train models from billions to trillions of parameters across thousands of GPUs.

Overview

Strategy What it parallelizes Best for
Data Parallelism (DP) Batch dimension Standard training, most common
Tensor Parallelism (TP) Individual layers Large layers, GPU memory constraints
Pipeline Parallelism (PP) Model depth Very deep models
Context Parallelism (CP) Sequence length Long sequences (8K+ tokens)
Expert Parallelism (EP) MoE experts Mixture-of-Experts models

Data Parallelism (DP)

Replicate the model across GPUs and split the batch.

Standard Data Parallel (DDP)

torchrun --nproc_per_node=8 pretrain_gpt.py \
    --data-parallel-sharding-strategy no_shard

Each GPU has a full copy of the model and processes a portion of the batch.

Fully Sharded Data Parallel (FSDP)

Shard model parameters, gradients, and optimizer states to reduce memory:

# Megatron FSDP (~15% faster than PyTorch FSDP2)
--use-megatron-fsdp \
--data-parallel-sharding-strategy optim_grads_params

Sharding strategies:

  • optim - Shard optimizer states only (ZeRO-1)
  • optim_grads - Shard gradients + optimizer (ZeRO-2)
  • optim_grads_params - Shard parameters + gradients + optimizer (ZeRO-3)

Tensor Parallelism (TP)

Split individual model layers across GPUs. Recommended for large hidden dimensions.

--tensor-model-parallel-size 4  # 4-way tensor parallelism
--sequence-parallel              # Enable sequence parallelism (recommended)

When to use:

  • Model layers don't fit on single GPU
  • Large hidden dimensions (4096+)
  • Usually combined with DP and PP

Pipeline Parallelism (PP)

Split model layers across GPUs vertically (by depth).

--pipeline-model-parallel-size 8              # 8 pipeline stages
--num-layers-per-virtual-pipeline-stage 4     # Virtual pipeline for load balancing

When to use:

  • Very deep models (50+ layers)
  • Combine with TP for large models
  • Helps distribute memory across GPUs

Context Parallelism (CP)

Split long sequences across GPUs for efficient long-context training.

--context-parallel-size 2           # 2-way context parallelism
--cp-comm-type p2p                  # Communication type

When to use:

  • Long sequences (8K+ tokens)
  • Reduces activation memory
  • Can combine with TP, PP, DP

Context Parallelism Deep Dive - Detailed guide with performance analysis

Expert Parallelism (EP)

Distribute experts across GPUs in Mixture-of-Experts models.

--expert-model-parallel-size 8  # 8-way expert parallelism
--num-experts 64                # 64 experts per MoE layer
--moe-grouped-gemm              # Optimize expert computation

Important: When combining EP with TP, you must enable Sequence Parallelism:

--tensor-model-parallel-size 4
--expert-model-parallel-size 8
--sequence-parallel  # Required when using TP + EP

Parallelism Selection Guide

Recommended configurations based on NVIDIA NeMo production setups:

Language Models

Model Size GPUs TP PP CP EP Configuration Notes
LLaMA-3 8B 8 1 1 2 1 CP=2 for long context (8K seqlen)
LLaMA-3 70B 64 4 4 2 1 Balanced TP+PP for 70B scale
LLaMA-3.1 405B 1024 8 8 2 1 3D parallelism (TP+PP+CP)
GPT-3 175B 128-512 4 8 1 1 Standard large model config

Mixture-of-Experts Models

Model Size GPUs TP PP CP EP Configuration Notes
Mixtral 8x7B 64 1 4 1 8 EP=8 for 8 experts
Mixtral 8x22B 256 4 4 1 8 TP+PP+EP for large MoE
DeepSeek-V3 671B 1024 2 16 1 64 Massive MoE with 256 experts

Combining Strategies

Total GPU Count

The total number of GPUs is calculated as:

Total GPUs = TP × PP × CP × EP × DP

Example: LLaMA-3 70B on 64 GPUs

# TP=4, PP=4, CP=2, DP=2 => 4 × 4 × 2 × 2 = 64 GPUs
torchrun --nproc_per_node=8 pretrain_gpt.py \
    --tensor-model-parallel-size 4 \
    --pipeline-model-parallel-size 4 \
    --context-parallel-size 2 \
    --num-layers 80 \
    --hidden-size 8192 \
    --num-attention-heads 64 \
    --seq-length 8192 \
    --micro-batch-size 1 \
    --global-batch-size 512 \
    --bf16

Performance Optimizations

Communication Overlap

Enable overlapping of communication with computation:

--overlap-grad-reduce      # Overlap gradient reduction with backward pass
--overlap-param-gather     # Overlap parameter gathering with forward pass
--tp-comm-overlap          # Overlap TP communication

Distributed Optimizer

Recommended for all multi-GPU training:

--use-distributed-optimizer

Benefits:

  • Faster checkpointing
  • Reduced memory when combined with FSDP
  • Better performance at scale

Sequence Parallelism

Always enable when using TP:

--sequence-parallel

Reduces activation memory by sharding sequence dimension in LayerNorm and Dropout.

Choosing the Right Strategy

Start Simple

  1. Begin with Data Parallelism (DP) only
  2. Add Tensor Parallelism (TP) if model doesn't fit
  3. Add Pipeline Parallelism (PP) for very large models
  4. Add Context Parallelism (CP) for long sequences

Memory Constraints

  • Use FSDP to reduce memory per GPU
  • Use TP to split large layers
  • Use PP to split model depth
  • Enable activation checkpointing for extreme cases

Communication Bottlenecks

  • Reduce TP degree (increases memory per GPU)
  • Increase PP degree (may reduce efficiency)
  • Use CP instead of larger TP for long sequences

Next Steps