SLURM 节点、任务、核心和 CPU

SLURM nodes, tasks, cores, and cpus

有人能说清楚这些东西到底是什么吗?据我所知,节点是集群内的计算点,本质上是一台计算机。任务是可以在单个节点或多个节点上执行的进程。核心基本上是您希望在单个节点上分配多少 CPU 来执行分配给 CPU 的任务。这个对吗?我是不是混淆了什么?

这些术语在不同的上下文中可能有不同的含义,但如果我们坚持使用 Slurm 上下文:

  • A​​ (compute) node 是较大节点集(集群)的计算机部分。除了计算节点,集群还包括一个或多个登录节点,文件服务器节点,管理节点,等等。计算节点提供处理器、易失性内存 (RAM)、永久磁盘 space(例如 SSD)、加速器(例如 GPU)等资源

  • A​​ core 是处理器中执行计算的部分。一个处理器包括多个内核,以及一个内存控制器、一个总线控制器和可能的许多其他组件。 Slurm 上下文中的处理器被称为 socket,它实际上是主板上承载处理器的插槽的名称。一个核心可以有一个或两个 硬件线程 。这是一种技术,可以使操作系统感知到的内核数量几乎翻倍,同时仅将部分核心组件翻倍——通常是与内存和 I/O 相关的组件,而不是计算组件。 HPC 中经常禁用硬件多线程。

  • a CPU 在一般上下文中是指处理器,但在 Slurm 上下文中,CPU 是消耗品节点提供的资源。根据 Slurm 配置,它可以指套接字、核心或硬件线程。

Slurm 的作用是将这些资源与工作匹配。一项作业包含一个或多个(顺序)步骤,每个步骤有一个或多个(并行)任务。任务是 运行 程序的一个实例,即在一个进程中,可能与 子进程 软件线程 .

根据每个任务需要多少核心,可能会在多个节点上分派多个任务。任务所需的核心数取决于 运行 程序实例中子进程或软件线程的数量。这个想法是将每个硬件线程映射到一个核心,并确保每个任务都在同一节点上分配了所有分配的核心。