CuPy 运行 内存不足

CuPy running out of memory

我一直在测试 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 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)