如何将当前时间的目录作为SLURM日志路径的一部分

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

我有一个

.slurm
文件,可以在Linux GPU集群中运行。该文件如下:

#!/bin/bash
#SBATCH -o ./myrepo/output.log
#SBATCH -J jobname
#SBATCH --gres=gpu:V100:1
#SBATCH -c 5
source /home/LAB/anaconda3/etc/profile.d/conda.sh
conda activate cuda9.1
CUDA_VISIBLE_DEVICES=0 python train.py

现在我想在日志路径中添加一个文件夹。也许我会是这样的:

#!/bin/bash
#SBATCH -o ./myrepo/**currenttime**/output.log
#SBATCH -J jobname
#SBATCH --gres=gpu:V100:1
#SBATCH -c 5
source /home/LAB/anaconda3/etc/profile.d/conda.sh
conda activate cuda9.1
CUDA_VISIBLE_DEVICES=0 python train.py

我已经尝试过:

#!/bin/bash
time=`date +%Y%m%d-%H%M%S`
#SBATCH -o ./myrepo/${time}/output.log
#SBATCH -J jobname
#SBATCH --gres=gpu:V100:1
#SBATCH -c 5
source /home/LAB/anaconda3/etc/profile.d/conda.sh
conda activate cuda9.1
CUDA_VISIBLE_DEVICES=0 python train.py

但是失败了。看来

#SBATCH
应该在
#!/bin/bash
旁边。

下面的一项成功了,但有了它我就不能同时运行多项工作。

#!/bin/bash
#SBATCH -o ./myrepo/output.log
#SBATCH -J jobname
#SBATCH --gres=gpu:V100:1
#SBATCH -c 5
source /home/LAB/anaconda3/etc/profile.d/conda.sh
conda activate cuda9.1
time=`date +%Y%m%d-%H%M%S`
CUDA_VISIBLE_DEVICES=0 python train.py
cp ./myrepo/output.log ./myrepo/${time}/output.log

如何解决这个问题?

linux bash sh slurm sbatch
2个回答
2
投票

它对我有用。

#!/bin/bash
#SBATCH -o ./myrepo/output_%j.log
#SBATCH -J jobname
#SBATCH --gres=gpu:V100:1
#SBATCH -c 5
time=`date +%Y%m%d-%H%M%S`
mkdir ./myrepo/${time}
source /home/LAB/anaconda3/etc/profile.d/conda.sh
conda activate cuda9.1
CUDA_VISIBLE_DEVICES=0 python train.py
mv ./myrepo/output_$SLURM_JOB_ID.log ./myrepo/${time}/output.log

#SBATCH -o ./myrepo/output_%j.log
表示你的输出文件以
output_jobid.log
命名,在SBATCH中你可以使用
%j
来替换jobid。但在 bash 中,你必须使用
$SLURM_JOB_ID
,最后一行是将日志移动到文件夹(当前时间)。通过这种方式,您可以运行多个作业,并且结果位于单独的文件夹中。


0
投票

更简洁的方法是在 python 代码中使用 python 的日志库。不要使用打印语句,而是使用logging.info()或logging.debug()或任何消息的性质。

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