在我们的集群中,我们使用LMOD动态加载特定的预装模块(比如PyTorch或其他一些科学包)。最重要的是,我想使用DeepSpeed框架运行一些代码,这允许优化运行跨节点的分布式代码。在引擎盖下,它使用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然后,我可以运行一些深度命令,它将对所有节点启动并行ssh会话。但是,因为这些是这些节点上的新会话,所以没有加载上面指定的模块。将这些module load命令添加到我的.bashrc中是非常必要的,但这意味着它们总是被加载的,这可能是我不想要的。
因此,我正在寻找一种方法来检测会话是否由pdsh设置。pdsh是否设置了一些可以在.bashrc中使用的变量,以便只在该条件为真时使用module load?
发布于 2023-01-26 10:39:07
受hostname 24‘S注释的启发,我解决了我的问题,只有当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;
fihttps://unix.stackexchange.com/questions/732511
复制相似问题