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

微调Hugging Face T5模型推理时遇设备不匹配RuntimeError求助

解决Hugging Face Pipeline推理时设备不匹配的RuntimeError

核心原因

训练完成的模型参数或推理时的输入张量分散在CPU和GPU上,导致张量设备不一致,触发设备不匹配报错。

针对性解决方案

1. 显式将模型移至GPU并指定Pipeline设备

加载微调后的模型时,直接调用.to("cuda")将模型参数全部移至GPU;同时初始化pipeline时显式指定device=0(对应cuda:0):

from transformers import AutoModelForSequenceClassification, AutoTokenizer, pipeline

# 加载模型并移至GPU
model = AutoModelForSequenceClassification.from_pretrained("your_finetuned_model_path").to("cuda")
tokenizer = AutoTokenizer.from_pretrained("your_finetuned_model_path")

# 初始化pipeline时指定设备
classifier = pipeline(
    "text-classification",  # 根据你的任务类型调整
    model=model,
    tokenizer=tokenizer,
    device=0  # 对应cuda:0,若有多GPU可指定其他编号
)

2. 检查自定义预处理的张量设备

如果是手动预处理测试集数据而非完全依赖pipeline的自动处理,必须确保所有输入张量与模型在同一设备:

# 手动预处理示例
texts = ["测试文本1", "测试文本2"]
inputs = tokenizer(texts, padding=True, truncation=True, return_tensors="pt")
# 将所有输入张量移至GPU
inputs = {key: tensor.to("cuda") for key, tensor in inputs.items()}

# 直接用模型推理
outputs = model(**inputs)

3. 修复多GPU训练后的模型加载问题

如果训练时使用了DataParallel或DistributedDataParallel,保存的模型参数会带有module.前缀,加载时需要去除并移至GPU:

from transformers import AutoModelForSequenceClassification

# 加载带module前缀的模型
model = AutoModelForSequenceClassification.from_pretrained("your_finetuned_model_path")
# 去除module前缀并移至GPU
model = model.module.to("cuda") if hasattr(model, "module") else model.to("cuda")

是否需要更换测试集推理方式?

不一定必须更换。只要确保模型、输入张量的设备完全一致,无论是用pipeline还是直接调用模型推理都能正常运行。上述方案已经覆盖了绝大多数设备不匹配的场景,优先尝试这些修复步骤。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:30:50