在单个 GPU 上对多个作业数组进行 Slurm?

问题描述 投票:0回答:1

我想问是否可以在单个 GPU 上运行多个作业(通过作业数组)(即共享 GPU)。我这样问是因为每个任务只占用 3GB GPU RAM,因此如果我可以在单个 GPU 上运行 8 个 python 脚本是否会更好?

我尝试做类似的事情:

#!/bin/bash

#SBATCH --job-name parallel_finetune  #job name을 다르게 하기 위해서
#SBATCH --nodes=1
#SBATCH --nodelist=node3 #used node4
#SBATCH -t 48:00:00 # Time for running job #길게 10일넘게 잡음
#SBATCH -o ./shell_output/output_%A_%a.output
#SBATCH -e ./shell_output/error_%A_%a.error
#SBATCH --ntasks=8
#SBATCH --mem-per-cpu=4GB
#SBATCH --gpus=1
#SBATCH --cpus-per-task=2
#SBATCH --array=0-7

(我没有使用

--gpus-per-task
)我认为,由于指定了
--gpu
而不是
--gpus-per-task
,贫民窟将分配单独的CPU(如
--cpus-per-task
所指定),但共享单个GPU。然而,情况并非如此,每个任务都有一个 GPU。有办法做到这一点吗?

提前感谢任何人的帮助!

jobs slurm job-scheduling
1个回答
0
投票

您可以在单个 shell 文件中运行多个任务。 例如,在您的设置中,

将 train_slurm.sh 文件写入:(我删除了“#SBATCH --mem-per-cpu=4GB”)

#!/bin/bash

#SBATCH --job-name parallel_finetune  #job name을 다르게 하기 위해서
#SBATCH --nodes=1
#SBATCH --nodelist=node3 #used node4
#SBATCH -t 48:00:00 # Time for running job #길게 10일넘게 잡음
#SBATCH -o ./shell_output/output_%A_%a.output
#SBATCH -e ./shell_output/error_%A_%a.error
#SBATCH --ntasks=8
#SBATCH --gpus=1
#SBATCH --cpus-per-task=2
#SBATCH --array=0-7

sh train.sh | tee -a mylog

并将train.sh文件编写为:

python train1.py &&
python train2.py &&
...
python train8.py &&

老实说,这并不完全是你想要的,我认为它会起作用。

© www.soinside.com 2019 - 2024. All rights reserved.