因此,我绝不是系统管理员,但我需要使用现有的 SLURM 安装来启动大量作业(大约 5000 个)。
该集群由 1 个节点组成,有 10 个 GPU(每个 GPU 有 8GB 内存)和 56 个 CPU。
每个作业都是我运行的批处理脚本sbatch <file>
,然后我用sview
它来查看发生了什么
这些作业需要在 GPU 上运行,但它们对 GPU 内存的要求相当低(大约 2GB),所以我想我可以在一个 GPU 上安装其中的 3 个作业。
我一直在绞尽脑汁地试图找到一种方法,让 3 个作业同时在同一个 GPU 上运行,但文档太大了,让我感觉完全迷失了。
我不确定我是否正确使用了这个。
工作看起来像这样:
#!/bin/bash
#SBATCH --time=00:10:00
#SBATCH -p n1
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=[nb_cpu]
#SBATCH --mem-per-gpu=1
#SBATCH --job-name=[job_name]
#SBATCH --mail-user=[list_mail]
#SBATCH --mail-type=NONE
#SBATCH --gid=dl
#SBATCH --output=[folder]/%x.log
echo "Current GPU: $CUDA_VISIBLE_DEVICES"
# a bunch of initialization
module load opencv/4.5.4 deeplearning
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/raid1/CLUSTER/LIB/custom_libs/
export OPENCV_LOG_LEVEL=DEBUG
export OPENCV_VIDEOIO_DEBUG=1
run_dl --nn-dir=/home/dl/networks --root-dir=[root_dir] [file]
if [ $? -eq 0 ]
then
mkdir -p [folder]/done
echo [id] > [folder]/done/[job_name]
else
mkdir -p [folder]/fail
echo [id] > [folder]/fail/[job_name]
fi
这些作业由脚本生成,并且可以根据需要轻松修改。我使用的方向是否正确sbatch
?我很不知所措。
答案1
您应该使用“分片”GRES (gres:shard) 而不是 22.05 或更高版本中提供的 gres:GPU。
https://slurm.schedmd.com/gres.html#Sharding
它允许不同的作业共享 GPU——就像超额认购的核心和 RAM 资源一样。传统的 gres:gpu 会专门为作业分配 GPU,无论使用多少内存。