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

如何避免T5模型训练时重复打印Generate config日志?

问题

训练google/flan-t5-base模型时,每次执行评估步骤后都会重复打印Generate config GenerationConfig相关日志,干扰训练全局状态的查看。尝试设置os.environ.TF_CPP_MIN_LOG_LEVEL=2修改日志级别,但没有效果。

日志示例

***** Running Evaluation ***** Num examples = 819 Batch size = 32 Generate config GenerationConfig { "decoder_start_token_id": 0,
"eos_token_id": 1, "output_attentions": true,
"output_hidden_states": true, "pad_token_id": 0,
"transformers_version": "4.26.1" }
...

训练代码

from transformers import AutoModelForSeq2SeqLM

model_id="google/flan-t5-base"
model = AutoModelForSeq2SeqLM.from_pretrained(model_id)

repository_id = f"{model_id.split('/')[1]}-{dataset_id}"

training_args = Seq2SeqTrainingArguments(
    output_dir=repository_id,
    #gradient_accumulation_steps = 8,
    per_device_train_batch_size=8,
    per_device_eval_batch_size=8,
    predict_with_generate=True,
    fp16=False, # Overflows with fp16
    learning_rate=5e-6,
    num_train_epochs=5,
    optim = "adamw_torch",
    logging_dir=f"{repository_id}/logs",
    logging_strategy="steps",
    logging_steps=50,
    evaluation_strategy="steps",
    eval_steps=5,
    save_strategy="steps",
    save_total_limit=2,
    load_best_model_at_end=True,
    report_to="tensorboard",
    push_to_hub=False,
    hub_strategy="every_save",
    hub_model_id=repository_id,
    hub_token=HfFolder.get_token(),
)

trainer = Seq2SeqTrainer(
    model=model,
    args=training_args,
    data_collator=data_collator,
    train_dataset=tokenized_dataset["train"],
    eval_dataset=tokenized_dataset["test"],
    compute_metrics=compute_metrics,
)

trainer.train()

尝试过的无效方法

import os
os.environ.TF_CPP_MIN_LOG_LEVEL=2

解决方法

方法1:调整transformers库的日志级别

TF的日志设置对transformers内部日志无效,需直接调整transformers的日志等级:

import logging
from transformers import logging as hf_logging

# 只输出错误信息,过滤INFO及以下日志
hf_logging.set_verbosity_error()
# 若需要保留警告信息,可改为:
# hf_logging.set_verbosity_warning()

方法2:显式指定生成配置并关闭冗余输出

在初始化Seq2SeqTrainingArguments时,通过generation_config参数定义生成配置,关闭不需要的输出项(日志中output_attentions和output_hidden_states为True是冗余项,默认应为False):

from transformers import GenerationConfig

gen_config = GenerationConfig(
    decoder_start_token_id=0,
    eos_token_id=1,
    pad_token_id=0,
    output_attentions=False,
    output_hidden_states=False,
)

training_args = Seq2SeqTrainingArguments(
    # 其他原有参数保持不变
    generation_config=gen_config,
)

方法3:自定义Trainer屏蔽评估时的冗余日志

如果前两种方法无效,可以自定义Seq2SeqTrainer,临时调整评估过程中的日志级别:

from transformers import Seq2SeqTrainer, logging as hf_logging

class CustomSeq2SeqTrainer(Seq2SeqTrainer):
    def evaluate(self, eval_dataset=None, ignore_keys=None, metric_key_prefix="eval"):
        # 保存原日志级别,临时设为ERROR
        original_verbosity = hf_logging.get_verbosity()
        hf_logging.set_verbosity_error()
        result = super().evaluate(eval_dataset, ignore_keys, metric_key_prefix)
        # 恢复原日志级别
        hf_logging.set_verbosity(original_verbosity)
        return result

# 使用自定义Trainer替代原Trainer
trainer = CustomSeq2SeqTrainer(
    model=model,
    args=training_args,
    data_collator=data_collator,
    train_dataset=tokenized_dataset["train"],
    eval_dataset=tokenized_dataset["test"],
    compute_metrics=compute_metrics,
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:47:37