【发布时间】:2020-05-25 20:07:52
【问题描述】:
背景: 我已经在 Singularity 容器中成功创建了基于 MPI 的应用程序,并使用 Singularity 文档推荐的混合模式执行它们。这要求我在容器和主机 O/S 上都安装了“兼容”版本的 MPI。如果我要跨多个节点运行作业,我理解为什么这是必要的。
但在我们的用例中,我们的互连速度很慢,因此我们几乎不可能在多个节点上运行作业。混合模式迫使我跟踪每个容器中内置的每个 MPI 版本,这些容器可能曾经用于确保主机 O/S 上提供正确的 MPI。我首先使用容器的全部原因是为了避免不得不处理这种版本依赖的麻烦。
我的问题: 如果我对 MPI 应用程序只能在单个物理节点内执行的限制感到满意,我有没有办法在不依赖于主机 O/S 上安装任何东西的 Singularity 容器中构建 MPI 应用程序?
【问题讨论】:
-
如果您使用 SLURM,另一种方法是直接启动(又名
srun)而不是mpirun。 -
或者你可以考虑在容器内运行
mpirun。 -
谢谢@GillesGouaillardet,我会研究一下 srun——我以前没用过这个。就像我对共享内存或串行作业所做的那样,只是做一个简单的奇点运行,但在容器中使用 mpirun 是行不通的。我收到以下错误:HYDU_create_process (utils/launch/launch.c:75): execvp error on file srun (No such file or directory)
-
啊,所以也许我有 SLURM 问题?如果我直接登录到一个计算节点并执行奇异运行……那行得通。但是,如果我将相同的行放在脚本中并通过 sbatch 执行它,我会收到上面的错误。所以也许我真的在这里寻求 SLURM 的帮助。
-
请注意,在 SLURM 脚本中,我检查了路径,甚至完成了“哪个 srun”,并且看起来还不错。因此,在我执行 mpirun 的环境中,srun 肯定是在路径上。