shell Snakemake和GROMACS之间的冲突?

dwbf0jvd  于 2023-10-23  发布在  Shell
关注(0)|答案(2)|浏览(130)

我试图尽可能地简化我的问题,但仍然得到错误。
整个想法是我想执行(在一个更复杂的工作流中)命令:gmx mdrun -nt 12 -deffnm emin -cpi在集群上。为此,我有一个与GROMACS和Snakemake康达环境。
在传统的方法中,我有jobscript(traditional_job.sh):

#!/bin/bash
#SBATCH --partition=uds-hub 
#SBATCH --nodes=1
#SBATCH --cpus-per-task=12 
#SBATCH --mem=5000
#SBATCH --time=15:00
#SBATCH --job-name=reproduce_error
#SBATCH --output=reproduce_error.o
#SBATCH --error=reproduce_error.e

gmx mdrun -nt 12 -deffnm emin -cpi

而且在sbatch traditional_job.sh之后一切都按预期工作。但是,如果我尝试使用Snakemake,问题就开始了。
我的Snakefile是:

rule gmx:
    input:
        tpr = "emin.tpr"
    output:
        out = 'emin.gro'
    shell:
        '''
           gmx mdrun -nt 12 -deffnm emin -cpi
        '''

我的job.sh

#!/bin/bash
snakemake \
    --jobs 10000 \
    --verbose \
    --debug-dag \
    --latency-wait 50 \
    --cluster-cancel scancel \
    --rerun-incomplete \
    --keep-going \
    --cluster '
        sbatch \
        --partition=uds-hub \
        --nodes=1 \
        --cpus-per-task=12 \
        --mem=5000 \
        --time=15:00 \
        --job-name=reproduce_error \
        --output=reproduce_error.o \
        --error=reproduce_error.e '

./job.sh之后,GROMACS的错误(写在reproduce_error.e上)是:

Program:     gmx mdrun, version 2022.2-conda_forge
Source file: src/gromacs/taskassignment/resourcedivision.cpp (line 220)

Fatal error:
When using GPUs, setting the number of OpenMP threads without specifying the
number of ranks can lead to conflicting demands. Please specify the number of
thread-MPI ranks as well (option -ntmpi).

For more information and tips for troubleshooting, please check the GROMACS
website at http://www.gromacs.org/Documentation/Errors

我观察到在snakemake的输出中写了一个不同的shell(#!/bin/sh)。但老实说,我不知道这是否是问题所在,如果是这样,也不知道如何解决:

Jobscript:
#!/bin/sh
# properties = {"type": "single", "rule": "gmx", "local": false, "input": ["emin.tpr"], "output": ["emin.gro"], "wildcards": {}, "params": {}, "log": [], "threads": 1, "resources": {"mem_mb": 1000, "mem_mib": 954, "disk_mb": 1000, "disk_mib": 954, "tmpdir": "<TBD>"}, "jobid": 0, "cluster": {}}
cd '/home/uds_alma015/GIT/BindFlow/ideas/reproduce error' && /home/uds_alma015/.conda/envs/abfe/bin/python3.9 -m snakemake --snakefile '/home/uds_alma015/GIT/BindFlow/ideas/reproduce error/Snakefile' --target-jobs 'gmx:' --allowed-rules 'gmx' --cores 'all' --attempt 1 --force-use-threads  --resources 'mem_mb=1000' 'mem_mib=954' 'disk_mb=1000' 'disk_mib=954' --wait-for-files '/home/uds_alma015/GIT/BindFlow/ideas/reproduce error/.snakemake/tmp.lfq5jq4u' 'emin.tpr' --force --keep-target-files --keep-remote --max-inventory-time 0 --nocolor --notemp --no-hooks --nolock --ignore-incomplete --rerun-triggers 'software-env' 'params' 'input' 'mtime' 'code' --skip-script-cleanup  --conda-frontend 'mamba' --wrapper-prefix 'https://github.com/snakemake/snakemake-wrappers/raw/' --latency-wait 50 --scheduler 'ilp' --scheduler-solver-path '/home/uds_alma015/.conda/envs/abfe/bin' --default-resources 'mem_mb=max(2*input.size_mb, 1000)' 'disk_mb=max(2*input.size_mb, 1000)' 'tmpdir=system_tmpdir' --mode 2 && touch '/home/uds_alma015/GIT/BindFlow/ideas/reproduce error/.snakemake/tmp.lfq5jq4u/0.jobfinished' || (touch '/home/uds_alma015/GIT/BindFlow/ideas/reproduce error/.snakemake/tmp.lfq5jq4u/0.jobfailed'; exit 1)

P.s. ChatGPT在这个问题上绕圈子:-)

更新

我甚至更孤立的错误。下面的other_job.sh(作为sbatch other_job.sh提交到集群)脚本也给出了相同的错误:

#!/bin/bash
#SBATCH --partition=uds-hub 
#SBATCH --nodes=1
#SBATCH --cpus-per-task=12 
#SBATCH --mem=5000
#SBATCH --time=15:00
#SBATCH --job-name=reproduce_error
#SBATCH --output=reproduce_error.o
#SBATCH --error=reproduce_error.e

/home/uds_alma015/.conda/envs/abfe/bin/python3.9 -m snakemake --snakefile '/home/uds_alma015/GIT/BindFlow/ideas/reproduce_error/Snakefile' --target-jobs 'gmx:' --allowed-rules 'gmx' --cores 'all' --attempt 1 --force-use-threads  --resources 'mem_mb=1000' 'mem_mib=954' 'disk_mb=1000' 'disk_mib=954' --wait-for-files '/home/uds_alma015/GIT/BindFlow/ideas/reproduce_error/.snakemake/tmp.mqan6qbp' 'emin.tpr' --force --keep-target-files --keep-remote --max-inventory-time 0 --nocolor --notemp --no-hooks --nolock --ignore-incomplete --rerun-triggers 'mtime' 'software-env' 'params' 'code' 'input' --skip-script-cleanup  --conda-frontend 'mamba' --wrapper-prefix 'https://github.com/snakemake/snakemake-wrappers/raw/' --latency-wait 50 --scheduler 'ilp' --scheduler-solver-path '/home/uds_alma015/.conda/envs/abfe/bin' --default-resources 'mem_mb=max(2*input.size_mb, 1000)' 'disk_mb=max(2*input.size_mb, 1000)' 'tmpdir=system_tmpdir' --mode 2

这是命令build by snakemake。看起来这个命令并不与SBATCH的定义交互(在某种程度上)。但还是不确定。

uklbhaso

uklbhaso1#

我有一个类似的问题与snakemake,但与不同的程序。最后,我不得不专门取消设置一些环境变量,因为snakemake为每个示例化的shell设置了它们。特别是OMP_NUM_THREADS是我的问题的根本原因。
确保比较snakemake和正则脚本中设置了哪些环境变量,这可能会给您给予以找到罪魁祸首变量。

tf7tbtn2

tf7tbtn22#

我偶然发现了这个线程寻找一个组合的格罗马克和蛇。
首先,snakemake同时支持slurm,参见https://snakemake.readthedocs.io/en/stable/executing/cluster.html。没有必要再写了
--集群...
此外,conda和集群模块之间的分离应该可以工作。我担心gpu和/或mpi绑定的gromac不能很容易地集成到conda中。所以,如果这仍然是一个问题,尝试
snakemake --使用envmodules
注意:蛇是牧羊人的工作。在jobscript中运行snakemake是没有用的,而是snakemake会产生作业(除非localrules指令排除了它)。
我希望这能有所帮助,毕竟这一次。
那么,你是否正在积极开发一个工作流程来支持格罗马克?这将是美妙的看到一个回购!

相关问题