【Hugging Face】accelerate 库的常用方法和属性

Hugging Face accelerate 的常用方法和属性

accelerate 是 Hugging Face 提供的 分布式训练库,用于 加速 PyTorch 训练、自动优化多 GPU、TPU、混合精度训练,简化 数据并行、模型并行 的设置,适用于 大规模 NLP 和深度学习任务


1. Accelerator 的常见属性

Accelerator 初始化后,可以访问以下常见属性:

from accelerate import Accelerator

accelerator = Accelerator()
属性作用示例
accelerator.device当前设备(CPU/GPU/TPU)print(accelerator.device)
accelerator.state训练状态(设备数、精度等)print(accelerator.state)
accelerator.num_processes进程数(GPU 数量)print(accelerator.num_processes)
accelerator.local_process_index本地进程索引print(accelerator.local_process_index)
accelerator.global_process_index全局进程索引print(accelerator.global_process_index)
accelerator.gradient_accumulation_steps梯度累积步数print(accelerator.gradient_accumulation_steps)
accelerator.mixed_precision是否启用混合精度(fp16/bf16)print(accelerator.mixed_precision)

2. Accelerator 的常用方法

方法作用
accelerator.prepare(model, optimizer, dataloader)自动分布式并行训练
accelerator.prepare_data_loader(dataloader)加速数据加载
accelerator.backward(loss)自动梯度计算(适配混合精度)
accelerator.clip_grad_norm_(model.parameters(), max_norm)梯度裁剪
accelerator.save(model, path)保存分布式训练模型
accelerator.load(model, path)加载分布式训练模型
accelerator.free_memory()释放 GPU 内存
accelerator.wait_for_everyone()同步所有进程
accelerator.print(msg)在 rank=0 进程打印消息(避免重复打印)

3. Accelerator 详细用法

3.1. 初始化 Accelerator

from accelerate import Accelerator

# 自动检测设备(支持多 GPU/TPU)
accelerator = Accelerator()

print(f"Using device: {accelerator.device}")

3.2. 训练模型

import torch
from transformers import AutoModelForSequenceClassification, AdamW
from torch.utils.data import DataLoader, TensorDataset

# 初始化模型
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)

# 创建数据集
dataset = TensorDataset(torch.randint(0, 30522, (100, 128)), torch.randint(0, 2, (100,)))
dataloader = DataLoader(dataset, batch_size=16, shuffle=True)

# 定义优化器
optimizer = AdamW(model.parameters(), lr=5e-5)

# 初始化 `Accelerator`
accelerator = Accelerator()

# **使用 `prepare` 自动并行化**
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)

# 训练循环
for epoch in range(3):
    for batch in dataloader:
        inputs, labels = batch
        outputs = model(inputs, labels=labels)
        loss = outputs.loss

        # **自动处理混合精度**
        accelerator.backward(loss)

        optimizer.step()
        optimizer.zero_grad()

    accelerator.print(f"Epoch {epoch+1} completed.")

多 GPU 训练时,prepare() 自动管理设备分配,无需手动调用 .to(device)


3.3. 评估模型

model.eval()

for batch in dataloader:
    inputs, labels = batch
    with torch.no_grad():
        outputs = model(inputs)
    
    predictions = torch.argmax(outputs.logits, dim=-1)

accelerate 中,无需手动管理 GPU/CPU,代码可在 单 GPU、多 GPU 或 TPU 之间无缝切换


3.4. 训练时梯度累积

accelerator = Accelerator(gradient_accumulation_steps=4)

如果显存不足,可以使用梯度累积 gradient_accumulation_steps 减少显存占用


3.5. 保存和加载模型

保存
accelerator.save(model.state_dict(), "model.pth")
加载
model.load_state_dict(torch.load("model.pth", map_location=accelerator.device))

3.6. 释放 GPU 内存

accelerator.free_memory()

3.7. 在 Trainer 中使用 Accelerator

如果使用 Trainer,可以启用 accelerate

from transformers import TrainingArguments, Trainer

training_args = TrainingArguments(
    output_dir="./results",
    per_device_train_batch_size=8,
    per_device_eval_batch_size=8,
    evaluation_strategy="epoch",
    fp16=True,  # **启用混合精度**
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset,
)
trainer.train()

4. Accelerator 适用于哪些任务?

任务适用
文本分类(BERT, RoBERTa)
机器翻译(T5, MarianMT)
文本生成(GPT-2, LLaMA)
问答(BERT, T5)
计算机视觉(ViT, Swin Transformer)

5. accelerate vs DataParallel vs DistributedDataParallel

方法适用情况代码修改混合精度支持适用于多 GPU
accelerate自动管理设备无需修改
DataParallel仅适用于 单机多 GPU需要 .to(device)
DistributedDataParallel适用于 分布式训练需要 torch.distributed

如果你希望 无缝支持多 GPU/TPU、自动管理显存和混合精度训练,推荐 accelerate


6. 总结

accelerate 提供 分布式训练、自动混合精度、多 GPU/TPU 支持,适用于 文本分类、机器翻译、文本生成等任务

常见方法:

  • accelerator.prepare(model, optimizer, dataloader) 自动处理设备分配
  • accelerator.backward(loss) 自动管理梯度计算
  • accelerator.save(model, path) 保存模型
  • accelerator.free_memory() 释放显存
  • accelerator.print(msg) 避免多 GPU 重复打印

如果你的 模型大、显存不足、需要多 GPU 训练,推荐使用 accelerate

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值