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
参数控制要导出的变量。
这道题用一个例子就很容易解释了。我正在 运行 宁 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
参数控制要导出的变量。