gpt4 book ai didi

python - 如何使用 numpy einsum_path 结果?

转载 作者:太空狗 更新时间:2023-10-30 00:00:57 26 4
gpt4 key购买 nike

我正在使用 numpy einsum 对一些 3 维和 4 维张量执行相当复杂的操作。

我的实际代码是

np.einsum('oij,imj,mjkn,lnk,plk->op',phi,B,Suu,B,phi)

这就是我想要它做的。

使用einsum_path,结果为:

>>> path = np.einsum_path('oij,imj,mjkn,lnk,plk->op',phi,B,Suu,B,phi)

>>> print(path[0])
['einsum_path', (0, 1), (0, 3), (0, 1), (0, 1)]

>>> print(path[1])
Complete contraction: oij,imj,mjkn,lnk,plk->op
Naive scaling: 8
Optimized scaling: 5
Naive FLOP count: 2.668e+07
Optimized FLOP count: 1.340e+05
Theoretical speedup: 199.136
Largest intermediate: 7.700e+02 elements
--------------------------------------------------------------------------
scaling current remaining
--------------------------------------------------------------------------
4 imj,oij->moj mjkn,lnk,plk,moj->op
5 moj,mjkn->nok lnk,plk,nok->op
4 plk,lnk->npk nok,npk->op
4 npk,nok->op op->op

这表明理论上的加速约为 200 倍。

我如何使用这个结果来加速我的代码?我如何“实现”einsum_path 告诉我的内容?

最佳答案

做一些时间测试

path = np.einsum_path('oij,imj,mjkn,lnk,plk->op',phi,B,Suu,B,phi)

np.einsum('oij,imj,mjkn,lnk,plk->op',phi,B,Suu,B,phi, optimize=False)
np.einsum('oij,imj,mjkn,lnk,plk->op',phi,B,Suu,B,phi, optimize=True)
np.einsum('oij,imj,mjkn,lnk,plk->op',phi,B,Suu,B,phi, optimize=path[0])

在我的测试中,第二个 2 以相同的速度运行。对于一个小问题,optimize=False 更快,大概是因为分析和重新排列需要时间。对于较大的问题,具有较大的理论加速比,True 的实际加速比可能大于理论。据推测,内存管理正在减慢 False 的情况。

理论加速 只是基于 FLOPS 计数的估计。只有在 FLOPS 主导计算的情况下,这才是正确的。

您还可以为 path 计算计时。问题的大小将决定它的时间是总时间的一小部分还是大部分。

关于python - 如何使用 numpy einsum_path 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54481282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com