为工作站和 HPC 设置令人尴尬的并行代码的最佳方法

问题描述 投票:0回答:1

我正在寻找最通用/最简单的方法来运行具有更改输入的令人尴尬的并行代码。

  • 我希望最终的解决方案能够在工作站(没有可用的 PBS)上运行,而且还可以在 HPC(有 PBS)的多个节点上运行,只需进行最少的修改。
  • 将有 100-1000 个实例运行。假设运行时间可达 8 小时。
  • 代码的各个实例不需要通信
  • 只要有足够的内存/CPU 工作,单个 NUMA 节点就可以而且应该运行多个实例。大多数代码是单线程的,这不容易更改为多线程。有螺纹部分称为 BLAS。
  • 专用于实例的核心/内存应固定到 NUMA 节点
  • 可以并行发生的运行数量可能会受到可用内存的限制。 根据可以并行运行的内存限制数量和 NUMA 本地中的核心数量,将计算/分配每个实例的核心数量。

代码本身是 fortran 并接受命令行输入。如果需要的话我可以修改代码。

我想知道解决上述问题的最佳方法是什么。我希望多功能性能够在没有 PBS 的单个/多个工作站上运行,以及在带有 PBS 的 HPC 上运行。

我心中的选择

  1. 滚动我自己的 sh 脚本(目前在工作站上使用这种方法)。我最初在脚本中使用 xargs,但命令字符串变得越来越复杂。我最终对每次运行进行背景分析并在 while 循环中使用作业。它运作得很好。不过,我认为未来没有一种简单的方法可以跨多个节点进行扩展。
  2. MPI。直接在 fortran 中实现还是使用某种 python 包装器?看起来,
    --map-by ppr:4:numa:pe=2
    将为每个 numa 节点启动 4 个进程,并将每个进程绑定到处理元素。每个 numa 本地的进程数和每个进程的线程数可以根据问题大小和 numa 配置来计算。通过分配计算,MPI 将处理繁重的工作。
  3. 其他?
mpi hpc xargs gnu-parallel
1个回答
0
投票

为工作站和高性能计算 (HPC) 环境设置极其并行的代码涉及不同的考虑因素。 “令人尴尬的并行”是指可以轻松地划分为多个并行任务的问题,这些任务之间不需要太多的沟通或协调。以下是为工作站和 HPC 进行设置的步骤:

工作站设置:

并行化代码:修改代码以将工作负载分解为可以并行执行的独立任务。 选择并行化方法:考虑使用您首选编程语言中的多处理库(例如 Python 的多处理模块)或并行计算框架(例如 OpenMP for C/C++)。 优化资源使用:确保您的工作站有足够的资源(核心、内存)来有效处理并行任务。您可能需要配置代码以有效管理可用资源。 测试和调试:在工作站上测试并行化代码,以确保其正常运行并按预期扩展。调试任何问题。 HPC 设置:

HPC 集群访问:访问 HPC 系统或集群。这可能涉及获取权限、帐户和了解可用资源。 作业提交系统:了解HPC的作业提交系统(例如Slurm、PBS等)。了解如何向集群提交并行作业。 HPC 代码修改:您的代码可能需要进一步修改以适应 HPC 环境,特别是在集群使用不同的硬件、编译器或库的情况下。 扩展注意事项:在 HPC 上使用较小的工作负载测试您的代码,以确保其正确扩展。注意资源分配、并行性和负载平衡。 作业提交脚本:创建作业提交脚本,指定资源要求、并行化设置和任何其他必要的配置。 提交作业:使用作业提交脚本将作业提交到 HPC 系统。 监控和优化:监控 HPC 上作业的性能,并根据需要优化代码和作业参数以提高效率。 两种环境的一般提示:

日志记录和监控:在代码中实施日志记录和监控机制以跟踪进度和潜在错误。 数据管理:确保正确的数据处理,以有效地分发输入和收集输出。 文档:记录您的代码以及工作站和 HPC 的并行化过程,以便将来更轻松地参考和复制。 请记住,该过程可能会有所不同,具体取决于您使用的特定工具、语言和框架,以及 HPC 集群的配置和作业提交策略。请务必检查 HPC 系统管理员提供的文档和指南,以了解最佳实践和任何特定要求。

© www.soinside.com 2019 - 2024. All rights reserved.