【问题标题】:CuPy running out of memoryCuPy 内存不足
【发布时间】:2019-04-19 05:06:47
【问题描述】:

我一直在测试 CuPy 库并使用 einsum 做了一个简单的矩阵乘法:

C = cp.einsum('pqrs,rs->pq', A, B)

A 和 B 的维度是,(41, 41, 41, 41) (41, 41),接受。我还检查了它们的大小,分别是 22606088 字节、13448 字节。

While running the code, I am getting the following error message:
OutOfMemoryError: out of memory to allocate 38000834048 bytes (total 38023468032 bytes)

这表明我的内存不足。是否有任何选项可以将部分数据发送到设备并批量执行操作?

【问题讨论】:

  • 您使用的是哪个 CuPy 版本?你能添加cupy.show_config()的输出吗?

标签: python chainer cupy


【解决方案1】:

我认为没有选项可以为一个数组部分发送数据。

我之前也遇到过同样的问题,这可能是因为cupy einsum效率还没有优化造成的。 https://github.com/cupy/cupy/issues/19#issuecomment-322972682

如果您可以尝试使用transposereshapematmul 等替换您的einsum 函数,请尝试这些。

我猜

C = cp.einsum('pqrs,rs->pq', A, B)

等价于

p, q, r, s = A.shape
A = cp.reshape(A, (p, q, r*s))
B = cp.reshape(B, (1, 1, r*s))
C = cp.sum(A * B, axis=2)

【讨论】:

  • 你是对的,这种方式行得通。看起来 CuPy einsum 没有优化。我还注意到,如果可用内存被激发,这个库就不起作用,这是一个巨大的缺点。好吧,我们知道 GPU 卡不能提供太多内存。你试过绕过它吗?
  • 我认为einsum 的实现已经更新,我不知道您使用的是哪个cupy 版本,但最新版本可能更有效。
猜你喜欢
  • 2020-02-23
  • 1970-01-01
  • 2014-10-15
  • 2021-02-26
  • 2011-05-21
  • 2021-12-20
  • 2021-10-29
  • 1970-01-01
  • 2020-03-12
相关资源
最近更新 更多