SKILL.md
SKILL.mdBrowse 4 files
2,275 tokens
9,175 bytes
Token encoding: o200k_base
Snapshot 24fd22b
1---2name: accelerate3description: Run PyTorch training across GPUs with minimal changes.4version: 1.0.15author: Orchestra Research6license: MIT7dependencies: [accelerate, torch, transformers]8platforms: [linux, macos, windows]9metadata:10 hermes:11 tags: [Distributed Training, HuggingFace, Accelerate, DeepSpeed, FSDP, Mixed Precision, PyTorch, DDP, Unified API, Simple]12 13---14 15# HuggingFace Accelerate - Unified Distributed Training16 17## Quick start18 19Accelerate simplifies distributed training to 4 lines of code.20 21**Installation**:22```bash23pip install accelerate24```25 26**Convert PyTorch script** (4 lines):27```python28import torch29+ from accelerate import Accelerator30 31+ accelerator = Accelerator()32 33 model = torch.nn.Transformer()34 optimizer = torch.optim.Adam(model.parameters())35 dataloader = torch.utils.data.DataLoader(dataset)36 37+ model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)38 39 for batch in dataloader:40 optimizer.zero_grad()41 loss = model(batch)42- loss.backward()43+ accelerator.backward(loss)44 optimizer.step()45```46 47**Run** (single command):48```bash49accelerate launch train.py50```51 52## Common workflows53 54### Workflow 1: From single GPU to multi-GPU55 56**Original script**:57```python58# train.py59import torch60 61model = torch.nn.Linear(10, 2).to('cuda')62optimizer = torch.optim.Adam(model.parameters())63dataloader = torch.utils.data.DataLoader(dataset, batch_size=32)64 65for epoch in range(10):66 for batch in dataloader:67 batch = batch.to('cuda')68 optimizer.zero_grad()69 loss = model(batch).mean()70 loss.backward()71 optimizer.step()72```73 74**With Accelerate** (4 lines added):75```python76# train.py77import torch78from accelerate import Accelerator # +179 80accelerator = Accelerator() # +281 82model = torch.nn.Linear(10, 2)83optimizer = torch.optim.Adam(model.parameters())84dataloader = torch.utils.data.DataLoader(dataset, batch_size=32)85 86model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader) # +387 88for epoch in range(10):89 for batch in dataloader:90 # No .to('cuda') needed - automatic!91 optimizer.zero_grad()92 loss = model(batch).mean()93 accelerator.backward(loss) # +494 optimizer.step()95```96 97**Configure** (interactive):98```bash99accelerate config100```101 102**Questions**:103- Which machine? (single/multi GPU/TPU/CPU)104- How many machines? (1)105- Mixed precision? (no/fp16/bf16/fp8)106- DeepSpeed? (no/yes)107 108**Launch** (works on any setup):109```bash110# Single GPU111accelerate launch train.py112 113# Multi-GPU (8 GPUs)114accelerate launch --multi_gpu --num_processes 8 train.py115 116# Multi-node117accelerate launch --multi_gpu --num_processes 16 \118 --num_machines 2 --machine_rank 0 \119 --main_process_ip $MASTER_ADDR \120 train.py121```122 123### Workflow 2: Mixed precision training124 125**Enable FP16/BF16**:126```python127from accelerate import Accelerator128 129# FP16 (with gradient scaling)130accelerator = Accelerator(mixed_precision='fp16')131 132# BF16 (no scaling, more stable)133accelerator = Accelerator(mixed_precision='bf16')134 135# FP8 (H100+)136accelerator = Accelerator(mixed_precision='fp8')137 138model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)139 140# Everything else is automatic!141for batch in dataloader:142 with accelerator.autocast(): # Optional, done automatically143 loss = model(batch)144 accelerator.backward(loss)145```146 147### Workflow 3: DeepSpeed ZeRO integration148 149**Enable DeepSpeed ZeRO-2** (pass a `DeepSpeedPlugin`, not a raw dict):150```python151from accelerate import Accelerator, DeepSpeedPlugin152 153deepspeed_plugin = DeepSpeedPlugin(154 zero_stage=2, # ZeRO-2155 offload_optimizer_device="none", # or "cpu" to offload156 gradient_accumulation_steps=4,157)158 159accelerator = Accelerator(160 mixed_precision='bf16',161 deepspeed_plugin=deepspeed_plugin, # DeepSpeedPlugin instance (or dict[str, DeepSpeedPlugin])162)163 164# Same code as before!165model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)166```167 168**Or point at a full DeepSpeed JSON config via the plugin**:169```python170from accelerate import Accelerator, DeepSpeedPlugin171 172# hf_ds_config accepts a path to a DeepSpeed config JSON (or a dict)173deepspeed_plugin = DeepSpeedPlugin(hf_ds_config="ds_config.json")174accelerator = Accelerator(mixed_precision='bf16', deepspeed_plugin=deepspeed_plugin)175```176 177**ds_config.json** (a raw DeepSpeed config — passed via the plugin, NOT via `--config_file`):178```json179{180 "fp16": {"enabled": false},181 "bf16": {"enabled": true},182 "zero_optimization": {183 "stage": 2,184 "offload_optimizer": {"device": "cpu"},185 "allgather_bucket_size": 5e8,186 "reduce_bucket_size": 5e8187 }188}189```190 191**Or via interactive config**:192```bash193accelerate config194# Select: DeepSpeed → ZeRO-2195# This writes an accelerate YAML config (default: ~/.cache/huggingface/accelerate/default_config.yaml)196```197 198**Launch** (`--config_file` expects an accelerate YAML, not a raw DeepSpeed JSON):199```bash200# Uses the default accelerate config written by `accelerate config`201accelerate launch train.py202 203# Or point at a specific accelerate YAML204accelerate launch --config_file accelerate_deepspeed.yaml train.py205```206 207### Workflow 4: FSDP (Fully Sharded Data Parallel)208 209**Enable FSDP**:210```python211from accelerate import Accelerator, FullyShardedDataParallelPlugin212 213fsdp_plugin = FullyShardedDataParallelPlugin(214 sharding_strategy="FULL_SHARD", # ZeRO-3 equivalent215 auto_wrap_policy="transformer_based_wrap", # valid: transformer_based_wrap | size_based_wrap | no_wrap216 cpu_offload=False217)218 219accelerator = Accelerator(220 mixed_precision='bf16',221 fsdp_plugin=fsdp_plugin222)223 224model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)225```226 227**Or via config**:228```bash229accelerate config230# Select: FSDP → Full Shard → No CPU Offload231```232 233### Workflow 5: Gradient accumulation234 235**Accumulate gradients**:236```python237from accelerate import Accelerator238 239accelerator = Accelerator(gradient_accumulation_steps=4)240 241model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)242 243for batch in dataloader:244 with accelerator.accumulate(model): # Handles accumulation245 optimizer.zero_grad()246 loss = model(batch)247 accelerator.backward(loss)248 optimizer.step()249```250 251**Effective batch size**: `batch_size * num_gpus * gradient_accumulation_steps`252 253## When to use vs alternatives254 255**Use Accelerate when**:256- Want simplest distributed training257- Need single script for any hardware258- Use HuggingFace ecosystem259- Want flexibility (DDP/DeepSpeed/FSDP/Megatron)260- Need quick prototyping261 262**Key advantages**:263- **4 lines**: Minimal code changes264- **Unified API**: Same code for DDP, DeepSpeed, FSDP, Megatron265- **Automatic**: Device placement, mixed precision, sharding266- **Interactive config**: No manual launcher setup267- **Single launch**: Works everywhere268 269**Use alternatives instead**:270- **PyTorch Lightning**: Need callbacks, high-level abstractions271- **Ray Train**: Multi-node orchestration, hyperparameter tuning272- **DeepSpeed**: Direct API control, advanced features273- **Raw DDP**: Maximum control, minimal abstraction274 275## Common issues276 277**Issue: Wrong device placement**278 279Don't manually move to device:280```python281# WRONG282batch = batch.to('cuda')283 284# CORRECT285# Accelerate handles it automatically after prepare()286```287 288**Issue: Gradient accumulation not working**289 290Use context manager:291```python292# CORRECT293with accelerator.accumulate(model):294 optimizer.zero_grad()295 accelerator.backward(loss)296 optimizer.step()297```298 299**Issue: Checkpointing in distributed**300 301Use accelerator methods:302```python303# Save only on main process304if accelerator.is_main_process:305 accelerator.save_state('checkpoint/')306 307# Load on all processes308accelerator.load_state('checkpoint/')309```310 311**Issue: Different results with FSDP**312 313Ensure same random seed:314```python315from accelerate.utils import set_seed316set_seed(42)317```318 319## Advanced topics320 321**Megatron integration**: See [references/megatron-integration.md](references/megatron-integration.md) for tensor parallelism, pipeline parallelism, and sequence parallelism setup.322 323**Custom plugins**: See [references/custom-plugins.md](references/custom-plugins.md) for creating custom distributed plugins and advanced configuration.324 325**Performance tuning**: See [references/performance.md](references/performance.md) for profiling, memory optimization, and best practices.326 327## Hardware requirements328 329- **CPU**: Works (slow)330- **Single GPU**: Works331- **Multi-GPU**: DDP (default), DeepSpeed, or FSDP332- **Multi-node**: DDP, DeepSpeed, FSDP, Megatron333- **TPU**: Supported334- **Apple MPS**: Supported335 336**Launcher requirements**:337- **DDP**: `torch.distributed.run` (built-in)338- **DeepSpeed**: `deepspeed` (pip install deepspeed)339- **FSDP**: PyTorch 1.12+ (built-in)340- **Megatron**: Custom setup341 342## Resources343 344- Docs: https://huggingface.co/docs/accelerate345- GitHub: https://github.com/huggingface/accelerate346- Version: 1.11.0+347- Tutorial: "Accelerate your scripts"348- Examples: https://github.com/huggingface/accelerate/tree/main/examples349- Used by: HuggingFace Transformers, TRL, PEFT, all HF libraries350 351 352 353 Discovery context
Discovered by repository scan. No exact path reference found in the snapshot’s root AGENTS.md.