具有用于后端数字处理的 HPC 资源的桌面软件

计算科学 高性能计算 分区
2021-12-04 22:41:34

我们的工作组制作了一个模拟建筑能源性能的桌面应用程序。它是一个 .NET 应用程序,当用户运行大量模拟时,它们可能会非常耗时。模拟是完全可并行的,我们在“办公室”拥有一些非常重要的HPC计算资源。

我们的一个想法是让用户卸载我们知道运行时间很长的模拟(虽然每个单独的模拟运行大约 30-120 秒,运行大量模拟可能需要几天时间)。有没有人这样做过?如果是这样,您是否使用任何库来简化工作?值得付出努力吗?

编辑添加:

卸载模拟的单个任务将是

  • 打包一个文件(大约 5Mb),
  • 将其上传到我们的服务器,
  • 将包分解为单独的模拟(每个大约需要 30-120 秒并且完全可并行化),模拟的数量是用户选择的选项数量(绝缘、建筑方向等)和选择的最坏情况的函数每个可能的选项都会导致大约 1E50 次模拟。运行 100 到 ~1E5 次模拟并非未知,但大多数用户将运行少于 10 次。
  • 重新组装完成的模拟并下载现在更大的文件。

我们不确定要使用什么界面,因为我们的团队是新手,而且随着预算的削减,它可能会及时完成,但需要让下一个人(如果有的话)易于维护。

这个应用程序已经使用 .NET 4 并且可以扩展以使用用户拥有的所有内核(我们的开发机器有 8 个内核)。

3个回答

您可以考虑使用 Condor:http ://research.cs.wisc.edu/condor/ 。这可能有点矫枉过正,具体取决于您所谈论的 HPC 资源类型以及它们会发生多大的变化。然而,它相当容易上手,它负责启动独立作业、容错、负载平衡等。

如果您更具体地了解各个任务(多长时间、异步程度)以及您将用于交互的接口(启动过程、库等),将会更有帮助

马特

如果您身处 .NET 世界,您是否看过 .NET 4 中的多线程支持?以及添加到 .NET 4.5 的异步功能?

多线程并不能帮助您将处理任务转移到其他机器上,但它确实可以让您更好地利用我们这些天都在使用的多核 PC。4.0 在这方面有一些不错的功能。

4.5 目前处于技术预览阶段——因此值得一看,看看它是否会有所帮助。上个月左右(10 月或 11 月,绝对不早于 9 月),MSDN 上有一篇文章介绍了新的异步特性。看起来这些特性是作为一种并行化传统上并行性较低的代码的方式而被推动的,但 IIRC 它们还包括一些多服务器支持。

答案取决于您作为 HPC 后端拥有什么。该问题涉及 NREL 用户可用的现有资源。有 Linux 集群和基于 Windows Compute Cluster Server 的 Windows 集群。

  1. 要使用 linux 集群,作者需要确保模拟例程在 Mono(Linux 的 .NET 平台的实现)上运行,并确保 Mono 安装在节点上。

  2. 下一个问题是用户是否在计算集群上拥有帐户并且可以将数据获取到节点。最简单的情况是可以从本地 PC 和节点访问单个文件系统。

    我不确定这样的文件系统是否可供 NREL 用户使用,因此会涉及一些复制。这已经使事情变得复杂了。

  3. 接下来,应用程序应该能够编译作业描述脚本,将其提交到相应的集群并查询排队系统的模拟状态,直到作业退出队列。

  4. 最后,应用程序应该能够检索结果。

所有这一切都是可行的,虽然不是微不足道的,并且将高度特定于这个特定实验室的设置。

Ansys 或 MSC 的商业应用程序允许用户保存模拟作业描述,以后可以在远程集群上以批处理模式运行。

如果可用,更通用的解决方案是使用网格基础设施。

下一个可以采用面向服务的体系结构,其中在某处设置 Web 服务以等待模拟请求并将它们分派到集群上,从而将应用程序与可用资源细节的知识分离。

这在计算生物学中得到了广泛应用,其中工具用于组成模拟工作流程,该工作流程完全由用于处理的 Web 服务请求组成。

请注意,将计算卸载到远程计算资源通常用于 Android 的 Google 语音识别等应用程序中。