python 中的自动 GPU 卸载

Automatic GPU offloading in python

我在python写过一段科学代码,主要是用了numpy库(尤其是Fast Fourier Transforms),还有一点Cython。我所知道的 CUDA 或任何与 GPU 相关的内容都没有。没有图形界面,终端中的所有内容都是 运行(我在 Windows 上使用 WSL2)。整个代码主要是关于数字 c运行ching,一点也不花哨。

当我 运行 我的程序时,我看到 CPU 使用率约为 100%(当然是预期的),但 GPU 使用率也上升到 5% 左右。

是否有可能将部分工作自动卸载到 GPU?我还能如何解释这种小幅但持续的 GPU 使用率增长?

感谢帮助

,Numpy 中没有自动卸载,至少 标准 Numpy 实现 没有。请注意,一些特定的 FFT 库可以使用 GPU,但 Numpy 的标准实现使用它自己的 FFT 实现,称为 PocketFFT based on FFTPack,不使用 GPU。 Cython 不执行任何自动隐式 GPU 卸载。代码需要这样做 explicitly/manually.

没有自动执行 GPU 卸载,因为 对于所有任务,GPU 并不比 CPU 快,并且将数据卸载到 GPU 是昂贵的,尤其是对于小型阵列(由于相对较高的- 在这种情况下 PCI 总线和内核调用的延迟)。此外,即使 GPU 理论上可以更快,也很难有效地做到这一点。

5% 的 GPU 使用率是相对于 GPU 的频率而言的,GPU 通常配置为使用自适应频率。例如,我的离散 Nv-1660S GPU 频率当前为 300 MHz,但它可以自动达到 1.785 GHz。以 17% 的最大频率实际使用 5% 的 GPU 运行 进行终端的 2D 渲染是完全可能的。在我的机器上,在 Windows 终端中以 10 FPS 的速度在 for 循环中打印行占用了我 GPU 的 6% 仍然是 运行 低频(0-1% 没有 运行 任何东西) .

如果您想检查 GPU 的频率和负载,可以使用很多工具,从通常与驱动程序一起安装的供应商工具到 GPU-z 等软件在 Windows 上。对于 Nvidia GPU,您可以使用 nvidia-smi 列出当前使用您的 GPU 的进程(应该是 rocm-smi 在 AMD GPU 上)。