memory-management - 作业分配的核心数量是我在 SLURM 上请求的两倍

标签 memory-management cpu-usage hpc slurm snakemake

我试图理解为什么我请求的核心数量的两倍被分配给我的批处理作业。 据我所知,我的分区有 106 个线程:

    [.... snake_make]$ sinfo -p mypartition -o %z
S:C:T
2:26:2

但是对于我的snakemake来说,sbatch设置是这样的:

module load snakemake/5.6.0 snakemake -s snake_make_tetragonula --cluster-config cluster.yaml --jobs 70
--cluster "sbatch -n 4 -M {cluster.cluster} -A {cluster.account} -p {cluster.partition}"
--latency-wait 10

每个作业都分配了 8 个核心,而不是 4 个。当我运行 squeue 时,我发现它一次最多只能运行 12 个作业,这表明尽管我指定了它,但每个作业都使用 8 个核心4 个线程。另外,当我在 XDMoD 上查看作业使用情况时,我发现作业中只有一半的 cpu 被使用。如何才能使用所需数量的 cpu,而不是像当前正在运行的那样使数量加倍?我也尝试过

--ntasks=1 --cpus-per-task=4

仍然翻倍到 8。谢谢。

最佳答案

Slurm 只能分配核心,不能分配线程。因此,采用这样的配置:

S:C:T
2:26:2

两个线程被分配给每个正在请求的核心的作业。两个硬件线程不能分配给不同的作业。

你可以尝试一下

--ntasks=1 --cpus-per-task=2 --threads-per-core=2

但是,如果您的计算是 CPU 密集型的,这可能会使您的作业变慢。

关于memory-management - 作业分配的核心数量是我在 SLURM 上请求的两倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66037136/

相关文章:

docker - 为什么 kubernetes minikube 会限制全局 CPU 使用率?

c++ - 在 C++ 中查找系统的 CPU 利用率

c - 在 C 中单独获取所有可用 CPU 的 CPU 利用率

c - 并行二分查找的性能比串行版本差

c - 为什么我不应该在 malloc() 未分配的变量上调用 free()?

c++ - 为什么释放很慢?

用于 HPC 的 C++ std::vector?

machine-learning - 运行斯坦福 CoreNLP 时,某些 HPC 集群是否只缓存一个结果?

google-chrome - xhr blob responseType 的内存使用情况(Chrome)

memory-management - 什么是Dyon的内存模型?