检测 pdsh 会话

检测 pdsh 会话

在我们的集群上,我们使用 LMOD 动态加载特定的预安装模块(如 PyTorch 或其他一些科学包)。最重要的是,我想运行一些代码深速允许优化跨节点运行分布式代码的框架。它在幕后使用pdsh.我遇到的问题是 ssh 会话当然不会加载我已经在主节点中加载的模块 - 但这会导致问题,因为它无法找到一些所需的库,例如 Python。

举个例子:假设我请求一个具有多个节点的交互式 SLURM 作业。在主节点中,我加载模块 PyTorch+Python 和 pdsh

module load PyTorch/1.12.0-foss-2022a-CUDA-11.7.0
module load pdsh/2.34-GCCcore-11.3.0

然后,我可以运行一些 deepspeed 命令,它将向所有节点启动并行 ssh 会话。但是,由于这些是这些节点上的新会话,因此不会加载上面指定的模块。它被建议将这些module load命令添加到 my 中.bashrc,但这意味着它们总是被加载,这是我可能不想要的。

因此,我正在寻找一种方法来检测会话是否由pdsh.是否pdsh设置了一些我可以在 .bashrc 中使用的变量,以便仅module load在该条件为真时才使用?

答案1

受 didal24 评论的启发,我通过仅当我们 ssh 到主机名以 开头的特定节点时加载模块来解决我的问题gpu

if [[ $(hostname) == gpu* ]]; then
    module load PyTorch/1.12.0-foss-2022a-CUDA-11.7.0;
    module load pdsh/2.34-GCCcore-11.3.0;
fi

相关内容