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

从Checkpoint恢复训练时修改训练参数无效的技术咨询

从Checkpoint恢复训练时参数不生效的原因及解决办法

你遇到的问题是Checkpoint中的训练配置会覆盖你新设置的部分参数,不是语法问题。Transformers的Trainer在调用train(resume_from_checkpoint)时,会自动加载checkpoint目录下的training_args.json文件,里面保存了之前训练时的所有TrainingArguments配置,并且默认会优先使用这些旧配置,而非你新传入的参数——尤其是save_steps、per_device_train_batch_size这类和训练流程强相关的参数,目的是保证训练的连续性,但也导致你的修改不生效。

下面是几种解决办法:

1. 直接修改Checkpoint里的配置文件

找到你指定的checkpoint目录(/content/latest_checkpoint/),打开其中的training_args.json文件,手动把save_steps、per_device_train_batch_size改成你需要的值,保存后再执行恢复训练的代码即可。这种方法最简单,适合快速调整参数。

2. 手动覆盖Trainer的参数

在创建Trainer对象后、调用train()方法前,直接修改Trainer实例的args属性,强制覆盖旧配置:

# 创建完Trainer之后添加这段代码
trainer.args.per_device_train_batch_size = 8
trainer.args.save_steps = 10
trainer.args.evaluation_strategy = "steps"
trainer.args.eval_steps = 10

# 再执行恢复训练
trainer.train(resume_from_checkpoint="/content/latest_checkpoint/")

这种方法不需要修改本地文件,适合代码内动态调整参数。

3. 仅加载模型权重,不恢复训练状态

如果你不需要继承之前的训练步数、优化器状态等,只是想基于训练好的模型继续训练(步数从0开始),可以直接用from_pretrained加载模型权重,然后使用新的TrainingArguments创建Trainer,不需要指定resume_from_checkpoint:

# 先加载checkpoint里的模型权重
model = model.from_pretrained("/content/latest_checkpoint/")
model.config.use_cache = False

# 用新的参数创建Trainer
trainer = transformers.Trainer(
    model=model,
    callbacks=[upload_checkpoint_callback],
    train_dataset=tokenized_train_dataset,
    eval_dataset=tokenized_val_dataset,
    args=transformers.TrainingArguments(
        # 这里写你新的参数配置
        output_dir=output_dir,
        warmup_steps=warmup_steps,
        per_device_train_batch_size=8,
        gradient_checkpointing=True,
        gradient_accumulation_steps=gradient_accumulation_steps,
        max_steps=5000,
        learning_rate=learning_rate,
        logging_steps=10,
        fp16=True,
        optim="paged_adamw_8bit",
        logging_dir="/content/logs",       
        save_strategy="steps",      
        save_steps=10,              
        evaluation_strategy="steps", 
        eval_steps=10,               
        load_best_model_at_end=True,
        report_to="wandb",           
        run_name=f"{run_name}-{datetime.now().strftime('%Y-%m-%d-%H-%M')}"
    ),
    data_collator=transformers.DataCollatorForLanguageModeling(tokenizer, mlm=False),
)

# 直接开始训练,不需要resume参数
trainer.train()

这种方法适合完全调整训练策略,不需要延续之前训练状态的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:12:41