如果我有 8 台功能强大的机器,分配和平衡用户应用程序和科学实验负载的正确方法是什么?
虚拟化是正确的方法吗?或者是否有任何类型的负载管理器软件可以实现这一点?
答案1
答案2
你想要的是虚拟化的反面,即集群。
我将尝试尽可能简单地解释其中的差异。
虚拟化是在一台(或多台)物理机上运行多个虚拟机。这使您可以通过在一台物理计算机上运行多个完全独立的虚拟机来更有效地利用现有硬件。
集群允许您使用一台或多台物理机器(称为“节点”)来运行您的应用程序。这允许您在计算作业上使用集群中的所有 CPU 能力,并由批处理调度程序协调。
这两件事可以结合起来 - 例如我曾经参与过一个名为花蜜研究云它使用基于 Openstack 的虚拟化技术,让澳大利亚各地的科学家和其他研究人员能够按需创建从单一虚拟机到大型虚拟机集群的任何东西。
slurm
除了 @Alexander Batischev 提到的、 或torque
等批量排队软件之外pbs
,您可能还需要MPI库或类似的安装。例如,如果您需要运行的计算类型可以分为可以独立处理的较小块,并稍后合并结果,那么您将需要 MPI 库。您还需要编写代码来使用它们,以便在集群中不同节点上运行的进程的不同实例可以相互通信。
各种科学和其他学科中的许多常见和流行的应用程序都内置了 MPI 支持(或类似的、可能专有的替代方案),因为它们旨在在集群上运行。
Alexander 提到集群与非交互式软件配合使用效果最佳......确实如此,但对于许多应用程序来说,有图形前端用于创建、查看和编辑数据、创建批处理作业文件并将其提交到集群(使用泥浆或扭矩等),并查看结果。
关键点是,对于您的主要计算作业,您不只是运行它们并直接与它们交互。您(或您的前端软件)创建批处理脚本并将其提交到队列以供执行。它将排队并且不会执行,直到集群有足够的可用资源来运行您的作业(这可能几乎立即执行,或者在非常繁忙的集群上,不会执行几天甚至几周)。当作业完成执行时,它通常会保存一个日志文件和一个或多个结果文件,这些文件可以加载到桌面前端程序中以供查看。
批处理脚本可以指定各种事情,让批处理调度程序知道如何处理它 - 例如,它需要多少 RAM 或磁盘空间、多少个 cpu 或 cpu 核心和/或什么类型(例如,它需要 1 个或更多) GPU节点)?,是否可以跨多个节点与MPI一起运行,或者只能在一个节点上运行。
这里有一个有趣的博客文章从头开始设置 HPC 集群 - 重点是计算化学,但没有理由相同类型的设置不能用于其他学科,所描述的集群是在 Debian 上构建的,并且 Debian 有一个巨大的图书馆的科学软件。