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

Hugging Face超参搜索时Trainer的model_init参数报RuntimeError问题

报错根因

问题的核心是model_init的传值逻辑写错了:

  • 你当前代码里写的是model_init = finetuning_utils.model_init(),这行代码会立刻执行一次model_init函数,把执行后返回的RoBERTa模型实例直接传给Trainer。
  • Hugging Face Trainer要求model_init必须是一个可调用的函数本身,不能是函数执行后的返回值——因为超参搜索流程需要在每一组超参试验时,主动调用这个函数重新初始化模型。你传成模型实例的话,Trainer内部解析参数时,会判定这个对象不符合“接受0或1个参数的可调用函数”的规范,直接抛出对应的RuntimeError。
修复方法

把model_init赋值行里函数名后面的括号删掉,直接传函数引用就行,修改后的代码:

#Initialising the model
trainer = Trainer(
    args = training_args,
    tokenizer = tokenizer,
    train_dataset = train_data,
    eval_dataset = val_data,
    # 去掉函数名后的(),直接传函数引用
    model_init = finetuning_utils.model_init,
    compute_metrics = finetuning_utils.compute_metrics,
)
后续适配超参搜索的注意点
  • 你当前实现的零参数model_init函数,本身已经满足Trainer的入参要求,只是传值时多打了括号。
  • 如果后续需要在超参搜索过程中根据每轮试验的参数调整模型配置,只需要给model_init函数加一个可选的trial入参即可,不需要修改Trainer里的传参方式,改造后的函数定义示例:
def model_init(trial=None):
    """Returns an initialized model for use in a Hugging Face Trainer."""
    model = RobertaForSequenceClassification.from_pretrained("roberta-base")
    return model

调整后函数就完全符合Trainer对model_init的参数规则,超参搜索流程可以正常完成多轮迭代。

内容的提问来源于stack exchange,提问作者CMOS-Y

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 00:45:08