目录
一、概述
Slurm 支持定义和调度任意通用 RESources 的功能 (GRES)。为特定 GRES 类型启用了其他内置功能, 包括图形处理单元 (GPU)、CUDA 多进程服务 (MPS) 设备,并通过可扩展的插件机制进行分片。
二、配置
默认情况下,群集的配置中未启用任何 GRES。 您必须在 slurm.conf 配置文件中明确指定要管理的 GRES。的配置参数 兴趣是 GresTypes 和 Gres。
有关详细信息,请参见 slurm.conf 手册页中的 GresTypes 和 Gres。
请注意,每个节点的 GRES 规范以相同的方式工作 作为其他资源管理。发现资源较少的节点 than configured 将置于 DRAIN 状态。
示例 slurm.conf 文件的片段:
# Configure four GPUs (with MPS), plus bandwidth
GresTypes=gpu,mps,bandwidth
NodeName=tux[0-7] Gres=gpu:tesla:2,gpu:kepler:2,mps:400,bandwidth:lustre:no_consume:4G
每个具有通用资源的计算节点通常都包含一个 gres.conf 文件,该文件描述节点上可用的资源、它们的计数、 应与这些资源一起使用的关联设备文件和内核。
在某些情况下,您可能希望在节点上定义通用资源 而未指定该 GRES 的数量。例如,文件系统类型 当作业在该节点上运行时,节点的值不会减少。 可以使用 no_consume 标志允许用户请求 GRES 没有定义的计数,该计数在请求时使用。
要查看可用的 gres.conf 配置参数,请参见 gres.conf 手册页。
三、运行作业
除非有明确规定,否则不会为作业分配任何通用资源 在作业提交时使用以下选项请求:
--gres 每个节点所需的通用资源
--gpus 每个作业所需的 GPU
--gpus-per-node 每个节点需要的 GPU数。等效于 GPU 的 --gres 选项。
--gpus-per-socket 每个线程需要的 GPU数据。要求作业指定任务套接字
--gpus-per-task 每个任务需要的 GPU数。要求作业指定任务计数。
salloc、sbatch 和 srun 命令支持所有这些选项。 请注意,所有 --gpu* 选项仅受 Slurm 的支持 选择/cons_tres插件。 在未配置 select/cons_tres 插件时请求这些选项的作业将被拒绝。 --gres 选项需要一个参数来指定哪些通用资源 是必需的,以及有多少资源使用 name[:type:count] 形式,而所有 --gpu* 选项都需要 [type]:count 形式的参数。 名称与 由 GresTypes 和 Gres 配置参数指定。type 标识该通用资源的特定类型(例如 GPU的特定型号)。count 指定需要多少资源,并具有默认值 值为 1。例如:
sbatch --gres=gpu:kepler:2 ...
在工作中对类型化泛型资源与非类型化泛型资源的请求必须一致 。例如,如果您使用 sbatch 请求 --gres=gpu:2,则无法使用 srun 请求 --gres=gpu:tesla:2 来创建作业步骤。反之亦然, 如果请求类型化 GPU 来创建作业分配,则应请求 用于创建作业步骤的相同类型的 GPU。
此外,还提供了一些其他资源需求规格 专门针对 GPU 和有关这些选项的详细说明是 在作业提交命令的手册页中可用。 至于 --gpu* 选项,这些选项只有 Slurm 的 选择/cons_tres插件。
--cpus-per-gpu 每个 GPU 分配的 CPU 数
--gpu-bind 定义任务如何绑定到 GPU
--gpu-freq 指定 GPU 频率和/或 GPU 内存频率
--mem-per-gpu 为每个 GPU 分配的内存
将根据需要为作业分配特定的通用资源以满足 请求。如果作业挂起,这些资源将不可用 供其他作业使用。
作业步骤可以从分配给 将 --gres 选项与 srun 命令结合使用作业,如所述 以上。默认情况下,作业步骤将分配所有通用资源 工作已请求的,但当 工作是排他性的。如果需要,作业步骤可以明确指定一个 与作业不同的通用资源计数。 此设计选择基于一个场景,即每个作业执行许多 作业步骤。如果作业步骤被授予对所有通用资源的访问权限,则由 默认情况下,某些作业步骤需要明确指定零通用资源 计数,我们认为这更令人困惑。可以分配作业步骤 特定的通用资源,而这些资源将不对其他人可用 作业步骤。下面显示了一个简单的示例。
#!/bin/bash
#
# gres_test.bash
# Submit as follows:
# sbatch --gres=gpu:4 -n4 -N1-1 gres_test.bash
#
srun --gres=gpu:2 -n2 --exclusive show_device.sh &
srun --gres=gpu:1 -n1 --exclusive show_device.sh &
srun --gres=gpu:1 -n1 --exclusive show_device.sh &
wait
四、自动检测
如果 AutoDetect=nvml、AutoDetect=rsmi、AutoDetect=nrt、 或 AutoDetect=oneapi 在 gres.conf 中设置,配置详细信息 将自动为任何系统检测到的 GPU 填充。这将删除 需要在 gres.conf 中显式配置 GPU,尽管 Gres= 行 仍然需要 slurm.conf 才能告诉 slurmctld 预期有多少 GRE。 请注意,AutoDetect=nvml、AutoDetect=rsmi 和 AutoDetect=oneapi 需