我第三条路失败了。t3
仍在CPU上。不知道为什么。
a = np.random.randn(1, 1, 2, 3)
t1 = torch.tensor(a)
t1 = t3.to(torch.device('cuda'))
t2 = torch.tensor(a)
t2 = t2.cuda()
t3 = torch.tensor(a, device=torch.device('cuda'))
这三种方法都对我有用。
在 1 和 2 中,您在 CPU 上创建一个张量,然后在使用时将其移动到 GPU.to(device)
or .cuda()
。他们在这里是一样的。
但是,当您使用.to(device)
您可以通过设置显式告诉 torch 移动到特定 GPU 的方法device=torch.device("cuda:<id>")
. with .cuda()
你必须做.cuda(<id>)
移动到某个特定的 GPU。
那为什么会有这两种方法存在呢?
.to(device)
在0.4中引入,因为它更容易声明device
代码顶部的变量为
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
and use .to(device)
到处。这使得从 CPU 切换到 GPU 变得非常容易,反之亦然
在此之前,我们必须使用.cuda()
你的代码将有if
检查cuda.is_available()
无处不在,这使得 GPU/CPU 之间的切换变得很麻烦。
第三种方法不在CPU上创建张量,直接将数据复制到GPU,效率更高。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)