srun(或mpirun)如何同步不同集群节点上的执行环境?

How does srun (or mpirun) sync execution environments on different cluster nodes?

这道题用一个例子就很容易解释了。我正在 运行 宁 myscript.py 虚拟 Python-MPI 脚本,其内容仅在两行之后。

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

默认情况下,MPI 集群节点可见的 Python 可执行文件是 /usr/bin/python。我在主目录中安装了另一个 Python 版本,可以通过 运行ning 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同步?

[更新] 这里有一个相关问题:

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