使用 CPU 内存存储 GPU 输出

Using CPU memory to store GPU output

提问人:Oti Dioti 提问时间:9/20/2023 更新时间:9/20/2023 访问量:34

问:

我想知道是否可以告诉 cupy 将某些计算的输出(在 GPU 上进行)直接存储在 CPU 内存上。我目前正在尝试使用对角化一个大型稀疏矩阵,不幸的是,由于矩阵的特征态不稀疏并且占用太多空间,因此我遇到了内存问题。有什么可能的解决办法吗?
提前致谢。
cupy.scipy.sparse.eigsh

python gpu 稀疏矩阵 特征向量 cupy

评论

1赞 9/20/2023
CPU 和 GPU 内存之间的来回传输显然是可能的,否则 GPGPU 将毫无用处。
0赞 Oti Dioti 9/20/2023
从直觉上讲,这是有道理的,类似于我需要的东西应该是可能的。但是,我不是专家,知道的还不够多。此外,我遇到的问题是,这不是将数据从 GPU 传输到 CPU 的问题。相反,我需要 CuPy 将 eigsh 的输出直接存储在 CPU 内存上(程序不断崩溃,因为它由于其大小而无法保存特征向量)
0赞 9/20/2023
我怀疑你是否可以修改 scipy 代码,让 GPU 使用 CPU RAM 进行大容量存储,如果这有意义的话。如果你能找到“块对角化”方法(这与“块对角矩阵的对角化”不同),那就更好看看了。
0赞 CJR 9/21/2023
无法从 GPU 寻址系统内存

答:

1赞 PV8 9/20/2023 #1

有并且要做到这一点。Scipy 在 CPU 上运行,copy 在 GPU 上运行。当您现在使用 Cupy 时,您可以尝试 Scipy: https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.eigsh.htmlSciPyCuPy

评论

0赞 Oti Dioti 9/20/2023
如果我的稀疏数组的大小合理,Scipy 绝对是不错的选择。不幸的是,情况并非如此(到目前为止,我正在处理大小为 1e9 x 1e9 的稀疏数组,如果其特征向量也是稀疏的,这将不是问题)并且使用 CPU 会使用太长时间。