可追踪资源 (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
  • 注意:设置 gres/gpu 也将设置 gres/gpumem 和 gres/gpuutil。当未设置 gres/gpu 时,可以单独设置 gres/gpumem 和 gres/gpuutil。

  • 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 被定义为权重,则会被忽略。

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 日