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

Huggingface Seq2seqTrainer训练Whisper时评估阶段冻结

Whisper微调时评估阶段程序冻结问题排查

问题现象

  • 按照《Fine Tune Whisper Model》教程训练Whisper模型,调用trainer.train()后训练进度条正常推进,但到达训练参数定义的评估步骤时程序冻结,进度条停滞且无任何报错输出。
  • 使用Kaggle Notebook搭配P100 GPU训练,初始设置max_steps=4000时,程序总会在第1001步卡住。
  • 数据集为流式Iterable Dataset。

相关代码

模型初始化

from transformers import WhisperForConditionalGeneration

model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-small")

model.config.forced_decoder_ids = None
model.config.suppress_tokens = []
model.generation_config.language = "en"

训练参数设置

from transformers import Seq2SeqTrainingArguments

training_args = Seq2SeqTrainingArguments(
    output_dir="./whisper-small-eng-gen",  # change to a repo name of your choice
    per_device_train_batch_size=16,
    gradient_accumulation_steps=1,  # increase by 2x for every 2x decrease in batch size
    learning_rate=1e-5,
    warmup_steps=500,
    max_steps=1000,
    gradient_checkpointing=True,
    fp16=True,
    evaluation_strategy="steps",
    per_device_eval_batch_size=8,
    predict_with_generate=True,
    generation_max_length=225,
    save_steps=1000,
    eval_steps=1000,
    logging_steps=25,
    report_to=["tensorboard"],
    load_best_model_at_end=True,
    metric_for_best_model="wer",
    greater_is_better=False,
    push_to_hub=True,
    ignore_data_skip=True
)

Trainer初始化

from transformers import Seq2SeqTrainer

trainer = Seq2SeqTrainer(
    args=training_args,
    model=model,
    train_dataset=common_voice_train,
    eval_dataset=common_voice_test,
    data_collator=data_collator,
    compute_metrics=compute_metrics,
    tokenizer=processor.feature_extractor,
)

日志更新信息

添加详细日志配置:

import transformers

transformers.logging.set_verbosity_info()

进入评估步骤后得到提示:

You have passed language=en, but also have set forced_decoder_ids to [[1, None], [2, 50359]] which creates a conflict. forced_decoder_ids will be ignored in favor of language=en.

解决方向建议

  1. 修复配置冲突
    日志提示的配置冲突可能导致生成逻辑异常,统一在generation_config层面设置参数,避免同时修改model.config和generation_config:

    # 替换原模型初始化的配置代码
    model.generation_config.forced_decoder_ids = None
    model.generation_config.suppress_tokens = []
    model.generation_config.language = "en"
    

    或者直接在加载模型时指定生成配置:

    model = WhisperForConditionalGeneration.from_pretrained(
        "openai/whisper-small",
        generation_config={"language": "en", "forced_decoder_ids": None, "suppress_tokens": []}
    )
    
  2. 适配流式数据集评估
    Iterable Dataset在评估阶段可能出现无限迭代或加载阻塞问题:

    • 确保评估数据集是有限长度的Iterable Dataset,或在评估时限制迭代次数。
    • 临时关闭predict_with_generate(设为False)测试评估是否能正常运行,若恢复正常则说明问题出在生成步骤,可尝试减小generation_max_length或降低评估批次大小。
  3. 排查GPU资源瓶颈
    P100 GPU在评估生成阶段可能内存不足导致隐性阻塞:

    • 降低per_device_eval_batch_size(比如从8调整为4)。
    • 评估阶段临时关闭gradient_checkpointing(该优化仅训练阶段需要)。
  4. 更详细日志定位
    设置日志为DEBUG级别,获取评估阶段的执行细节,定位卡住的具体环节:

    transformers.logging.set_verbosity_debug()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:25:24