![检测 pdsh 会话](https://linux22.com/image/215913/%E6%A3%80%E6%B5%8B%20pdsh%20%E4%BC%9A%E8%AF%9D.png)
在我们的集群上,我们使用 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