The implementations can differ, both for the networks on top of the ops and the ops themselves. For example 3d avg pooling seems to use atomicAdd for cases where the windows can overlap, so something like
self.avgpool = nn.AvgPool3d((last_duration, last_size, last_size), stride=1)

is suspect.
Best regards
Thomas