HuggingFace Transformers报logging_steps参数非零错误如何解决
HuggingFace Transformers微调TrainingArguments参数报错修复
问题复现
微调预训练模型时使用的TrainingArguments配置代码如下:
training_args = TrainingArguments( output_dir='./.checkpoints', num_train_epochs=config.n_epochs, per_device_train_batch_size=config.batch_size_per_device, per_device_eval_batch_size=config.batch_size_per_device, warmup_steps=n_warmup_steps, weight_decay=0.01, fp16=True, evaluation_strategy='epoch', save_strategy='epoch', logging_steps=n_total_iterations // 100, save_steps=n_total_iterations // config.n_epochs, load_best_model_at_end=True, )
运行后抛出错误栈:
File "finetune_plm_hftrainer.py", line 134, in main load_best_model_at_end=True, File "<string>", line 90, in __init__ File "/usr/local/lib/python3.6/dist-packages/transformers/training_args.py", line 813, in __post_init__ raise ValueError(f"logging strategy {self.logging_strategy} requires non-zero --logging_steps") ValueError: logging strategy IntervalStrategy.STEPS requires non-zero --logging_steps
错误原因
- TrainingArguments默认的日志记录策略为
IntervalStrategy.STEPS,该策略要求传入的logging_steps参数必须为非零正整数 - 现有代码中
logging_steps取值通过n_total_iterations // 100计算得到,当训练总迭代数n_total_iterations小于100时,整数除法结果为0,触发参数校验逻辑抛出错误 - 配置中
evaluation_strategy和save_strategy均设为epoch,且开启了load_best_model_at_end=True,该部分配置符合规则,无问题。
修复方法
根据实际日志记录需求选择对应方案即可:
- 保留原有按步记录日志、每训练1%进度打印一次日志的逻辑,给计算结果加最小值兜底,避免出现0值:
logging_steps=max(1, n_total_iterations // 100),
- 不需要按步记录日志时,可直接将日志策略调整为按epoch触发,和现有评估、保存策略对齐,无需手动计算步数:
# 新增该配置项,可删除原logging_steps配置 logging_strategy='epoch',
- 有固定日志间隔需求时,直接给
logging_steps传入固定正整数值即可,比如每10步打印一次日志:
logging_steps=10,
修改完成后重新运行训练脚本,即可通过参数校验,正常启动训练流程。
内容的提问来源于stack exchange,提问作者UNGGI LEE
相关产品推荐
相关产品推荐

