可追踪资源 (TRES)
TRES 是一种可以跟踪使用情况或用于强制执行限制的资源。TRES 是类型和名称的组合。类型是预定义的。 当前的 TRES 类型有:
- BB(突发缓冲区)
- 计费
- CPU
- 能源
- FS(文件系统)
- GRES
- IC(互连)
- 许可证
- 内存(Mem)
- 节点
- 页面
- 虚拟内存(VMem)
计费 TRES 是根据分区的 TRESBillingWeights 计算得出的。尽管分区上的 TRES 权重可以定义为双精度数,但作业的计费 TRES 值以整数形式存储。在计算作业的公平份额时情况并非如此,此时该值被视为双精度数。
有效的 'FS' TRES 是 'disk'(本地磁盘)和 'lustre'。这些主要用于报告使用情况,而不是限制访问。
有效的 'IC' TRES 是 'ofed'。这些主要用于报告使用情况,而不是限制访问。
slurm.conf 设置
- AccountingStorageTRES
用于定义系统上要跟踪的 TRES。默认情况下,计费、CPU、能源、内存、节点、FS/磁盘、页面和虚拟内存会被跟踪。这些默认 TRES 不能被禁用,只能被附加。以下示例:
AccountingStorageTRES=gres/gpu,license/iop1
将跟踪计费、CPU、能源、内存、节点、FS/磁盘、页面和虚拟内存,以及一个名为 gpu 的 GRES,以及一个名为 iop1 的许可证。每当这些资源在集群上被使用时,它们都会被记录。TRES 在 slurmctld 启动时会自动在数据库中设置。
需要关联名称的 TRES 是 BB、GRES 和许可证。如上例所示,GRES 和许可证在每个系统上通常是不同的。BB TRES 的名称与所使用的突发缓冲区插件相同。在上面的示例中,我们使用的是 Cray 突发缓冲区插件。
在包含特定 GRES 和子类型时,建议同时包含其通用类型,否则仅请求通用类型将不会被计入。例如,如果我们想要计入 gres/gpu:tesla,我们还应包括 gres/gpu 以在请求中计入 GPU,如 srun --gres=gpu:1。
AccountingStorageTRES=gres/gpu,gres/gpu:tesla
- PriorityWeightTRES
一个以逗号分隔的 TRES 类型和权重的列表,设置每个 TRES 类型对作业优先级的贡献程度。
PriorityWeightTRES=CPU=1000,Mem=2000,GRES/gpu=3000
仅在 PriorityType=priority/multifactor 且 AccountingStorageTRES 配置了每个 TRES 类型时适用。默认值为 0。
计费 TRES 不可用于优先级计算,因为该数字在作业分配资源后才生成——因为该数字可能因不同分区而变化。
- TRESBillingWeights
对于每个分区,此选项用于定义在计算作业使用情况时每种 TRES 类型的计费权重。
计费权重以逗号分隔的 TRES=Weight 对的形式指定。
任何 TRES 类型都可以用于计费。请注意,内存和突发缓冲区的基本单位是兆字节。
默认情况下,TRES 的计费是所有 TRES 类型的总和乘以其相应的计费权重。
资源的加权数量可以通过在计费权重后添加 K、M、G、T 或 P 后缀进行调整。例如,在分配 8GB 的作业上,内存权重为 "mem=.25" 将被计费 2048(8192MB *.25)单位。在同一作业上,内存权重为 "mem=.25G" 将被计费 2(8192MB * (.25/1024))单位。
当作业在配置为:
TRESBillingWeights="CPU=1.0,Mem=0.25G,GRES/gpu=2.0,license/licA=1.5"
的分区上分配 1 个 CPU 和 8 GB 内存时:
(1*1.0) + (8*0.25) + (0*2.0) + (0*1.5) = 3.0
如果配置了 PriorityFlags=MAX_TRES,则可计费的 TRES 计算为节点上各个 TRES 的最大值(例如 CPU、内存、GRES)加上所有全局 TRES 的总和(例如许可证)。使用上面的相同示例,可计费的 TRES 将为:
MAX(1*1.0, 8*0.25, 0*2.0) + (0*1.5) = 2.0
如果配置了 PriorityFlags=MAX_TRES_GRES,则可计费的 TRES 计算为节点上大多数单个 TRES 的最大值(例如 CPU、内存),加上节点 GRES,加上所有全局 TRES 的总和(例如许可证)。使用上面的相同示例,可计费的 TRES 将为:
MAX(1*1.0, 8*0.25) + (0*2.0) + (0*1.5) = 2.0
如果未定义 TRESBillingWeights,则作业将根据分配的 CPU 总数进行计费。
注意:TRESBillingWeights 仅在计算公平份额时使用,并不会直接影响作业优先级,因为它当前未用于作业的大小。如果您希望 TRES 在作业优先级中发挥作用,请参考 PriorityWeightTRES 选项。
注意:与 PriorityWeightTRES 一样,只有在 AccountingStorageTRES 中定义的 TRES 可用于 TRESBillingWeights。
注意:作业可以基于计算出的 TRES 计费值进行限制。有关更多信息,请参见 资源限制 文档。
注意:如果计费 TRES 被定义为权重,则会被忽略。
注意:设置 gres/gpu 也将设置 gres/gpumem 和 gres/gpuutil。当未设置 gres/gpu 时,可以单独设置 gres/gpumem 和 gres/gpuutil。
sacct
sacct 可以通过在 --format 选项中添加 "tres" 来查看每个作业的 TRES。
sacctmgr
sacctmgr 用于查看系统中可用的各种 TRES。sacctmgr show tres 将执行此操作。
sreport
sreport 报告不同的 TRES。只需使用以逗号分隔的输入选项 --tres=,sreport 将生成请求的 TRES 类型的报告。有关这些报告的更多信息,请参见 sreport 手册页。
在 sreport 中,“报告的”计费 TRES 是从每个节点的最大计费 TRES 乘以时间框架计算得出的。例如,如果一个节点属于多个分区,并且每个分区定义了不同的 TRESBillingWeights,则该节点的计费 TRES 将是分区中的最高值。如果在节点的任何分区上未定义 TRESBillingWeights,则计费 TRES 将等于节点上的 CPU 数量。
最后修改于 2024 年 8 月 16 日