在PyTorch中,我的DeepLearning管道的前部有一个循环,以标准化中间结果。
它将在CPU上运行并降低GPU的利用率吗?
一些摘要如下:
def forward(self):
...
for b in range(batch_size):
self.points[b] = self.unit_cube(self.points[b])
....
答案 0 :(得分:2)
在Pytorch中,是否在GPU或CPU上进行操作取决于数据的位置。 Pytorch的主要卖点之一是,您(通常)不必关心数据在哪里;界面是相同的。
如果张量数据在GPU上,则该操作在GPU上完成。如果在CPU上,则该操作在CPU上完成。您选择如何组织这些操作(if
,for loop
等)对此没有影响。
>>> import torch
>>> a = torch.randn(3,4,5)
>>> b = a.cuda()
>>> a.device
device(type='cpu')
>>> b.device
device(type='cuda', index=0)
>>> c = b
>>> for x in range(10):
... c = c * 2
...
>>> c.device
device(type='cuda', index=0)
在上面的示例中,我使用了for循环将b
翻倍10次,并将结果存储在c中。这些都是在GPU上完成的,而我同样可以在a
上完成,使其在CPU上实现。