【问题标题】:Can Tensors on different devices add together?不同设备上的张量可以相加吗?
【发布时间】:2022-11-11 00:23:28
【问题描述】:

我最近发现了一件奇怪的事情。据我所知,当你想对两个张量做一些操作时,你应该确保它们在同一个设备上。但是当我这样编写代码时,它会意外运行

import torch
a = torch.tensor(1, device='cuda')
print(a.device)
b = torch.tensor(2, device='cpu')
print(b.device)
torch(a+b)


cuda:0
cpu
tensor(3, device='cuda:0')

它不能像这样在我的代码中工作:

pts_1_tile = torch.tensor([[0], [0]], dtype=torch.float32)
torch.add(pred_4pt_shift, pts_1_tile)

这里pred_4pt_shift是一个子网的中间结果,它是GPU上的一个张量。 我的问题是为什么第一个代码可以工作但第二个代码报告这个不同的设备错误?

【问题讨论】:

  • 在这里,您应该删除火炬:a + b

标签: pytorch device


【解决方案1】:

我猜你的意思是print(a+b) 而不是torch(a+b)

标量张量是一种特殊情况,可以自动移动到目标设备。 如果将ab 定义为一维张量,则会出错:

import torch
a = torch.tensor([1], device='cuda')
b = torch.tensor([2], device='cpu')
print(a+b)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2021-03-30
    • 2023-02-16
    相关资源
    最近更新 更多