在GPU上使用NumPy + BLAS + LAPACK(AMD和Nvidia)

4
我们有一段涉及昂贵线性代数计算的Python代码。数据存储在NumPy数组中。该代码使用numpy.dot和一些BLAS和LAPACK函数,目前通过scipy.linalg.blas和scipy.linalg.lapack进行访问。当前代码针对CPU编写。我们希望将代码转换为一些NumPy、BLAS和LAPACK操作在GPU上执行。
我正在尝试确定最佳方法。据我所知,Numba不支持在GPU上运行BLAS和LAPACK函数。看起来PyCUDA可能是最好的路线,但我很难确定PyCUDA是否允许使用BLAS和LAPACK函数。
编辑:我们需要使代码可移植到不同的GPU架构,包括AMD和Nvidia。虽然PyCUDA似乎提供了所需的功能,但CUDA(因此也是PyCUDA)无法在AMD GPU上运行。

2
AMD GPGPU 处于一种不稳定的状态。历史上,AMD 落后于 OpenCL 和 clBLAS,但现在他们通过 HIP 和 hipBLAS 关注于 CUDA 兼容性。这些技术都还不够成熟,但我期望(希望)像 PyCUDA 这样的框架将变得与供应商无关。目前尚不清楚 OpenCL 将来的发展前景如何。 - Aleksandr Dubinsky
2个回答

5

你尝试过研究scikit-cuda吗? https://scikit-cuda.readthedocs.io/en/latest/#

它似乎使用pyCUDA访问CUDA-toolkit库(CUBLAS,CUSOLVER,CUFFT,CULA),并提供基于CUBLAS的一些LAPACK例程的自己实现。

我已经用它来做CUBLAS例程了,感觉不错,希望LAPACK也是一样的。


谢谢,这似乎是一个可行的选择。我很好奇是否有其他人采取了不同的方法。 - srcerer
我认为这对Nvidia GPU有效。我们需要让代码也能在AMD GPU上运行,而这些GPU不支持CUDA。 - srcerer
1
很抱歉,我对AMD GPU的经验非常有限,我认为您可能需要寻找基于pyOpenCL的软件包(异构架构的Pycuda等效物): https://mathema.tician.de/software/pyopencl/ https://pyclblas.readthedocs.io/en/latest/index.html#此外,您是否尝试过查看面向ML的库,例如theano?它们支持GPU和一些线性代数例程。 - Jacek Golebiowski

0
另一个选择是ArrayFire。虽然这个包不包含完整的BLAS和LAPACK实现,但它提供了许多相同的功能。它与OpenCL和CUDA兼容,因此与AMD和Nvidia架构兼容。它有Python的包装器,使用起来很容易。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接