在同一 GPU 上运行多个 SLURM 作业

在同一 GPU 上运行多个 SLURM 作业

因此,我绝不是系统管理员,但我需要使用现有的 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,无论使用多少内存。

相关内容