如何在 AMD GPU 上运行 Python?

Posted

技术标签:

【中文标题】如何在 AMD GPU 上运行 Python?【英文标题】:How to run Python on AMD GPU? 【发布时间】:2019-10-06 18:48:54 【问题描述】:

我们目前正在尝试优化一个至少有 12 个变量的系统。这些变量的总组合超过 10 亿。这不是深度学习、机器学习或 Tensorflow 或其他任何东西,而是对时间序列数据的任意计算。

我们已经在 Python 中实现了我们的代码,并成功地在 CPU 上运行了它。我们还尝试了多处理,它也很有效,但我们需要更快的计算,因为计算需要数周时间。我们有一个由 6 个 AMD GPU 组成的 GPU 系统。我们想在这个 GPU 系统上运行我们的代码,但不知道该怎么做。

我的问题是:

    我们可以在支持 AMD 的笔记本电脑上运行简单的 Python 代码吗? 我们可以在我们的 GPU 系统上运行相同的应用程序吗?

我们了解到我们需要调整用于 GPU 计算的代码,但我们不知道该怎么做。

PS:如果您需要,我可以添加更多信息。我尽量让帖子保持简单以避免冲突。

【问题讨论】:

【参考方案1】:

至少有两个选项可以加快使用 GPU 的计算速度:

PyOpenCL Numba

但我通常不建议从一开始就在 GPU 上运行代码。 GPU 上的计算并不总是更快。取决于它们的复杂程度以及您在 CPU 和 GPU 上的实现有多好。如果您按照下面的列表进行操作,您可以很好地了解会发生什么。

    如果您的代码是纯 Python(列表、浮点数、for 循环等),您可以通过使用矢量化 Numpy 代码看到巨大的加速(可能高达 100 倍)。这也是了解如何实现 GPU 代码的重要步骤,因为矢量化 Numpy 中的计算将具有类似的方案。 GPU 在可以并行化的小任务上表现更好。

    一旦你有一个优化良好的 Numpy 示例,你可以尝试使用 Numba 来初步了解 GPU 加速。对于简单的情况,您可以装饰您的 Numpy 函数以在 GPU 上运行。如果您的问题可以并行化/矢量化,那么与 Numpy 代码相比,您可以预期 100 到 500 倍的加速。

    到目前为止,您可能没有为 GPU 编写任何 OpenCL C 代码,但您的代码仍然可以在其上运行。但是如果您的问题太复杂,您将不得不编写自定义代码并使用PyOpenCL 运行它。与好的 Numpy 代码相比,预期的加速也是 100 到 500。

需要记住的重要一点是,GPU 只有在正确使用且仅针对特定问题集的情况下才会强大。

如果您有代码的小示例,请随时发布。

另外要说的是,CUDA 通常比 OpenCL 更容易使用。有更多的库、更多的示例、更多的文档、更多的支持。 Nvidia 从一开始就没有很好地支持 OpenCL,这方面做得非常好。我通常更喜欢开放标准,但是当事情变得商业化和商业化时,我们很快就转向了 CUDA 和 Nvidia 硬件。

【讨论】:

在 AMD ROC GPU 上使用 Numba:numba.pydata.org/numba-doc/latest/roc/index.html

以上是关于如何在 AMD GPU 上运行 Python?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GPU(AMD)中运行 ffmpeg

如何编写可在任何 GPU 上运行的 GPU 并行化程序? [关闭]

将 Keras 和 Tensorflow 与 AMD GPU 结合使用

无论如何在带有 AMD GPU 的 Mac 中使用 Keras?

如何在 GPU 上启用 php 运行 python 脚本? [关闭]

是否可以在AMD GPU上运行CUDA?