深度无关公平共享因子

目录

介绍

深度无关公平共享因子是默认公平共享因子的一个变体,它增加了可用的优先级范围,并改善了在深层和/或不规则层级中账户之间的公平性。假设读者熟悉优先级/多因子插件,这里仅记录深度无关因子的具体内容。

深度无关公平共享公式

计算账户公平共享因子的主要公式为:

	F = 2^(-R)

其中:

F
是公平共享因子
R
是账户的有效使用比率

该公式类似于原始的公平共享公式,并且对于树的第一层账户(根下)产生相同的结果。实际上,对于第一层账户,有效使用比率 R 等于使用比率 r,定义为:

	r = U/S

其中:

S
是标准化的份额
U
是考虑半衰期衰减的标准化使用

这与原始公式相同。

账户层级下的有效使用比率

R 的广义公式稍微复杂一些。它涉及一个局部使用比率 rl

	rl = r / (Uall_siblings/Sall_siblings)

这是一个账户的使用比率与其层级中所有兄弟账户的总使用比率(包括自身)之间的比率。例如,假设一个账户的所有子账户总共使用了两倍于其组合份额(等于父账户的份额),但其中一个子账户仅使用了其份额的三分之二,则该子账户的局部使用比率为三分之一。

R 的一般公式定义为:

	R = Rparent * rl^k

其中:

k
介于 0 和 1 之间,决定账户的有效使用比率在多大程度上由其祖先的使用比率决定。

为了理解 k 的公式,首先对 R 的公式做一些观察是有用的。一方面,如果 k 等于 1,上述公式给出 R = Rparent * rl。对于第二层账户,通过代入 rl 的公式,这导致 R = r * Uparent/Uall_siblings。假设作业在叶子账户上提交,则 Uparent = Uall_siblings,这给出 R = r。这意味着如果 k 等于 1,账户的公平共享因子仅基于其自身的使用比率。另一方面,如果 k 等于 0,R = Rparent,这意味着账户的公平共享因子仅基于其祖先的使用比率。

k 的公式为:

	k = (1/(1+(5*ln(Rparent))^2)) 如果 ln(Rparent)*ln(rl) <= 0
	k = 1 如果 ln(Rparent)*ln(rl) >= 0

该公式的选择确保了,如果账户的祖先的使用符合目标,则该账户的公平共享因子主要依赖于其自身的使用。因此,当 Rparent 趋近于 1 时,k 趋向于 1。相反,账户的祖先越是低于/超过其份额,账户的公平共享因子就越应该通过向其父账户的公平共享因子靠拢而获得奖励/惩罚。因此,当 Rparent 偏离 1 时,k 趋向于 0。然而,如果账户的使用不平衡在同一方向上大于其祖先(例如,祖先消耗了其份额的两倍,而子账户消耗了其份额的三倍),则将公平共享因子向父账户的因子回调并没有帮助。因此,在这种情况下,k 保持为 1。


图 1. k 随 Rparent 的变化图

配置

以下 slurm.conf 参数用于启用深度无关的公平共享因子。有关更多详细信息,请参见 slurm.conf(5) 手册页。

PriorityFlags
设置为 "DEPTH_OBLIVIOUS"。
PriorityType
将此值设置为 "priority/multifactor"。

最后修改于 2023 年 6 月 26 日