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

如何加载transformers.trainer.Trainer保存的HuggingFace模型并实现预测

问题原因

核心原因是predict是transformers.trainer.Trainer类的专属方法,你通过from_pretrained加载得到的XLMRobertaForQuestionAnswering是基础模型类,本身不提供predict接口,和加载权重的逻辑、use_auth_token参数没有关系。

解决方案

有两种常用的实现方式,按需选择即可:

方案1:重新初始化Trainer实例完成预测

适合需要沿用训练时的数据处理、批量预测的场景,直接调用Trainer自带的predict方法即可:

from transformers import AutoModelForQuestionAnswering, Trainer, TrainingArguments

# 加载训练好的模型权重
model_sm = AutoModelForQuestionAnswering.from_pretrained("./trainer_sm")
# 初始化预测用的训练参数,仅需配置基础参数,不需要训练相关配置
predict_args = TrainingArguments(
    output_dir="./predict_tmp",
    per_device_eval_batch_size=8
)
# 初始化Trainer实例,无需传入训练/验证数据集
trainer = Trainer(
    model=model_sm,
    args=predict_args,
    data_collator=data_collator, # 需与训练时使用的data_collator保持一致
    tokenizer=tokenizer # 可直接从./trainer_sm目录加载,训练时Trainer已自动保存
)
# 执行预测
predict_result = trainer.predict(test_features)

方案2:直接调用模型完成推理

适合自定义推理逻辑、小批量预测的场景,无需初始化Trainer:

import torch
from transformers import AutoModelForQuestionAnswering, AutoTokenizer

# 加载训练好的模型和对应的tokenizer
model_sm = AutoModelForQuestionAnswering.from_pretrained("./trainer_sm")
tokenizer = AutoTokenizer.from_pretrained("./trainer_sm")
# 设备适配
device = "cuda" if torch.cuda.is_available() else "cpu"
model_sm.to(device)
processed_test = {k: v.to(device) for k, v in test_features.items()}

# 关闭梯度计算加速推理
with torch.no_grad():
    outputs = model_sm(**processed_test)
# 提取问答任务输出,可自行做后处理得到最终答案
start_pos = torch.argmax(outputs.start_logits, dim=-1)
end_pos = torch.argmax(outputs.end_logits, dim=-1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:45:04