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

GMAN图神经网络CUDA适配报错:张量设备不匹配问题求助

解决GMAN CUDA适配的设备不匹配问题

核心问题定位

报错Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!的直接原因是:模型输出的预测张量valPred位于cuda:0设备,但验证集的真实标签张量valY仍留在CPU上,两者无法在不同设备上计算指标。

具体修复步骤

1. 迁移验证集真实标签到GPU

找到train.py中获取验证集真实标签valY的代码位置,在调用metric函数前,将valY同步到valPred所在的设备:

# 在train.py调用metric的代码段修改
valPred = model(...)  # 模型输出已在GPU
valY = valY.to(valPred.device)  # 将真实标签同步到相同设备
metrics = metric(valPred, valY)

如果验证集是通过DataLoader加载的,也可以在数据加载的__getitem__方法中,直接将标签张量移到指定GPU设备。

2. 检查metric函数内的张量创建逻辑

打开计算指标的metric函数,若函数内有新建张量(比如全零掩码、权重张量)的操作,需指定设备为输入张量的设备,避免默认创建在CPU上:

def metric(pred, true):
    # 示例:将新建的掩码张量指定到pred的设备
    mask = torch.ones_like(true).to(pred.device)
    # 后续指标计算逻辑
    ...

3. 全局确认设备一致性

  • 确保模型已正确迁移到GPU:
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = model.to(device)
  • 检查训练集数据是否也完成了设备迁移,避免只处理训练集而遗漏验证集的情况。

额外排查点

若修改后仍报错,检查是否存在其他未迁移到GPU的张量(比如损失函数的权重、额外输入特征),这类隐藏的CPU张量也会引发设备不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:52:04