优化numpys einsum函数
opt-einsum的Python项目详细描述
优化的einsum:张量压缩序优化器
优化的einsum可以显著减少类einsum表达式的总体执行时间(例如,
^{
示例用法
那^{einsum
的替换项。
功能无需进一步更改代码,同时提供卓越的性能。
这里,张量收缩是通过优化和不优化来实现的:
importnumpyasnpfromopt_einsumimportcontractN=10C=np.random.rand(N,N)I=np.random.rand(N,N,N,N)%timeitnp.einsum('pi,qj,ijkl,rk,sl->pqrs',C,C,I,C,C)1loops,bestof3:934msperloop%timeitcontract('pi,qj,ijkl,rk,sl->pqrs',C,C,I,C,C)1000loops,bestof3:324usperloop
在这个特定的例子中,我们看到大约3000倍的性能改进,这是 与未优化的宫缩相比并不少见。见backend examples 有关使用其他后端的详细信息。
功能
在这个存储库中找到的算法经常支持einsum
优化
在上述许多项目中。例如,优化np.einsum
已向上游传递,大多数相同的功能可以在
可以使用np.einsum(..., optimize=True)
启用此存储库。然而,
对于复杂的压缩,这个存储库通常有更多的最新算法。
以下功能由opt_einsum
启用:
- 检查关于所选路径的detailed information。
- 使用numerous backends执行压缩,包括在gpu上以及使用TensorFlow和PyTorch等库执行压缩。
- 生成reusable expressions,可能与constant tensors一起生成,可以编译以获得更高的性能。
- 使用任意数量的索引查找hundreds or even thousands of tensors的压缩。
- 在多次收缩中共享intermediate computations。
- 使用autograd或jax计算张量收缩的梯度
有关更多功能,请参见documentation!
安装
opt_einsum
可以通过pip install opt_einsum
或从condaconda install opt_einsum -c conda-forge
安装。有关进一步的方法,请参见安装documenation。
引文
如果此代码有助于您的研究,请引用:
Daniel G.A.Smith和Johnnie Gray,opt_Einsum-一个用于优化类Einsum表达式的压缩顺序的Python包。开源软件杂志,2018,3(26),753
doi:https://doi.org/10.21105/joss.00753
贡献
欢迎所有贡献、错误报告、错误修复、文档改进、增强和想法。
有关如何贡献的详细概述可以在contributing guide中找到。