gpt4 book ai didi

r - Slurm:使用来自多个节点的核心进行 R 并行化

转载 作者:行者123 更新时间:2023-12-05 05:12:07 25 4
gpt4 key购买 nike

我想使用 Slurm 调度程序在 HPC 上并行化 R 脚本。

SLURM 配置有 SelectType: CR_Core_Memory

每个计算节点有 16 个核心(32 个线程)。

我使用 clustermq 通过以下配置将 R 脚本传递给 SLURM作为 Slurm 的接口(interface)。

#!/bin/sh
#SBATCH --job-name={{ job_name }}
#SBATCH --partition=normal
#SBATCH --output={{ log_file | /dev/null }} # you can add .%a for array index
#SBATCH --error={{ log_file | /dev/null }}
#SBATCH --mem-per-cpu={{ memory | 2048 }}
#SBATCH --cpus-per-task={{ n_cpus }}
#SBATCH --array=1-{{ n_jobs }}
#SBATCH --ntasks={{ n_tasks }}
#SBATCH --nodes={{ n_nodes }}

#ulimit -v $(( 1024 * {{ memory | 4096 }} ))
R --no-save --no-restore -e 'clustermq:::worker("{{ master }}")'

在 R 脚本中,我使用 30 个内核进行“多核”并行化。我想使用来自多个节点的内核来满足 30 个 CPU 的要求,即 16 个内核来自节点 1,14 个内核来自节点 2。

我尝试使用 n_tasks = 2cpus-per-task=16。有了这个,作业被分配给两个节点。但是,只有一个节点在进行计算(在 16 个核心上)。第二个节点被分配给作业但什么也不做。

this question srun 用于在具有 foreach 和 Slurm ID 的节点之间拆分并行性。我既不使用 srun 也不使用 foreach。有没有办法通过 SBATCHmulticore 并行实现我想要的?

(我知道我可以使用 SelectType=CR_CPU_Memory 并且每个节点有 32 个线程可用。但是,问题是通常如何使用来自多个节点的内核/线程来扩展并行性)。

最佳答案

我的评论总结:

答案是您不能这样做,因为您的任务是在单个 R 进程中使用一堆 CPU。您要求单个 R 进程在比物理机器更多的 CPU 上并行执行任务。您不能跨多个节点拆分单个 R 进程。这些节点不共享内存,因此您不能组合来自不同节点的 CPU,至少不能使用典型的集群架构。如果您有像 DCOS 这样的分布式操作系统,这是可能的。

对于您的情况,解决方案是您需要将您的工作拆分到那些 R 进程之外。运行 2(或 3,或 4)个单独的 R 进程,每个进程在其自己的节点上,然后将每个 R 进程限制为您的机器拥有的最大 CPU 数量。

关于r - Slurm:使用来自多个节点的核心进行 R 并行化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54905099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com