指定尺寸时,torch.max 使用 GPU 比使用 CPU 慢

Dee*_*gla 5 python deep-learning pytorch

t1_h = torch.tensor(np.arange(100000), dtype=torch.float32)\ncuda0 = torch.device('cuda:0')\nt1_d = torch.tensor(np.arange(100000), dtype=torch.float32, device = cuda0)\n
Run Code Online (Sandbox Code Playgroud)\n
%timeit -n 10000 max_h = torch.max(t1_h, 0)\n%timeit -n 10000 max_d = torch.max(t1_d, 0)\n
Run Code Online (Sandbox Code Playgroud)\n
\n

10000 个循环,3 个循环中最好的:每个循环 144 \xc2\xb5s

\n

10000 个循环,3 个循环中最好的:每个循环 985 \xc2\xb5s

\n
\n

正如您在上面看到的,GPU 比 CPU 花费更多的时间。但如果我不指定计算最大值的维度,那么 GPU 会更快。

\n
%timeit -n 10000 max_h = torch.max(t1_h)\n%timeit -n 10000 max_d = torch.max(t1_d)\n
Run Code Online (Sandbox Code Playgroud)\n
\n

10000 个循环,3 个循环中最好的:每个循环 111 \xc2\xb5s

\n

10000 个循环,3 个循环中最好的:每个循环 41.8 \xc2\xb5s

\n
\n

我也尝试过使用,argmaxmax它工作正常(GPU 比 CPU 更快)。

\n
%timeit -n 10000 cs_h = torch.argmax(t1_h, 0)\n%timeit -n 10000 cs_d = torch.argmax(t1_d, 0)\n
Run Code Online (Sandbox Code Playgroud)\n
\n

10000 个循环,3 个循环中最好的:每个循环 108 \xc2\xb5s

\n

10000 个循环,3 个循环中最好的:每个循环 18.1 \xc2\xb5s

\n
\n

torch.max指定维度后 GPU 速度变慢是否有任何原因?

\n

And*_*nes 1

我自己发现了这一点,并在 PyTorch 中提出了一个问题。看起来很快就会修复 - 也许是 1.5 或 1.6 版本?- 但与此同时,建议的解决方法是使用

ii=a.argmax(0)
maxval = a.gather(0, ii.unsqueeze(0)).squeeze(0)
Run Code Online (Sandbox Code Playgroud)