我有一个
.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
如何解决这个问题?
它对我有用。
#!/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
,最后一行是将日志移动到文件夹(当前时间)。通过这种方式,您可以运行多个作业,并且结果位于单独的文件夹中。
更简洁的方法是在 python 代码中使用 python 的日志库。不要使用打印语句,而是使用logging.info()或logging.debug()或任何消息的性质。