NumPy比Pythorch更快,适用于更大的交叉或外部产品

2024-04-25 10:16:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我在计算大小为(50500,)的向量之间的巨大的外积,发现NumPy是(很多?)比Pythorch还快。在

以下是测试:

# NumPy

In [64]: a = np.arange(50500) 
In [65]: b = a.copy()  

In [67]: %timeit np.outer(a, b) 
5.81 s ± 56.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

-------------

# PyTorch

In [73]: t1 = torch.arange(50500)
In [76]: t2 = t1.clone()

In [79]: %timeit torch.ger(t1, t2) 
7.73 s ± 143 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

理想情况下,我希望在Pythorch中完成计算。那么,在Pythorch中计算如此巨大的向量的外积,我该如何加速呢?在


注意:我试图将张量移动到GPU,但是我使用了MemoryError,因为它需要大约19gib的空间。所以,我最终不得不在CPU上完成。在


Tags: indevnumpyloopnpmean向量ms
1条回答
网友
1楼 · 发布于 2024-04-25 10:16:22

不幸的是,如果不付出大量的努力,真的没有办法特别加快torch计算外积torch.ger()的方法。在

说明和选项

numpy函数np.outer()这么快的原因是它是用C编写的,您可以在这里看到:https://github.com/numpy/numpy/blob/7e3d558aeee5a8a5eae5ebb6aef03de892a92ebd/numpy/core/numeric.py#L1123 其中函数使用来自umathC源代码的操作。在

PyTrink的{{CD1>}函数是用C++编写的:https://github.com/pytorch/pytorch/blob/7ce634ebc2943ff11d2ec727b7db83ab9758a6e0/aten/src/ATen/native/LinearAlgebra.cpp#L142,它使它在您的示例中看到的稍微慢一些。在

“在Pythorch中加速计算外部产品”的选择是在Pythorch的本机代码中为外部产品添加一个C实现,或者在与C接口时使用Cython之类的东西来创建自己的外部产品函数,如果你真的不想使用numpy(这没什么意义)。在

p.S.

此外,使用GPU只会提高GPU上的并行计算速度,这可能不会超过在RAM和GPU内存之间传输数据所需的时间成本。在

相关问题 更多 >