TrainingArguments 拒绝 evaluation_strategy 参数
4.50.3 仍保留旧字段,4.51.3 已移除。改用 eval_strategy,并核对保存与评估配置。
旧训练脚本在创建 TrainingArguments 时直接报 unexpected keyword argument 'evaluation_strategy'。此时模型还没训练,换数据集、关闭 FP16 都不会改变构造函数的参数表。
Transformers 4.50.3 仍保留 evaluation_strategy 并给出弃用警告,4.51.3 已没有这个 dataclass 字段,使用 eval_strategy。5.19.0 也没有旧字段,保留的是 eval_strategy。这是旧脚本迁移到新参数表的问题,不应仅因为代码在 Colab 运行就认定是平台故障。4.51.3 是明确已移除旧字段的版本,这里不将它认定为首次移除 patch;旧警告预告的版本也不能代替实际参数表。
import inspect
import sys
import transformers
from transformers import TrainingArguments
print(sys.executable)
print(transformers.__version__, transformers.__file__)
print(inspect.signature(TrainingArguments.__init__))
如果签名有 eval_strategy 而没有 evaluation_strategy,把旧字段改名,保留原来的评估意图:
from transformers import TrainingArguments
args = TrainingArguments(
output_dir="./results",
eval_strategy="epoch",
save_strategy="epoch",
load_best_model_at_end=True,
report_to="none",
)
这是配置示例,正式训练还需要 Trainer 的 eval_dataset。不要直接删除评估参数来让构造函数过关:那可能让训练失去原本的验证流程。使用 "steps" 时,还要检查 eval_steps、save_steps;4.51.3 对 load_best_model_at_end=True 有保存与评估策略一致、步数匹配的检查。
从上层配置找到最后一个旧字段
改掉一处后仍报相同错误,常见原因是配置文件或封装库又传入旧名字。搜索自己的工程:
rg 'evaluation_strategy' . --glob '*.py' --glob '*.yaml' --glob '*.json'
若字段由 TRL、SetFit 等依赖的封装生成,应选择与 Transformers 兼容的封装版本,不在 site-packages 里随手改构造函数。若必须维护多个历史版本,可以在应用配置入口根据真实签名映射字段,但要保证只传一种名字;传入两种名字会增加歧义。
Notebook 更新依赖后重启 kernel,服务更新后重启 worker,并用同一解释器跑 python -m pip check。最后用小数据完成一次训练和一次评估,确认日志里出现预期的评估指标与 checkpoint。构造参数成功只是第一步,不能替代“评估仍按原策略执行”的检查。


