【问题标题】:Automatic GPU offloading in pythonpython中的自动GPU卸载
【发布时间】:2021-11-18 01:14:05
【问题描述】:

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

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

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

感谢您的帮助

【问题讨论】:

  • 我认为它不会自动执行此操作。有像 CuPy 这样的东西,但你不能在不知道的情况下使用它。
  • 确实,我不是故意使用 CuPy(我什至不认为它在我的 conda 环境中)
  • @G.Fougeron 我认为这很正常。当你运行脚本时,也许 GPU 必须渲染输出?
  • 据我所知,屏幕上唯一的输出是终端中的一些文本(可能每秒约 10 行)。如果这占用了我 GPU 的 5%,我会感到惊讶!

标签: python numpy gpu


【解决方案1】:

,在 Numpy 中没有自动卸载,至少在 标准 Numpy 实现中没有。请注意,某些特定的 FFT 库可以使用 GPU,但 Numpy 的标准实现使用自己的 FFT 实现,称为 PocketFFT,基于 FFTPack,不使用 GPU。 Cython 不执行任何自动隐式 GPU 卸载。代码需要显式/手动执行此操作。

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

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

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

【讨论】:

    猜你喜欢
    • 2019-01-02
    • 2018-09-06
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多