如何在AMD GPU上运行Python?

时间:2019-05-20 11:39:07

标签: python parallel-processing gpu amd gpu-programming

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

我们已经用Python实现了代码,并成功在CPU上运行了代码。我们还尝试了多处理,该方法也很好用,但由于计算需要数周时间,因此我们需要更快的计算速度。我们拥有一个由6个AMD GPU组成的GPU系统。我们想在此GPU系统上运行代码,但不知道如何执行。

我的问题是:

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

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

PS:如果需要,我可以添加更多信息。我试图使帖子尽可能简单以避免冲突。

1 个答案:

答案 0 :(得分:2)

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

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

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

  2. 一旦您有了一个经过优化的Numpy示例,就可以尝试使用Numba来获得GPU加速方面的第一印象。对于简单的情况,您可以修饰Numpy函数以在GPU上运行。如果您的问题可以并行化/向量化,那么与Numpy代码相比,您可以期望将速度提高100到500。

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

重要的一点是,GPU只有在正确使用且仅针对某些问题的情况下才具有强大的功能。

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

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