Python CUDA 并行化多个小矩阵的 SVD

Posted

技术标签:

【中文标题】Python CUDA 并行化多个小矩阵的 SVD【英文标题】:Python CUDA parallize multiple SVD's of small matrices 【发布时间】:2021-02-12 17:51:19 【问题描述】:

我在 *** 上看到过一篇类似的帖子,它解决了 C++ 中的问题:Parallel implementation for multiple SVDs using CUDA 我想在 python 中做同样的事情,这可能吗?我有多个矩阵(大约 8000 个,大小为 15x3),我想使用 SVD 分解它们中的每一个。这需要数年的 CPU 时间。有可能在python中做到这一点吗?我的电脑安装了 NVIDIA GPU。我已经看过几个库,例如 numba、pycuda、scikit-cuda、cupy,但没有找到用这些库实现我的计划的方法。我会很高兴得到一些帮助。

【问题讨论】:

事实证明,cusolver 有一个批处理实现。我第一次看文档时错过了它。 【参考方案1】:

cuPy 允许访问 cuSolver,包括 SVD:

https://docs.cupy.dev/en/stable/reference/generated/cupy.linalg.svd.html

【讨论】:

是的,我见过那个,但这只对大矩阵有意义。我的问题是我希望每个线程都执行这样的 SVD,如果我没记错的话,cuPy 不允许我在 python 中这样做。 (通过 ID 控制每个线程) 我没有在 cuPy 中尝试过,但是在 numpy 中,输入数组可以是 > 2 维(在这种情况下为 8000 x 15 x 3)并且它会广播。理论上,cuPy 有类似的吗? numpy.org/doc/stable/reference/…

以上是关于Python CUDA 并行化多个小矩阵的 SVD的主要内容,如果未能解决你的问题,请参考以下文章

CUDA编程并行矩阵乘法

CUDA编程并行矩阵乘法

Python,与 joblib 并行化:延迟多个参数

使用 CUDA 在 python 中展开一个可并行化的 for 循环

机器学习中的矩阵分解LU分解QR分解SVD分解

如何并行化将矩阵的行随机复制到内存中的另一个矩阵的过程? [复制]