如何在 AMD GPU 上 运行 Python?
How to run Python on AMD GPU?
我们目前正在尝试优化一个至少有 12 个变量的系统。这些变量的总组合超过 10 亿。这不是深度学习或机器学习或 Tensorflow 或其他任何东西,而是对时间序列数据的任意计算。
我们已经在 Python 中实现了我们的代码,并在 CPU 中成功地 运行。我们还尝试了 multiprocessing,它也运行良好,但我们需要更快的计算,因为计算需要数周时间。我们有一个由 6 个 AMD GPU 组成的 GPU 系统。我们想 运行 我们的代码在此 GPU 系统上,但不知道如何操作。
我的问题是:
- 我们可以在支持 AMD 的笔记本电脑上 运行 我们简单的 Python 代码吗?
- 我们可以 运行 在我们的 GPU 系统上使用相同的应用程序吗?
我们了解到我们需要为 GPU 计算调整代码,但我们不知道该怎么做。
PS:如果您需要,我可以添加更多信息。我试图使 post 尽可能简单以避免冲突。
至少有两个选项可以使用 GPU 加速计算:
但我通常不建议 运行 从一开始就在 GPU 上编写代码。 GPU 上的计算并不总是更快。取决于它们的复杂程度以及您在 CPU 和 GPU 上的实现有多好。如果您遵循下面的列表,您可以很好地了解会发生什么。
如果您的代码是纯 Python(list、float、for-loops 等),您可以看到一个巨大的 speed-up(可能高达 100 x)通过使用向量化的 Numpy 代码。这也是找出如何实现 GPU 代码的重要步骤,因为矢量化 Numpy 中的计算将具有类似的方案。 GPU 在可以并行化的小任务上表现更好。
一旦您拥有优化良好的 Numpy 示例,您就可以尝试使用 Numba 初步了解 GPU speed-up。对于简单的情况,您可以在 GPU 上将 Numpy 函数装饰为 运行。如果您的问题可以并行化/矢量化,则与 Numpy 代码相比,您可以期望 speed-up 为 100 到 500。
到目前为止,您可能还没有为 GPU 编写任何 OpenCL C 代码,但仍然有您的代码 运行ning 在上面。但是,如果您的问题太复杂,您将不得不编写自定义代码并 运行 使用 PyOpenCL。与良好的 Numpy 代码相比,预期 speed-up 也是 100 到 500。
记住重要的一点是,GPU 只有在您正确使用它并且只针对特定的一组问题时才会强大。
如果您有代码的小示例,请随时 post 它。
另外要说的是,CUDA 通常比 OpenCL 更容易使用。有更多的库、更多的例子、更多的文档、更多的支持。 Nvidia 从一开始就没有很好地支持 OpenCL,但做得很好。我通常更喜欢开放标准,但当事情变成商业和商业时,我们很快就转向了 CUDA 和 Nvidia 硬件。
我们目前正在尝试优化一个至少有 12 个变量的系统。这些变量的总组合超过 10 亿。这不是深度学习或机器学习或 Tensorflow 或其他任何东西,而是对时间序列数据的任意计算。
我们已经在 Python 中实现了我们的代码,并在 CPU 中成功地 运行。我们还尝试了 multiprocessing,它也运行良好,但我们需要更快的计算,因为计算需要数周时间。我们有一个由 6 个 AMD GPU 组成的 GPU 系统。我们想 运行 我们的代码在此 GPU 系统上,但不知道如何操作。
我的问题是:
- 我们可以在支持 AMD 的笔记本电脑上 运行 我们简单的 Python 代码吗?
- 我们可以 运行 在我们的 GPU 系统上使用相同的应用程序吗?
我们了解到我们需要为 GPU 计算调整代码,但我们不知道该怎么做。
PS:如果您需要,我可以添加更多信息。我试图使 post 尽可能简单以避免冲突。
至少有两个选项可以使用 GPU 加速计算:
但我通常不建议 运行 从一开始就在 GPU 上编写代码。 GPU 上的计算并不总是更快。取决于它们的复杂程度以及您在 CPU 和 GPU 上的实现有多好。如果您遵循下面的列表,您可以很好地了解会发生什么。
如果您的代码是纯 Python(list、float、for-loops 等),您可以看到一个巨大的 speed-up(可能高达 100 x)通过使用向量化的 Numpy 代码。这也是找出如何实现 GPU 代码的重要步骤,因为矢量化 Numpy 中的计算将具有类似的方案。 GPU 在可以并行化的小任务上表现更好。
一旦您拥有优化良好的 Numpy 示例,您就可以尝试使用 Numba 初步了解 GPU speed-up。对于简单的情况,您可以在 GPU 上将 Numpy 函数装饰为 运行。如果您的问题可以并行化/矢量化,则与 Numpy 代码相比,您可以期望 speed-up 为 100 到 500。
到目前为止,您可能还没有为 GPU 编写任何 OpenCL C 代码,但仍然有您的代码 运行ning 在上面。但是,如果您的问题太复杂,您将不得不编写自定义代码并 运行 使用 PyOpenCL。与良好的 Numpy 代码相比,预期 speed-up 也是 100 到 500。
记住重要的一点是,GPU 只有在您正确使用它并且只针对特定的一组问题时才会强大。
如果您有代码的小示例,请随时 post 它。
另外要说的是,CUDA 通常比 OpenCL 更容易使用。有更多的库、更多的例子、更多的文档、更多的支持。 Nvidia 从一开始就没有很好地支持 OpenCL,但做得很好。我通常更喜欢开放标准,但当事情变成商业和商业时,我们很快就转向了 CUDA 和 Nvidia 硬件。