加速
项目描述
在任意设备上运行您的 *原始* PyTorch训练脚本
易于集成
🤗 Accelerate是为PyTorch用户创建的,他们喜欢编写PyTorch模型的训练循环,但不愿编写和维护使用多GPU/TPU/fp16所需的基础代码。
🤗 Accelerate精确且仅抽象与多GPU/TPU/fp16相关的基础代码,其余代码保持不变。
以下是一个示例
import torch
import torch.nn.functional as F
from datasets import load_dataset
+ from accelerate import Accelerator
+ accelerator = Accelerator()
- device = 'cpu'
+ device = accelerator.device
model = torch.nn.Transformer().to(device)
optimizer = torch.optim.Adam(model.parameters())
dataset = load_dataset('my_dataset')
data = torch.utils.data.DataLoader(dataset, shuffle=True)
+ model, optimizer, data = accelerator.prepare(model, optimizer, data)
model.train()
for epoch in range(10):
for source, targets in data:
source = source.to(device)
targets = targets.to(device)
optimizer.zero_grad()
output = model(source)
loss = F.cross_entropy(output, targets)
- loss.backward()
+ accelerator.backward(loss)
optimizer.step()
正如您在这个示例中所见,通过向任何标准的PyTorch训练脚本中添加5行代码,您现在可以在任何类型的单节点或分布式节点设置(单CPU、单GPU、多GPU和TPU)上运行,以及混合精度(fp8、fp16、bf16)或不使用混合精度。
特别是,相同的代码可以不经修改地在您的本地机器上运行,用于调试或训练环境。
🤗 Accelerate还可以为您处理设备放置(这需要对您的代码进行一些修改,但通常更安全),因此您甚至可以进一步简化训练循环。
import torch
import torch.nn.functional as F
from datasets import load_dataset
+ from accelerate import Accelerator
- device = 'cpu'
+ accelerator = Accelerator()
- model = torch.nn.Transformer().to(device)
+ model = torch.nn.Transformer()
optimizer = torch.optim.Adam(model.parameters())
dataset = load_dataset('my_dataset')
data = torch.utils.data.DataLoader(dataset, shuffle=True)
+ model, optimizer, data = accelerator.prepare(model, optimizer, data)
model.train()
for epoch in range(10):
for source, targets in data:
- source = source.to(device)
- targets = targets.to(device)
optimizer.zero_grad()
output = model(source)
loss = F.cross_entropy(output, targets)
- loss.backward()
+ accelerator.backward(loss)
optimizer.step()
启动脚本
🤗 Accelerate还提供了一个可选的CLI工具,允许您在启动脚本之前快速配置和测试您的训练环境。无需记住如何使用torch.distributed.run
或编写TPU训练的特定启动器!在您的机器上只需运行
accelerate config
并回答提出的问题。这将生成一个配置文件,在执行时将自动使用以正确设置默认选项。
accelerate launch my_script.py --args_to_my_script
例如,以下是如何在MRPC任务上运行GLUE示例(从存储库的根目录)
accelerate launch examples/nlp_example.py
此CLI工具是可选的,您仍然可以根据需要使用python my_script.py
或python -m torchrun my_script.py
。
如果您不想运行accelerate config
,也可以直接将传递给torchrun
的参数作为accelerate launch
的参数传递。
例如,以下是在两个GPU上启动的方法
accelerate launch --multi_gpu --num_processes 2 examples/nlp_example.py
想了解更多,请查看此处可用的CLI文档这里。
或查看配置动物园这里
使用MPI启动多CPU运行
🤗 这是另一种使用MPI启动多CPU运行的方法。您可以在此页上了解如何安装Open MPI。您也可以使用Intel MPI或MVAPICH。一旦您在集群上设置了MPI,只需运行
accelerate config
回答提出的问题,选择使用多CPU运行,当询问是否要让accelerate启动mpirun时回答“是”。然后,像这样使用accelerate launch
和您的脚本
accelerate launch examples/nlp_example.py
或者,您可以直接使用mpirun,而不使用CLI,像这样
mpirun -np 2 python examples/nlp_example.py
使用DeepSpeed启动训练
🤗 Accelerate支持使用DeepSpeed在单个/多个GPU上进行训练。要使用它,您不需要更改您的训练代码;您只需使用accelerate config
设置一切即可。但是,如果您希望从Python脚本中调整DeepSpeed相关参数,我们提供您DeepSpeedPlugin
。
from accelerate import Accelerator, DeepSpeedPlugin
# deepspeed needs to know your gradient accumulation steps beforehand, so don't forget to pass it
# Remember you still need to do gradient accumulation by yourself, just like you would have done without deepspeed
deepspeed_plugin = DeepSpeedPlugin(zero_stage=2, gradient_accumulation_steps=2)
accelerator = Accelerator(mixed_precision='fp16', deepspeed_plugin=deepspeed_plugin)
# How to save your 🤗 Transformer?
accelerator.wait_for_everyone()
unwrapped_model = accelerator.unwrap_model(model)
unwrapped_model.save_pretrained(save_dir, save_function=accelerator.save, state_dict=accelerator.get_state_dict(model))
注意:DeepSpeed支持目前为实验性。如果您遇到问题,请提交问题。
从笔记本启动训练
🤗 Accelerate还提供了一个可以在笔记本中使用的notebook_launcher
函数,用于启动分布式训练。这对于具有TPU后端的Colab或Kaggle笔记本特别有用。只需在training_function
中定义您的训练循环,然后在您的最后一个单元中添加
from accelerate import notebook_launcher
notebook_launcher(training_function)
示例可以在这个笔记本中找到。
为什么我应该使用🤗 Accelerate?
当您想在分布式环境中轻松运行训练脚本而无需放弃对训练循环的完全控制时,应使用🤗 Accelerate。这不是一个高于PyTorch的高级框架,而是一个轻量级的包装,这样您就不需要学习一个新的库。实际上,🤗 Accelerate的整个API都包含在一个类中,即Accelerator
对象。
为什么我不应该使用🤗 Accelerate?
如果您不想自己编写训练循环,则不应使用🤗 Accelerate。PyTorch之上有很多高级库会提供这个功能,🤗 Accelerate不是其中之一。
使用🤗 Accelerate的框架
如果您喜欢🤗 Accelerate的简洁性,但希望对其功能有更高的抽象层次,以下是一些基于🤗 Accelerate构建的框架和库:
- Amphion是一个音频、音乐和语音生成的工具包。它的目的是支持可重复的研究,并帮助初级研究人员和工程师在音频、音乐和语音生成研究和发展领域入门。
- Animus是一个用于运行机器学习实验的简约框架。Animus突出ML实验中的常见“断点”,并在IExperiment中提供统一的接口。
- Catalyst是一个用于深度学习和研发的PyTorch框架。它侧重于可重复性、快速实验和代码库重用,以便您能够创建一些新的东西,而不是编写另一个训练循环。Catalyst提供了一个Runner,用于连接实验的所有部分:硬件后端、数据转换、模型训练和推理逻辑。
- fastai是一个简化了使用现代最佳实践训练快速且准确神经网络的PyTorch框架。fastai提供了一个Learner,用于处理深度学习算法的训练、微调和推理。
- Finetuner是一个服务,它使模型能够为语义搜索、视觉相似性搜索、跨模态文本与图像搜索、推荐系统、聚类、重复检测、异常检测或其他用途创建更高质量的嵌入。
- InvokeAI是一个用于Stable Diffusion模型的创意引擎,提供行业领先的WebUI、终端使用支持,并作为许多商业产品的基石。
- Kornia是一个可微分的库,它允许将经典计算机视觉集成到深度学习模型中。Kornia提供了一个Trainer,专门用于在库中训练和微调支持的深度学习算法。
- Open Assistant是一个基于聊天的助手,它理解任务,可以与其系统进行交互,并通过动态检索信息来执行这些任务。
- pytorch-accelerated是一个轻量级训练库,其功能集围绕一个通用Trainer,强调简洁和透明度;使用户能够确切了解底层发生了什么,而无需编写和维护样板代码!
- Stable Diffusion web UI是基于Gradio库的Stable Diffusion的开源浏览器界面。
- torchkeras 是一个简单的工具,可以在 keras 风格下训练 PyTorch 模型,在笔记本中提供动态美观的绘图来监控您的损失或指标。
- transformers 是一个工具,用于帮助在 PyTorch、Tensorflow 和 JAX 中训练最先进的机器学习模型。(加速是 PyTorch 侧的后端)。
安装
此仓库已在 Python 3.8+ 和 PyTorch 1.10.0+ 上进行了测试。
您应该在 虚拟环境 中安装 🤗 Accelerate。如果您不熟悉 Python 虚拟环境,请查看 用户指南。
首先,使用您将要使用的 Python 版本创建一个虚拟环境并激活它。
然后,您需要安装 PyTorch:请参考有关您平台特定安装命令的 官方安装页面。然后可以使用 pip 安装 🤗 Accelerate,如下所示
pip install accelerate
支持集成
- 仅 CPU
- 单节点上的多 CPU
- 多节点(机器)上的多 CPU
- 单 GPU
- 单节点(机器)上的多 GPU
- 多节点(机器)上的多 GPU
- TPU
- FP16/BFloat16 混合精度
- 使用 Transformer Engine 或 MS-AMP 的 FP8 混合精度
- DeepSpeed 支持(实验性)
- PyTorch 全部分片数据并行(FSDP)支持(实验性)
- Megatron-LM 支持(实验性)
引用 🤗 Accelerate
如果您在您的出版物中使用了 🤗 Accelerate,请使用以下 BibTeX 条目进行引用。
@Misc{accelerate,
title = {Accelerate: Training and inference at scale made simple, efficient and adaptable.},
author = {Sylvain Gugger and Lysandre Debut and Thomas Wolf and Philipp Schmid and Zachary Mueller and Sourab Mangrulkar and Marc Sun and Benjamin Bossan},
howpublished = {\url{https://github.com/huggingface/accelerate}},
year = {2022}
}
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建发行版
accelerate-0.34.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 98c1ebe1f5a45c0a3af02dc60b5bb8b7d58d60c3326a326a06ce6d956b18ca5b |
|
MD5 | 455f0365f73fb0ecc3b8cc1d98601344 |
|
BLAKE2b-256 | 4d825712c44a5a5ef7c4d375363b179a099e834491221ece02e81a1209b08233 |
accelerate-0.34.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d69159e2c4e4a473d14443b27d2d732929254e826b3ab4813b3785b5ac616c7c |
|
MD5 | efcec148248801c3ec8baf6cdf35c2b5 |
|
BLAKE2b-256 | b05e80cee674cdbe529ef008721d7eebb50ae5def4314211d82123aa23e828f8 |