-->
在三年半以前、项目发起之初时,Accelerate 的目标还只是制作一个简单框架,通过一个低层的抽象来简化多 GPU 或 TPU 训练,以此替代原生的 PyTorch 训练流程:
自此,Accelerate 开始不断扩展,逐渐成为一个有多方面能力的代码库。当前,像 Llama 这样的模型已经达到了 405B 参数的量级,而 Accelerate 也致力于应对大模型和大规模训练所面临的诸多难题。这其中的贡献包括:
device_map="auto"
: 这使得用户能够在多种不同硬件设备上进行大模型推理,同时现在可以通过诸如高效参数微调 (PEFT) 等技术以较小计算量来训练大模型。这三方面的贡献,使得 Accelerate 成为了 几乎所有 Hugging Face 代码库 的基础依赖,其中包括 transformers
、 diffusers
、 peft
、 trl
。
在 Accelerate 开发趋于稳定将近一年后的今天,我们正式发布了 Accelerate 1.0.0 —— Accelerate 的第一个发布候选版本。
本文将会详细说明以下内容:
发行这一版本的计划已经进行了一年多。Acceelerate 的 API 集中于 Accelerator 一侧,配置简单,代码扩展性强。但是,我们仍然认识到 Accelerate 还存在诸多有待完成的功能,这包括:
TransformerEngine
集成 FP8 支持 (详见 这里 和 这里)torch.compile
支持大模型推理 API (需要 torch>=2.5
)torch.distributed.pipelining
作为 替代的分布式推理机制torchdata.StatefulDataLoader
作为 替代的数据载入机制通过在 1.0 版本中作出的改动,Accelerate 已经有能力在不改变用户 API 接口的情况下不断融入新的技术能力了。
在 1.0 版本推出以后,我们将重点关注技术社区里的新技术,并寻找方法去融合进 Accelerate 中。可以预见,一些重大的改动将会不久发生在 PyTorch 生态系统中:
torchao
/FP8,很多新框架也带来了不同的理念和实现方法,来使得 FP8 训练有效且稳定 (例如 transformer_engine
、torchao
、MS-AMP
、nanotron
)。针对 Accelerate,我们的目标是把这些实现都集中到一个地方,使用简单的配置方法让用户探索和试用每一种方法,最终我们希望形成稳定灵活的代码架构。这个领域发展迅速,尤其是 NVidia 的 FP4 技术即将问世。我们希望不仅能够支持这些方法,同时也为不同方法提供可靠的基准测试,来和原生的 BF16 训练对比,以显示技术趋势。我们也对 PyTorch 社区分布式训练的发展感到期待,希望 Accelerate 紧跟步伐,为最近技术提供一个低门槛的入口。也希望社区能够继续探索实验、共同学习,让我们寻找在复杂计算系统上训练、扩展大模型的最佳方案。
如想使用 1.0 版本,需要先使用如下方法获取 Accelerate:
pip install --pre accelerate
docker pull huggingface/accelerate:gpu-release-1.0.0rc1
可用的版本标记有:
gpu-release-1.0.0rc1
cpu-release-1.0.0rc1
gpu-fp8-transformerengine-release-1.0.0rc1
gpu-deepspeed-release-1.0.0rc1
下面是关于弃用 API 的详细说明:
Accelerator()
传递 dispatch_batches
、split_batches
、even_batches
、use_seedable_sampler
参数的这种方式已经被弃用。新的方法是创建一个 accelerate.utils.DataLoaderConfiguration()
然后传给 Accelerator()
(示例: Accelerator(dataloader_config=DataLoaderConfiguration(...))
)。Accelerator().use_fp16
和 AcceleratorState().use_fp16
已被移除。新的替代方式是检查 accelerator.mixed_precision == "fp16"
。Accelerator().autocast()
不再接收 cache_enabled
参数。该参数被包含在 AutocastKwargs()
里 (示例: Accelerator(kwargs_handlers=[AutocastKwargs(cache_enabled=True)])
)。accelerate.utils.is_tpu_available
被 accelerate.utils.is_torch_xla_available
替代。accelerate.utils.modeling.shard_checkpoint
应被 huggingface_hub
里的 split_torch_state_dict_into_shards
替代。accelerate.tqdm.tqdm()
的第一个参数不再是 True
/False
,main_process_only
需要以命名参数的形式传参。ACCELERATE_DISABLE_RICH
不再是一个有效的环境变量。用户需通过设置 ACCELERATE_ENABLE_RICH=1
手动启动详细的回溯 (traceback) 信息。fsdp_backward_prefetch_policy
已被 fsdp_backward_prefetch
代替。首先感谢使用 Accelerate,看到一个小的想法转变成一个总下载量超过一亿、日均下载量接近三十万的项目还是很令人惊叹的。
通过本版发行,我们希望社区能够踊跃尝试,尽快在官方发行版出现前迁移到 1.0 版本。
请大家持续关注,及时追踪我们 GitHub 和 社交软件 上的最新信息。