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

使用Huggingface SFTTrainer微调Llama 2时如何按步保存检查点?

Llama 2 QLoRA微调:检查点保存问题修复与每N步保存配置

问题根源

你当前的代码里,TrainingArguments仅设置了save_strategy="steps",但缺少save_steps参数——这是控制每多少步保存一次检查点的核心配置。另外自定义的PeftSavingCallback逻辑需要和Trainer默认保存流程配合,否则可能导致检查点路径混乱或保存失效。

解决方案:配置每5/10步保存检查点

按以下步骤修改代码,确保检查点正常生成且位置可查:

1. 修正TrainingArguments参数

在TrainingArguments中添加save_steps,同时统一评估与保存的步长逻辑:

output_dir = "./Llama-2-7b-hf-qlora"

training_args = TrainingArguments(
    output_dir=output_dir,
    per_device_train_batch_size=4,
    gradient_accumulation_steps=4,
    learning_rate=2e-4,
    logging_steps=5,
    max_steps=400,
    evaluation_strategy="steps",
    logging_dir="./logs",
    save_strategy="steps",
    save_steps=5,  # 每5步保存一次检查点,改成10即为每10步保存
    eval_steps=5,  # 评估步长与保存步长保持一致
    do_eval=True,
    save_total_limit=3,  # 可选:限制最多保存3个检查点,避免磁盘占满
)

2. 优化PeftSavingCallback逻辑

你的回调目的是仅保存PEFT适配器(而非完整模型),修改逻辑避免和Trainer默认保存冲突:

class PeftSavingCallback(TrainerCallback):
    def on_save(self, args, state, control, **kwargs):
        # 生成对应步长的检查点路径
        checkpoint_path = os.path.join(args.output_dir, f"checkpoint-{state.global_step}")
        # 仅保存PEFT模型的适配器权重
        kwargs["model"].save_pretrained(
            checkpoint_path,
            save_config=True,
            save_peft_format=True
        )
        # 删除Trainer默认保存的完整模型文件(如果存在)
        full_model_path = os.path.join(checkpoint_path, "pytorch_model.bin")
        if os.path.exists(full_model_path):
            os.remove(full_model_path)

3. 验证检查点位置

训练启动后,检查点会自动生成在./Llama-2-7b-hf-qlora目录下,每个检查点对应一个形如checkpoint-5、checkpoint-10的子文件夹,里面仅包含LoRA适配器的权重文件(如adapter_model.bin),不会占用过多磁盘空间。

额外说明

  • 若要改为每10步保存,只需将save_steps和eval_steps同时修改为10即可。
  • save_total_limit参数会自动清理旧检查点,防止磁盘被大量文件占满,建议开启。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:22:48