Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pytorch 模型的正向定义是按顺序执行还是并行执行?_Pytorch - Fatal编程技术网

Pytorch 模型的正向定义是按顺序执行还是并行执行?

Pytorch 模型的正向定义是按顺序执行还是并行执行?,pytorch,Pytorch,我想知道深层模型类的正向定义中的指令是否按顺序执行?例如: class Net(nn.Module): ... def forward(self,x): #### Group 1 y = self.conv1(x) y = self.conv2(y) y = self.conv3(y) ### Group 2 z = self.conv4(x) z = self.c

我想知道深层模型类的正向定义中的指令是否按顺序执行?例如:

class Net(nn.Module):
    ...
    def forward(self,x):

        #### Group 1
        y = self.conv1(x)
        y = self.conv2(y)
        y = self.conv3(y)

        ### Group 2
        z = self.conv4(x)
        z = self.conv5(z)
        z = self.conv6(z)

        out = torch.cat((y,z),dim=1)
        return out

在这种情况下,Group1和Group2指令可以并行化。但正向定义会自动理解这一点,还是会按顺序执行?如果没有,那么如何并行运行它们

我正在运行PyTorch 1.3.1


非常感谢

它们是按顺序执行的,只有操作的计算是并行的。据我所知,没有直接的方法让它们通过PyTorch并行运行

我假设您期望通过并行运行它们来提高性能,但这充其量是最小的,而最坏的情况下则要慢得多,因为像卷积这样的操作已经高度并行化了,除非输入非常小,否则所有内核都将被永久使用。并行运行多个卷积将导致大量的上下文切换,除非您均匀地分配可用的核心,但这并不会使它比依次使用所有核心更快

如果同时运行两个PyTorch程序,您可以观察到相同的行为,例如运行以下程序,该程序有3个相对常见的卷积,并使用像ImageNet这样的224x224图像,与其他模型(例如,对象检测)相比,该图像较小:

进口火炬 导入torch.nn作为nn 类modeln.模块: 定义初始自我: 超级模特,赛尔夫__ self.conv1=nn.Conv2d3,32,内核大小=3,填充=1 self.conv2=nn.Conv2d32,64,内核大小=3,填充=1 self.conv3=nn.Conv2d64,128,内核大小=3,填充=1 def forwardself,输入: out=自我确认1输入 out=self.conv2out out=self.conv3out 返回 输入=torch.randn10、3、224、224 model=model.eval 运行100次就可以创建一个微基准 对于我在100范围内: out=模型输入 要获取有关上下文开关的信息,可以使用/usr/bin/time而不是内置时间

/usr/bin/time-v python bench.py 单次运行:

Elapsed (wall clock) time (h:mm:ss or m:ss): 0:22.68
Involuntary context switches: 857 
同时运行两个实例:

Elapsed (wall clock) time (h:mm:ss or m:ss): 0:43.69
Involuntary context switches: 456753

为了澄清,每个实例都花费了大约43秒,这不是累计时间。

谢谢。在阅读了您关于执行时间的评论之后,在CPU上进行推理时python的time.time可靠吗?或者正如您所建议的,应该使用/usr/bin/time?python的time.time可以用来测量CPU时间。我使用/usr/bin/time的原因是为了获取上下文开关的数量。