SLURM 上的内核如何分配与 Snakemake 的内存和线程分配相关?

How are cores on SLURM allocated in relation to memory and thread allocation with Snakemake?

我无法理解分配给 snakejob 的线程和资源如何转换为我的 slurm 分区上每个 snakejob 分配的内核数。我在运行我的 snakefile 的 .sh 上将 --cores 标志设置为 46, 然而 5 个 snakejobs 中的每一个都同时 运行,每个都提供了 16 个核心。特定于规则的线程编号是否会取代 snakemake 的 --cores 标志?我认为这是我所有工作一起必须使用的最大内核...

另外,内核是根据内存分配的吗?它是否随着指定线程数的增加而扩展?例如,我的作业分配了 10GB 的内存,但只有一个线程。根据我的 SLURM 输出,每个作业都被分配了两个核心。当我指定 8 个线程和 10GB 内存时,我得到的是 16 个内核。这是否与我为工作提供的内存量有关,或者仅仅是为了内存目的为每个线程提供了一个额外的核心?任何帮助将不胜感激。

这是 snake 作业输出之一:

    Building DAG of jobs...
Using shell: /usr/bin/bash
Provided cores: 16
Rules claiming more threads will be scaled down.
Job counts:
        count   jobs
        1       index_genome
        1

[Tue Feb  2 10:53:59 2021]
rule index_genome:
    input: /mypath/genome/genomex.fna
    output: /mypath/genome/genomex.fna.ann
    jobid: 0
    wildcards: bwa_extension=.ann
    threads: 8
    resources: mem_mb=10000

这是我的 bash 命令:

module load snakemake/5.6.0
    snakemake -s snake_make_x --cluster-config cluster.yaml --default-resources --cores 48 --jobs 47 \
    --cluster "sbatch -n {threads} -M {cluster.cluster} -A {cluster.account} -p {cluster.partition}" \
    --latency-wait 10

当您将 slurm 与 snakemake 一起使用时,不幸的是 --cores 标志不再表示 cores,它表示 jobs .. 所以当你设置 --cores 48 时,你实际上是在告诉 snakemake 最多使用 48 个并行作业。

相关问题: Behaviour of "--cores" when using Snakemake with the slurm profile