Python 为分布式/并行/GPU 计算提供了什么?

计算科学 Python scipy 麻木的
2021-12-18 10:19:09

使用 SciPy/NumPy 库,Python 是一个非常酷且性能卓越的科学计算平台。我只是想知道:当我必须并行处理(多线程、多核、多节点、gpu)时,Python 提供了什么?

我主要在寻找与当前 NumPy 实现完全兼容的东西。最酷的事情是 NumPy 和其他一些完全并行的基本功能(例如列表理解)的实现,也可以使用 GPU。但我可能要求的有点太多了 ;-)

(并不是说我们无法切换到 C/C++ 中的解决方案,而是我们真的很想在并行环境中利用 Python 在这些语言之上的优势。)

3个回答

以下是一些相对容易使用的选项:

  • 一个节点 -多处理是最直接的事情。 multiprocessing.map适用于令人尴尬的并行问题。
  • GPU - pyCUDA 允许您仅使用 python 进行一些 GPU 级别的编程。我还没有玩弄它那么多。
  • MPI - mpi4py- 在 python 级别公开 MPI 接口。如果您熟悉 MPI,这很有用。

那里有很多选择。 这是一个试图对其中一些进行分类的页面。

(我想提供更多链接,但显然我没有代表。快速搜索这些术语应该会出现文档)

您可以尝试的事情之一是pyMPI,它在 python 中支持 MPI。我们的 HPC 站点上有大量用户将其用于并行处理。这不是通过 NumPy 实现目标的自动化方式,但您应该仔细查看它的功能。

IPython 有一个用于并行计算的包,称为ipyparallel.

他们的文档概述

这种架构以一种非常通用的方式抽象出并行性,这使得 IPython 能够支持许多不同风格的并行性,包括:

  • 单程序、多数据 (SPMD) 并行性。
  • 多程序、多数据 (MPMD) 并行性。
  • 使用 MPI 传递消息。
  • 任务耕作。
  • 数据并行。
  • 这些方法的组合。
  • 自定义用户定义的方法。

最重要的是,IPython 能够交互式地开发、执行、调试和监控所有类型的并行应用程序。因此,I在 IPython 中。以下是 IPython 的一些示例使用案例:

  • 使用多种简单方法快速并行化令人尴尬的并行算法。许多简单的事情可以在一两行代码中以交互方式并行化。
  • 通过笔记本电脑上的 IPython 会话来引导超级计算机上的传统 MPI 应用程序。
  • 使用 IPython 和 matplotlib/TVTK 等工具交互式地分析和可视化大型数据集(可以是远程和/或分布式的)。
  • 以交互方式开发、测试和调试新的并行算法(可能使用 MPI)。
  • 将在不同系统上运行的多个 MPI 作业捆绑到一个巨大的分布式并行系统中。
  • 在集群上启动并行作业,然后让远程协作者连接到它并将数据拉回其本地 IPython 会话以进行绘图和分析。
  • 使用动态负载平衡在一组 CPU 上运行一组任务。