Python 环路是否会降低GPU的利用率?

Python 环路是否会降低GPU的利用率?,python,tensorflow,pytorch,gpu,Python,Tensorflow,Pytorch,Gpu,在PyTorch中,我在我的深度学习管道的前端部分有一个循环,用于规范化中间结果 它会在CPU上运行并降低GPU的利用率吗 下面是一些代码片段: def forward(self): ... for b in range(batch_size): self.points[b] = self.unit_cube(self.points[b]) .... 在Pytork中,操作是在GPU上还是在CPU上进行取决于数据的位置。Pytorch的主要卖点之一是,您

在PyTorch中,我在我的深度学习管道的前端部分有一个循环,用于规范化中间结果

它会在CPU上运行并降低GPU的利用率吗

下面是一些代码片段:

def forward(self):
    ...
    for b in range(batch_size):
        self.points[b] = self.unit_cube(self.points[b])
    ....

在Pytork中,操作是在GPU上还是在CPU上进行取决于数据的位置。Pytorch的主要卖点之一是,您(通常)不必关心数据在哪里;界面是一样的

如果张量数据在GPU上,则操作在GPU上完成。如果它在CPU上,则操作在CPU上完成。您选择如何组织这些操作(
if
s、
for loop
s等)对其没有影响

导入火炬 >>>a=火炬。随机数(3,4,5) >>>b=a.cuda() >>>a.装置 设备(类型='cpu') >>>b.设备 设备(类型='cuda',索引=0) >>>c=b >>>对于范围(10)内的x: ... c=c*2 ... >>>c.设备 设备(类型='cuda',索引=0)
在上面的示例中,我使用for循环将
b
10倍,将结果存储在c中。这一切都是在GPU上完成的,我同样可以在
a
上完成,让它发生在CPU上。

在Pytorch中,操作是在GPU上完成还是在CPU上完成取决于数据所在的位置。Pytorch的主要卖点之一是,您(通常)不必关心数据在哪里;界面是一样的

如果张量数据在GPU上,则操作在GPU上完成。如果它在CPU上,则操作在CPU上完成。您选择如何组织这些操作(
if
s、
for loop
s等)对其没有影响

导入火炬 >>>a=火炬。随机数(3,4,5) >>>b=a.cuda() >>>a.装置 设备(类型='cpu') >>>b.设备 设备(类型='cuda',索引=0) >>>c=b >>>对于范围(10)内的x: ... c=c*2 ... >>>c.设备 设备(类型='cuda',索引=0)
在上面的示例中,我使用for循环将
b
10倍,将结果存储在c中。这一切都是在GPU上完成的,我同样可以在
a
上完成,使其在CPU上实现。

除非使用库将glsl之类的东西编译到计算着色器并将其绑定到Python,否则Python不会在GPU上运行。否则,您使用python所做的一切都是通过python解释器完成的,该解释器在cpu上运行。@AwesomeCronk它被Pytork标记,Pytork是一个库,它为深入学习项目提供了方便的GPU访问。@Multihunter Ahhh。。。我完全错过了。谢谢你纠正这个问题!Python不会在gpu上运行,除非您使用库将glsl之类的东西编译到计算着色器并将其绑定到Python。否则,您使用python所做的一切都是通过python解释器完成的,该解释器在cpu上运行。@AwesomeCronk它被Pytork标记,Pytork是一个库,它为深入学习项目提供了方便的GPU访问。@Multihunter Ahhh。。。我完全错过了。谢谢你纠正这个问题!谢谢!我还想知道“打印”功能是否会破坏GPU进程?例如,我将输出打印到shell或文件中。很少有操作会修改张量,当它们修改时,它们会显式地表示为张量。打印GPU张量不会使张量不在GPU上,原因与
print(a*2)
不会使
a
等于打印的值相同。出于同样的原因,
b=a.cuda()
导致两个独立的张量,一个在GPU上,另一个在CPU上。但是,一般来说,你应该试试看。如果你有一个张量,并且
b.device
cuda
,那么它总是一个GPU张量。实际上,我正在培训一个图像分割项目,GPU的利用率一直从0%变为55%。我想知道这是否是因为
print
功能。啊,调试GPU的使用是很棘手的,因为它都是异步的和不可理解的。我最成功的方法是编写一个单独的脚本,反复运行一些操作,并估计每个操作需要多长时间。e、 g.制作一些假数据,然后做一个循环,做
model.向前
10000次,看看有/没有相关操作需要多长时间。不过,一般来说,
print
不太可能造成这种情况。低于最大GPU利用率通常是因为数据加载管道。确保你有几个线程运行。非常感谢!我还想知道“打印”功能是否会破坏GPU进程?例如,我将输出打印到shell或文件中。很少有操作会修改张量,当它们修改时,它们会显式地表示为张量。打印GPU张量不会使张量不在GPU上,原因与
print(a*2)
不会使
a
等于打印的值相同。出于同样的原因,
b=a.cuda()
导致两个独立的张量,一个在GPU上,另一个在CPU上。但是,一般来说,你应该试试看。如果你有一个张量,并且
b.device
cuda
,那么它总是一个GPU张量。实际上,我正在培训一个图像分割项目,GPU的利用率一直从0%变为55%。我想知道这是否是因为
print
功能。啊,调试GPU的使用是很棘手的,因为它都是异步的和不可理解的。我最成功的方法是编写一个单独的脚本,反复运行一些操作,并估计每个操作需要多长时间。e、 g.制作一些假数据,然后做一个循环,做
model.向前
10000次,看看有/没有相关操作需要多长时间。不过,一般来说,
print
不太可能造成这种情况。低于最大GPU利用率通常是因为数据加载管道。确保在几个线程中运行。