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_idsto [[1, None], [2, 50359]] which creates a conflict.forced_decoder_idswill be ignored in favor of language=en.
解决方向建议
修复配置冲突
日志提示的配置冲突可能导致生成逻辑异常,统一在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": []} )适配流式数据集评估
Iterable Dataset在评估阶段可能出现无限迭代或加载阻塞问题:- 确保评估数据集是有限长度的Iterable Dataset,或在评估时限制迭代次数。
- 临时关闭
predict_with_generate(设为False)测试评估是否能正常运行,若恢复正常则说明问题出在生成步骤,可尝试减小generation_max_length或降低评估批次大小。
排查GPU资源瓶颈
P100 GPU在评估生成阶段可能内存不足导致隐性阻塞:- 降低
per_device_eval_batch_size(比如从8调整为4)。 - 评估阶段临时关闭
gradient_checkpointing(该优化仅训练阶段需要)。
- 降低
更详细日志定位
设置日志为DEBUG级别,获取评估阶段的执行细节,定位卡住的具体环节:transformers.logging.set_verbosity_debug()
内容的提问来源于stack exchange,提问作者InvalidHop
相关产品推荐
相关产品推荐

