我以第三种方式失败了.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'))
Run Code Online (Sandbox Code Playgroud)
Uma*_*pta 11
这三种方法都适合我.
在1和2中,您在CPU上创建张量,然后在使用.to(device)或时将其移动到GPU .cuda().它们在这里是一样的.
但是,当您使用.to(device)方法时,您可以通过设置明确告诉手电筒移动到特定的GPU device=torch.device("cuda:<id>").与.cuda()你必须做到.cuda(<id>)移动到某个特定的GPU.
为什么这两种方法存在呢?
.to(device)在0.4中引入,因为device在代码顶部声明变量更容易
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
.to(device)到处使用.这使得从CPU切换到GPU非常容易,反之亦然
在此之前,我们必须使用,.cuda()并且您的代码将if检查cuda.is_available()所有在GPU/CPU之间切换的麻烦.
第三种方法不会在CPU上创建张量并直接将数据复制到GPU,这样效率更高.
| 归档时间: |
|
| 查看次数: |
2791 次 |
| 最近记录: |