使用 Hugging Face Accelerate 高效训练
accelerate.Accelerator、与设备无关的训练、梯度累积和 DeepSpeed 集成。
使用 Hugging Face Accelerate 高效训练 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。
样板代码问题
手动编写 device 放置、DDP 设置和混合精度逻辑既冗长又容易出错。Hugging Face Accelerate消除了这些样板代码:同一个脚本无需修改代码,就可以在 CPU、单个 GPU、多个 GPU,甚至 TPU 上运行。
Accelerator 对象
该库的核心是 Accelerator。您可以在脚本开头创建一个实例;它会检测运行环境,并为您管理设备、分布式配置和精度。
from accelerate import Accelerator
accelerator = Accelerator()
device = accelerator.device准备对象
accelerator.prepare会接收您的模型、优化器和数据加载器,并返回针对当前配置完成适配的版本:将它们移动到正确的 device,需要时包装到 DDP 中,并在各个进程之间对数据加载器进行分片。
model, optimizer, dataloader = accelerator.prepare(
model, optimizer, dataloader
)prepare 的作用
在底层,prepare会处理原本需要您手动完成的工作:device 转移、DDP 包装、分布式采样以及接入混合精度。一行调用即可替代数十行代码。
不再手动调用 .to(device)
由于经过准备的数据加载器会生成已经位于正确 device 上的批次,因此您可以删除手动调用 x.to(device) 的代码。同一个循环可以在任何环境中运行。
for batch in dataloader:
inputs, labels = batch # already on device
outputs = model(inputs)
loss = loss_fn(outputs, labels)accelerator.backward
不要调用 loss.backward(),而应调用 accelerator.backward(loss)。这样会自动采用适用于分布式和混合精度训练的正确路径(包括梯度缩放)。
optimizer.zero_grad()
accelerator.backward(loss)
optimizer.step()完整训练循环
完整的 Accelerate 循环非常简洁,而且不依赖具体设备。
accelerator = Accelerator()
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
for epoch in range(epochs):
for batch in dataloader:
inputs, labels = batch
outputs = model(inputs)
loss = loss_fn(outputs, labels)
optimizer.zero_grad()
accelerator.backward(loss)
optimizer.step()通过配置启用混合精度
您无需修改代码,只需在创建 Accelerator 时设置 FP16/BF16,或通过 CLI 配置设置即可启用它们。随后,Accelerate 会为您管理 autocast 和梯度缩放。
accelerator = Accelerator(mixed_precision="fp16")使用 unwrap_model 保存
执行 prepare 后,模型可能会被包装到 DDP 中。保存之前,请调用 accelerator.unwrap_model(model) 获取底层的普通模型,使检查点保持干净且便于移植。
unwrapped = accelerator.unwrap_model(model)
accelerator.save(unwrapped.state_dict(), "model.pt")跨设备启动
您可以使用 accelerate launch 命令运行同一个脚本。该命令会读取您的配置(进程数、机器数和精度),然后启动进程,同时透明地处理单 GPU、多 GPU 和多节点场景。
accelerate config # one-time interactive setup
accelerate launch train.py为什么使用 Accelerate
Accelerate 为您提供透明的多设备处理:只需编写一个简洁的循环,就能从笔记本电脑的 CPU 扩展到多节点 GPU 集群,而无需重写代码。它基于您已经学过的 DDP 和 AMP 概念,只是隐藏了底层连接工作。
快速检查
测试您对 Accelerate 的掌握程度。
回顾
您学习了如何使用 Hugging Face Accelerate 进行高效训练:
Accelerator()会检测并管理环境acc.prepare(model, optimizer, dataloader)会为当前设备连接并配置所有组件acc.backward(loss)会处理分布式反向传播和混合精度反向传播acc.unwrap_model会提供一个可直接保存的模型- 一个脚本即可透明地从 CPU 扩展到多节点 GPU
常见问题解答
「使用 Hugging Face Accelerate 高效训练」课时是免费的吗?
是的 — 「使用 Hugging Face Accelerate 高效训练」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「使用 Hugging Face Accelerate 高效训练」这节课中我会学到什么?
accelerate.Accelerator、与设备无关的训练、梯度累积和 DeepSpeed 集成。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn AI with Python 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「使用 Hugging Face Accelerate 高效训练」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn AI with Python 课中编写并运行代码吗?
能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 DataParallel 进行多 GPU 训练
- DistributedDataParallel(DDP)
- 使用 AMP 进行混合精度训练
- 使用 Hugging Face Accelerate 高效训练