我想问是否可以在单个 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。有办法做到这一点吗?
提前感谢任何人的帮助!
您可以在单个 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 &&
老实说,这并不完全是你想要的,我认为它会起作用。