简介

slurm 调度器是专享集群(EHPC 集群)的调度系统,其是面向 Linux 和 Unix 类似内核的免费和开源工作调度程序,广泛应用于超级计算机和计算机集群。

基本概念

  • 批处理作业 采用 sbatch 命令提交,最常用方式。
    对于批处理作业(提交后立即返回该命令行终端,用户可进行其它操作)使用 sbatch 命令提交作业脚本,作业被调度运行后,在所分配的首个节点上执行作业脚本。在作业脚本中也可使用 srun 命令加载作业任务。提交时采用的命令行终端终止,也不影响作业运行。

  • 交互式作业提交 采用 srun 命令提交。
    资源分配与任务加载两步均通过 srun 命令进行:当登录 shell 并执行 srun 命令时,srun 首先向系统提交作业请求并等待资源分配,然后在所分配的节点上加载作业任务。采用该模式,用户在该终端需等待任务结束才能继续其它操作,在作业结束前,如果提交时的命令行终端断开,则任务终止。一般用于短时间小作业测试。

  • 实时分配模式作业 采用 salloc 命令提交。
    分配作业模式类似于交互式作业模式和批处理作业模式的融合。用户需指定所需要的资源条件,向资源管理器提出作业的资源分配请求。提交后,作业处于排队,当用户请求资源被满足时,将在用户提交作业的节点上执行用户所指定的命令,指定的命令执行结束后,运行结束,用户申请的资源被释放。在作业结束前,如果提交时的命令行终端断开,则任务终止。典型用途是分配资源并启动一个 shell,然后在这个 shell 中利用 srun 运行并行作业。
    salloc 后面如果没有跟定相应的脚本或可执行文件,则默认选择 /bin/sh,用户获得了一个合适环境变量的 shell 环境。

salloc 和 sbatch 最主要的区别是 salloc 命令资源请求被满足时,直接在提交作业的节点执行相应任务,而 sbatch 则当资源请求被满足时,在分配的第一个节点上执行相应任务。

常用术语

  • 集群(Cluster):slurm 一般以集群的方式提供服务,这样可以提供更高的计算能力,一个完整的集群包含以下组件:网络,存储,计算服务。

  • 队列(Partition):队列、分区。作业需在特定队列中运行,一般不同队列允许的资源不一样,比如单作业核数等。

  • 节点(Node):计算节点主要是作业运行的节点。

  • 作业(Job):指计算的任务,作业不直接分配到节点,而是被分配到队列中执行,如果一个队列中所有的 CPU 都被占用,作业将进行排队,如果未设置作业优先级,则按提交时间依次排队,直到资源达到作业的要求才会执行:即如果队列中有 2 个 CPU 空闲,作业执行需要 4 个 cpu,则作业不会执行,直到空闲 CPU 达到 4 个作业才会被执行。需要强调的是 slurm 中作业一般都是独占 cpu,即 1 个 CPU 只能被调度一次,在作业完成之前,其他作业不会被再次调度到这个 CPU 上,这样才能保证 CPU 不会发生抢占,达到最大效率,这和一般场景下系统中的进程 CPU 是共享的情况不一样,这也是调度器的核心所在。

  • 任务数(Tasks):单个作业或作业步可有多个任务,一般一个任务需一个 CPU 核,可理解为所需的 CPU 核数。

  • CPU 核(Core):单颗 CPU 可以具有多颗 CPU 核。

  • CPU 插槽(Socket):CPU 插槽,可以简单理解为 CPU。