我有一个功能性的snakemake配置文件,用于使用SLURM在HPC上运行作业。如果我在本地运行此脚本,作业将并行提交,并且一切都会按预期进行。
但是,这个管道需要一段时间,而且我必须通过 VPN 进入受保护的环境才能处理这些数据,因此我不能让我的终端永远保持打开状态,因为 VPN 会超时。
所以我想使用一个 .sbatch 脚本来帮我处理这个问题。至少,类似:
#!/bin/bash
#SBATCH --account=<acct>
#SBATCH --partition=<part>
#SBATCH --time=48:00:00
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --output=./logs/log.out
#SBATCH --error=./logs/log.out
# Move to snakemake directory.
cd path/to/workdir
# Make logs directory.
mkdir -p logs
# Load environment.
ml miniconda3/latest
module use ~/MyModules
source /path/to/miniconda/etc/profile.d/conda.sh
conda activate snakemake
# Run preprocessing pipeline.
snakemake --slurm --profile profile/cluster/
但是,当我这样做时,我的作业失败并显示错误消息:
srun: fatal: SLURM_MEM_PER_CPU, SLURM_MEM_PER_GPU, and SLURM_MEM_PER_NODE are mutually exclusive.
当我直接从终端启动 Snakemake 时,不会发生此错误,因此错误不应出现在配置文件本身中。
如何使用 sbatch 脚本来托管其余的 slurm 作业提交?
虽然这不是你要问的,但我仍然认为这可能对你有帮助。 如果唯一的问题是 ssh 会话终止,那么我建议使用
screen
在新的终端会话下启动工作流程。
首先,连接到您的远程服务器。
打开新会话
screen -S your_chosen_name
激活环境,启动
conda activate env_name;
snakemake -j 48 ....
现在,如果您的 ssh 会话将被终止或者您自己关闭它,则此任务将在另一个终端会话下运行。要重新连接到它:
screen -r your_chosen_name
看这里!!!
显然只需将 '--mem=2G' 分配给 sbatch 作业就可以解决问题,已经测试过!!!