Skip to main content Accueil Créateurs dabit3 sonic-agent huggingface-accelerate
huggingface-accelerate Simplest distributed training API. 4 lines to add distributed support to any PyTorch script. Unified API for DeepSpeed/FSDP/Megatron/DDP. Automatic device placement, mixed precision (FP16/BF16/FP8). Interactive config, single launch command. HuggingFace ecosystem standard.
Aller à l'installation Skills Marketplace Découvrez et explorez les compétences IA créées par la communauté.
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Copier le promptAfficher les détails du prompt Une commande directe contourne le prompt de vérification. Examinez la source avant de l'exécuter.
npx skills add https://github.com/dabit3/sonic-agent --skill huggingface-accelerateLa commande reste sur une seule ligne. Faites défiler horizontalement pour la vérifier avant de la copier.
Vous préférez une copie locale ? Téléchargez les fichiers actuellement disponibles dans SkillsMP.
Télécharger Zip Téléchargement... Métiers associés SOC
Basé sur la classification professionnelle SOC
Explorateur de fichiers
4 fichiers name huggingface-accelerate description Simplest distributed training API. 4 lines to add distributed support to any PyTorch script. Unified API for DeepSpeed/FSDP/Megatron/DDP. Automatic device placement, mixed precision (FP16/BF16/FP8). Interactive config, single launch command. HuggingFace ecosystem standard. version 1.0.0 author Orchestra Research license MIT dependencies ["accelerate","torch","transformers"] platforms ["linux","macos","windows"] metadata {"sonic":{"tags":["Distributed Training","HuggingFace","Accelerate","DeepSpeed","FSDP","Mixed Precision","PyTorch","DDP","Unified API","Simple"]}}
HuggingFace Accelerate - Unified Distributed Training
Quick start
Accelerate simplifies distributed training to 4 lines of code.
Installation :
pip install accelerate
Convert PyTorch script (4 lines):
import torch
+ from accelerate import Accelerator
+ accelerator = Accelerator()
model = torch.nn.Transformer()
optimizer = torch.optim.Adam(model.parameters())
dataloader = torch.utils.data.DataLoader(dataset)
+ model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
for batch in dataloader:
optimizer.zero_grad()
loss = model(batch)
- loss.backward()
+ accelerator.backward(loss)
optimizer.step()
Run (single command):
accelerate launch train.py
Common workflows
Workflow 1: From single GPU to multi-GPU
Original script :
import torch
model = torch.nn.Linear(10 , 2 ).to('cuda' )
optimizer = torch.optim.Adam(model.parameters())
dataloader = torch.utils.data.DataLoader(dataset, batch_size=32 )
for epoch in range (10 ):
for batch in dataloader:
batch = batch.to('cuda' )
optimizer.zero_grad()
loss = model(batch).mean()
loss.backward()
optimizer.step()
With Accelerate (4 lines added):
import torch
from accelerate import Accelerator
accelerator = Accelerator()
model = torch.nn.Linear(10 , 2 )
optimizer = torch.optim.Adam(model.parameters())
dataloader = torch.utils.data.DataLoader(dataset, batch_size= )
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
epoch ( ):
batch dataloader:
optimizer.zero_grad()
loss = model(batch).mean()
accelerator.backward(loss)
optimizer.step()
32
for
in
range
10
for
in
Which machine? (single/multi GPU/TPU/CPU)
How many machines? (1)
Mixed precision? (no/fp16/bf16/fp8)
DeepSpeed? (no/yes)
Launch (works on any setup):
accelerate launch train.py
accelerate launch --multi_gpu --num_processes 8 train.py
accelerate launch --multi_gpu --num_processes 16 \
--num_machines 2 --machine_rank 0 \
--main_process_ip $MASTER_ADDR \
train.py
Workflow 2: Mixed precision training from accelerate import Accelerator
accelerator = Accelerator(mixed_precision='fp16' )
accelerator = Accelerator(mixed_precision='bf16' )
accelerator = Accelerator(mixed_precision='fp8' )
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
for batch in dataloader:
with accelerator.autocast():
loss = model(batch)
accelerator.backward(loss)
Workflow 3: DeepSpeed ZeRO integration from accelerate import Accelerator
accelerator = Accelerator(
mixed_precision='bf16' ,
deepspeed_plugin={
"zero_stage" : 2 ,
"offload_optimizer" : False ,
"gradient_accumulation_steps" : 4
}
)
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
{
"fp16" : { "enabled" : false } ,
"bf16" : { "enabled" : true } ,
"zero_optimization" : {
"stage" : 2 ,
"offload_optimizer" : { "device" : "cpu" } ,
"allgather_bucket_size" : 5e8 ,
"reduce_bucket_size" : 5e8
}
}
accelerate launch --config_file deepspeed_config.json train.py
Workflow 4: FSDP (Fully Sharded Data Parallel) from accelerate import Accelerator, FullyShardedDataParallelPlugin
fsdp_plugin = FullyShardedDataParallelPlugin(
sharding_strategy="FULL_SHARD" ,
auto_wrap_policy="TRANSFORMER_AUTO_WRAP" ,
cpu_offload=False
)
accelerator = Accelerator(
mixed_precision='bf16' ,
fsdp_plugin=fsdp_plugin
)
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
Workflow 5: Gradient accumulation from accelerate import Accelerator
accelerator = Accelerator(gradient_accumulation_steps=4 )
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
for batch in dataloader:
with accelerator.accumulate(model):
optimizer.zero_grad()
loss = model(batch)
accelerator.backward(loss)
optimizer.step()
Effective batch size : batch_size * num_gpus * gradient_accumulation_steps
When to use vs alternatives
Want simplest distributed training
Need single script for any hardware
Use HuggingFace ecosystem
Want flexibility (DDP/DeepSpeed/FSDP/Megatron)
Need quick prototyping
4 lines : Minimal code changes
Unified API : Same code for DDP, DeepSpeed, FSDP, Megatron
Automatic : Device placement, mixed precision, sharding
Interactive config : No manual launcher setup
Single launch : Works everywhere
Use alternatives instead :
PyTorch Sonic : Need callbacks, high-level abstractions
Ray Train : Multi-node orchestration, hyperparameter tuning
DeepSpeed : Direct API control, advanced features
Raw DDP : Maximum control, minimal abstraction
Common issues Issue: Wrong device placement
Don't manually move to device:
Issue: Gradient accumulation not working
with accelerator.accumulate(model):
optimizer.zero_grad()
accelerator.backward(loss)
optimizer.step()
Issue: Checkpointing in distributed
if accelerator.is_main_process:
accelerator.save_state('checkpoint/' )
accelerator.load_state('checkpoint/' )
Issue: Different results with FSDP
from accelerate.utils import set_seed
set_seed(42 )
Advanced topics
Hardware requirements
CPU : Works (slow)
Single GPU : Works
Multi-GPU : DDP (default), DeepSpeed, or FSDP
Multi-node : DDP, DeepSpeed, FSDP, Megatron
TPU : Supported
Apple MPS : Supported
DDP : torch.distributed.run (built-in)
DeepSpeed : deepspeed (pip install deepspeed)
FSDP : PyTorch 1.12+ (built-in)
Megatron : Custom setup
Resources