Allow users to pass through `Accelerate` instance

当用户需要向 Trainer 传递一个已创建的自定义 Accelerator 实例时(核心英文报错:Allow users to pass through `Accelerate` instance), 无需修改 Trainer 源码 ,直接利用 TrainingArguments 中的 accel

快速结论:当用户需要向 Trainer 传递一个已创建的自定义 Accelerator 实例时(核心英文报错:Allow users to pass through `Accelerate` instance),无需修改 Trainer 源码,直接利用 TrainingArguments 中的 accelerator_config={"use_configured_state": True} 即可复用已有 Accelerator 状态。优先检查 Transformers 版本是否包含该字段。

适用环境:Hugging Face Transformers(版本需包含 use_configured_state 字段,该功能由 PR #29781 引入,具体版本号未在 Issue 中明确,建议使用 ≥ 4.42 的版本);Accelerate 库;无需特定 Python/CUDA 版本。

最快修复方案:在创建 TrainingArguments 时,将 accelerator_config 参数设置为 {"use_configured_state": True},并确保在此之前已初始化 Accelerator 对象。例如:

from accelerate import Accelerator
accelerator = Accelerator(...)
training_args = TrainingArguments(accelerator_config={"use_configured_state": True}, ...)
trainer = Trainer(args=training_args, ...)
trainer.train()

注意事项:TrainingArguments 中的配置(如 bf16fp32 等)必须与已有 AcceleratorState 保持一致,否则会抛出类似 AcceleratorState has already been initialized and cannot be changed 的错误。建议先配置好 Accelerator,再创建 TrainingArguments。

问题场景

用户使用 Hugging Face Transformers 的 Trainer(或 SFTTrainer)进行训练,希望传入一个预先创建并配置好的 Accelerator 实例(例如已设置了 FSDP 插件、混合精度策略等),但默认的 Trainer 会在内部重新创建 Accelerator,覆盖用户的自定义设置。

报错原文

Allow users to pass through `Accelerate` instance

(注:Issue 为功能请求,并非实际报错;但用户的实际需求可以抽象为此描述。)

原因分析

Transformers 的 Trainer 在初始化时调用 create_accelerator_and_postprocess 方法,该方法内部重新创建 Accelerator 实例,无法直接传入已有的 Accelerator 对象。社区已通过新增 use_configured_state 配置项解决了此问题:当该字段为 True 时,Trainer 会复用已有的 AcceleratorState/PartialState,而不是重新初始化。

环境排查

  • Transformers 版本:确认是否包含 use_configured_state 字段(该字段定义在 src/transformers/training_args.pysrc/transformers/trainer_pt_utils.py 中,由 PR #29781 合并)。若版本较旧,需升级。
  • Accelerate 版本:一般无需额外要求,但建议保持较新版本。
  • 其他依赖:无特殊限制。

解决步骤

  1. 确认你的 Transformers 版本支持 use_configured_state。若不支持,升级到包含该字段的版本。
  2. 根据你的需求创建 Accelerator 实例,并完成所有自定义配置(例如 FSDP 插件、混合精度、设备映射等)。
  3. 在创建 TrainingArguments 时,设置 accelerator_config={"use_configured_state": True}
  4. TrainingArguments

    参考来源

    huggingface/transformers #40616

    GamsGo AI

    AI 工具推荐

    想把多个 AI 模型放在一个入口?

    GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

    了解 GamsGo AI

    推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

    这个方案解决了吗?

celebrityanime
celebrityanime
文章: 15877

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注