You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

微调模型时遇PyTorch报错:推理张量无法保存用于反向传播

解决方案

针对你遇到的Inference tensors cannot be saved for backward错误,结合你提供的代码和尝试过的方法,给出以下具体解决步骤:

1. 强制模型进入训练模式并清理推理状态

在初始化trainer前,明确添加模型训练模式设置,覆盖可能残留的推理状态:

model.train()  # 强制切换到训练模式
model.config.use_cache = False
trainer.train()

2. 排查8bit优化器与依赖版本兼容性

你使用的paged_adamw_8bit依赖bitsandbytes库,版本不兼容是常见诱因:

  • 尝试降级或升级bitsandbytes到稳定版本,例如:
    pip install bitsandbytes==0.41.1
    
  • 临时替换为普通优化器验证流程:将optim="paged_adamw_8bit"改为optim="adamw_torch",如果训练恢复正常,说明问题出在8bit优化器与当前环境的兼容上。

3. 调整混合精度设置

fp16与8bit优化器的组合可能引发张量状态冲突:

  • 先关闭fp16测试:将fp16=True改为fp16=False,若报错消失,再尝试用bf16=True替代(需硬件支持BF16)。

4. 回退到之前可正常运行的依赖版本

由于你提到之前代码能正常运行,大概率是依赖库更新导致的问题:

  • 回退transformers到之前的稳定版本,例如:
    pip install transformers==4.29.2  # 替换为你之前使用的版本号
    
  • 同时确保PyTorch版本与transformers版本匹配。

5. 手动处理张量克隆(兜底方案)

如果以上方法无效,可按照错误提示手动克隆张量,避免推理模式张量进入反向传播:
自定义DataCollator来处理输入张量:

class CustomDataCollator(transformers.DataCollatorForLanguageModeling):
    def __call__(self, features):
        batch = super().__call__(features)
        # 克隆所有张量,脱离推理模式
        for key, tensor in batch.items():
            if isinstance(tensor, torch.Tensor):
                batch[key] = tensor.clone()
        return batch

# 替换原有的data_collator
trainer = transformers.Trainer(
    model=model,
    train_dataset=data,
    args=training_args,
    data_collator=CustomDataCollator(tokenizer, mlm=False)
)

内容的提问来源于stack exchange,提问作者helincesxyz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:23:13