首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SBATCH中的GPU分配

SBATCH中的GPU分配
EN

Stack Overflow用户
提问于 2019-07-11 14:32:04
回答 1查看 845关注 0票数 2

我可以访问一个大型GPU集群(20+节点,每个节点8个GPU ),并且我希望在一个批内在n GPU上多次启动一个任务(每个GPU 1次,n >8次),而不使用--exclusive标志预订完整的节点。

我设法预先分配了资源(见下文),但我在工作中多次努力启动这项任务。具体来说,我的日志没有显示CUDA_VISIBLE_DEVICES变量的值。

我知道如何使用--nodes--gres标志在完全预订的节点上执行此操作。在这种情况下,我对每个--nodes=1 --gres=gpu:1都使用srun。然而,这个解决方案不适用于目前的问题,工作无限期地挂起。

在下面的MWE中,我有一个工作要求16个gpus (--ntasks--gpus-per-task)。这些作业由28个任务组成,这些任务是通过srun命令启动的。

代码语言:javascript
复制
#!/usr/bin/env bash
#SBATCH --job-name=somename
#SBATCH --partition=gpu
#SBATCH --nodes=1-10
#SBATCH --ntasks=16
#SBATCH --gpus-per-task=1

for i in {1..28}
do
        srun echo $(hostname) $CUDA_VISIBLE_DEVICES &
done

wait

这个脚本的输出应该如下所示:

代码语言:javascript
复制
nodeA 1
nodeR 2
...

然而,这是我得到的:

代码语言:javascript
复制
nodeA
nodeR
...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-26 14:14:21

当你写

代码语言:javascript
复制
srun echo $(hostname) $CUDA_VISIBLE_DEVICES &

$CUDA_VISIBLE_DEVICES变量的扩展将在分配的主节点(脚本运行的位置)上执行,而不是在srun所针对的节点上执行。您应该避开$

代码语言:javascript
复制
srun echo $(hostname) \$CUDA_VISIBLE_DEVICES &

顺便说一下,--gpus-per-task=出现在19.05版本的sbatch手册中。当您将它与前面的选项一起使用时,我不知道它是如何进行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56991634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档