【问题标题】:How does srun (or mpirun) sync execution environments on different cluster nodes?srun(或 mpirun)如何在不同的集群节点上同步执行环境?
【发布时间】:2018-12-29 08:48:15
【问题描述】:

这个问题很容易用一个例子来解释。我正在运行一个myscript.py dummy Python-MPI 脚本,其内容就在两行之后。

from subprocess import call
call(['which', 'python'])

默认情况下,MPI 集群节点可见的 Python 可执行文件是 /usr/bin/python。我在主目录中安装了另一个 Python 版本,可以通过运行 source myhome/python35tf/bin/activate 来激活它。

现在我登录到集群中的主节点(N-0)并在 shell 中运行以下两个命令。

source myhome/python35tf/bin/activate
srun -N 4 python myscript.py

这会产生以下输出。

/path-to-users/myhome/python35tf/bin/python
/path-to-users/myhome/python35tf/bin/python
/path-to-users/myhome/python35tf/bin/python
/path-to-users/myhome/python35tf/bin/python

至少有一个输出指向python35tf Python 可执行文件是有意义的,因为我在 N-0 节点中激活了它。但是为什么所有其他节点也在他们的环境中看到相同的 Python 可执行文件?他们不应该打印/usr/bin/python吗? srun如何保证所有节点的执行环境与N-0的执行环境同步?

[更新] 这里有一个相关的问题:How does OpenMPI Secure SHell into all the compute nodes from the master node?

【问题讨论】:

  • 试试srun env | grep ^PATHPATH 导出了吗?如果是,这就解释了为什么不使用usr/bin/python
  • @GillesGouaillardet 那么您是否建议 srun 命令在内部对每个工作节点进行 ssh 并在执行工作负载之前将 PATH 设置为与主节点匹配?为了证实这个理论,我尝试运行srun -N 2 printenv 并观察到一些环境变量是同步的,但不是全部。是否有任何 OpenMPI 参考页面描述了它是如何工作的? (查看复制的内容和遗漏的内容)
  • 首先,srunSLURM 命令,不是 Open MPI 命令。在内部,srun 不是基于SSH,但它会在fork&exec'ing 二进制文件之前传播一些环境变量。 FWIW,在我的环境中,PATHsrun 传播。

标签: python mpi openmpi slurm


【解决方案1】:

srun 命令默认将所有用户环境传播到计算节点。您可以使用--export 参数控制要导出的变量。

【讨论】:

    猜你喜欢
    • 2019-08-13
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 2017-01-06
    • 2017-03-17
    • 1970-01-01
    相关资源
    最近更新 更多