如何在有限的内存中进行 numpy 大矩阵相乘优化?

2017-07-05 10:31:53 +08:00
 pypy

硬件条件:内存 16G,显存 24G。开发语言:Python ;计算库:numpy

一个原始矩阵大小为( 80000,25088 ),与它自己的转置相乘。运行代码为:

matrix.dot(matrix.T)

  1. 直接运行结果报 Memory Error。
  2. 尝试将虚拟内存加到 150G,报错:19398 Segmentation fault (core dumped)
  3. 尝试将矩阵使用 SVD 降维,报错:init_dgesdd failed init

请教大神还有没有办法,在有限的硬件条件下解决这个问题?

3977 次点击
所在节点    问与答
5 条回复
madeye
2017-07-05 10:47:27 +08:00
Sparse or Dense?
madeye
2017-07-05 10:48:23 +08:00
srlp
2017-07-05 11:42:28 +08:00
手动实现分块运算。把一个大矩阵看成四个小矩阵
pypy
2017-07-05 14:22:31 +08:00
@madeye 是非稀疏的。可以用随机数生成器来模拟这个矩阵。所以 scipy 的 sparse 可能不适用。
pypy
2017-07-05 14:23:52 +08:00
@srlp 谢谢。很不错的建议。只是手动分块后的合并怎么实现呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/373145

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX