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

解决HuggingFace Transformers Seq2Seq训练的生成控制弃用警告

解决Seq2SeqTrainer训练时的生成配置弃用警告

我使用HuggingFace Transformers的Seq2SeqTrainer训练序列到序列模型时,出现了以下弃用警告:

/path/to/python3.9/site-packages/transformers/generation/utils.py:1219: UserWarning: You have modified the pretrained model configuration to control generation. This is a deprecated strategy to control generation and will be removed soon, in a future version. Please use a generation configuration file.

注:原提示中的文档链接已失效。

我的代码如下:

model = BartForConditionalGeneration.from_pretrained(checkpoint)
model.config.output_attentions = True
model.config.output_hidden_states = True

training_args = Seq2SeqTrainingArguments(
    output_dir = "output_dir_here",
    evaluation_strategy = IntervalStrategy.STEPS, #"epoch",
    optim = "adamw_torch", # Use new PyTorch optimizer
    eval_steps = 1000, # New
    logging_steps = 1000,
    save_steps = 1000,
    learning_rate = 2e-5,
    per_device_train_batch_size = batch_size,
    per_device_eval_batch_size = batch_size,
    weight_decay = 0.01,
    save_total_limit = 3,
    num_train_epochs = 30,
    predict_with_generate=True,
    remove_unused_columns=True,
    fp16 = True,
    push_to_hub = True,
    metric_for_best_model = 'bleu', # New or "f1"
    load_best_model_at_end = True # New
)

trainer = Seq2SeqTrainer(
    model = model,
    args = training_args,
    train_dataset = train_ds,
    eval_dataset = eval_ds,
    tokenizer = tokenizer,
    data_collator = data_collator,
    compute_metrics = compute_metrics,
    callbacks = [EarlyStoppingCallback(early_stopping_patience=3)]
)

trainer.train()

训练可以正常完成,但我想解决这个弃用警告,该怎么修改代码?

版本信息:

  • Transformers 4.28.1
  • Python 3.9.7

这个警告的核心原因是直接修改模型主配置(model.config)来控制生成逻辑的做法已被弃用,官方现在要求用独立的GenerationConfig来管理生成相关的参数。

你的代码中修改了model.config.output_attentions和model.config.output_hidden_states,如果这两个参数是为了生成阶段输出注意力和隐藏状态,就需要把它们移到model.generation_config中设置;如果是训练阶段需要,那修改model.config没问题,但因为开启了predict_with_generate=True,训练器会触发生成逻辑,所以需要确保生成相关的配置都通过GenerationConfig来管理。

具体修改方案

方案一:直接修改模型的generation_config

model = BartForConditionalGeneration.from_pretrained(checkpoint)

# 针对生成阶段的参数,修改model.generation_config而非model.config
model.generation_config.output_attentions = True
model.generation_config.output_hidden_states = True

# 如果训练阶段也需要输出注意力和隐藏状态,保留这两行(可选)
# model.config.output_attentions = True
# model.config.output_hidden_states = True

方案二:显式创建GenerationConfig并绑定到模型

from transformers import GenerationConfig

model = BartForConditionalGeneration.from_pretrained(checkpoint)

# 从预训练模型加载生成配置
gen_config = GenerationConfig.from_pretrained(checkpoint)
# 修改生成阶段需要的参数
gen_config.output_attentions = True
gen_config.output_hidden_states = True

# 将生成配置绑定到模型
model.generation_config = gen_config

方案三:在训练参数中指定生成配置

如果需要更明确地控制训练时的生成行为,可以在Seq2SeqTrainingArguments中传入generation_config参数:

training_args = Seq2SeqTrainingArguments(
    # 其他原有参数不变
    predict_with_generate=True,
    generation_config=gen_config,  # 传入前面定义好的gen_config
)

完成以上修改后,弃用警告就会消失,同时符合Transformers的新规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:07:01