Slurm工作负载优先级(二)

Slurm工作负载优先级(二)

深度遗忘公平分享因子

​ 先介绍如何在slurm使用深度遗忘公平分享因子

# slurm.conf 配置
PriorityType=priority/multifactor  # 前提条件
PriorityFlags=DEPTH_OBLIVIOUS

​ 深度遗忘公平分享因子是默认公平分享因子的一种变体,它增加了可用优先级范围,提高了深层和/或不规则等级中帐户之间的公平性。

​ 深度遗忘公平分享因子公式为:
F = 1 / 2 R F=1/2^R F=1/2R
​ 其中,F是账户的份额,R是账户的有效使用率。其中账户的有效使用率类似于经典的公平分享算法中,有效使用率R定义为

r = U / S
其中 U 是半衰期衰减的归一化用法因子
	S  是账户的份额

​ 在多个账户体系下,R的计算有点复杂,slurm采取了一个本地使用率rl

rl = r / (Uall_siblings/Sall_siblings)
Uall_siblings  表示半衰期下,所有账户的使用情况
Sall_siblings  表示分配的份额,包括当前账户在内

​ 本地使用率rl ,也就是一个账户的使用率,和包括账户本身在内的所有同级兄弟姐妹的总使用率之间的比率。例如,假设一个账户的所有子账户总共使用了两倍于其合并份额(相当于父账户的份额)的资源,但其中一个子账户只使用了其合并份额的三分之二,那么该子账户的本地使用率将为三分之一。

那么具体的计算账户实际使用率R呢?
R = R p a r e n t ∗ r l k R = Rparent * rl^k R=Rparentrlk
​ 其中k是出于0~1范围内的数,表示一个帐户的有效使用率在多大程度上取决于它的祖先的使用率。

​ 如果 k 等于1,上述公式给出 R = Rparent * rl。对于第二级帐户,通过插入 rl 的公式,可以得到 R = r * Uparent/Uall _ brothers。假设作业是在叶帐户中提交的,Uparent = Uall _ brothers 给出 R = r。这意味着如果 k 等于1,账户的公平分享因子仅基于它自己的使用率。另一方面,如果 k 等于0,则 R = Rparent,这意味着账户的公平分享因子仅基于其祖先的使用率。

​ k的公式是:

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

​ 选择这个公式是为了确保,如果一个帐户的祖先的使用是目标,公平分享因素的帐户主要取决于自己的使用。因此,当 Rparent 趋向于1时,k 趋向于1。相反,一个账户的祖先未充分使用/过度使用他们的股份,该账户的公平份额因素就应该通过向其母公平份额因素靠近而得到更多的奖励/惩罚。因此,当 Rparent 从1偏离时,k 趋向于0。然而,如果账户使用量的不平衡比它的祖先在同一方向上的使用量更大,(例如,祖先消费了两倍于他们的份额,而孩子消费了三倍于他们的份额) ,将公平份额因素移回到父母中的一方是没有帮助的。因此,在这种情况下 k 保持为1。
在这里插入图片描述

公平树公平分享算法

​ 首先讲如何使用?

# slurm.conf配置文件
PriorityType=priority/multifactor
PriorityCalcPeriod=xxx(单位分钟)
# 优先级计算周期是作业半衰期衰减的频率(以分钟为单位) 并执行公平树计算。

​ 公平树对用户进行优先级排序,以便如果帐户 A 和 B 是兄弟账户,并且 A 具有 公平份额因子高于 B,相比B的所有子账户/用户,A 的所有子项将具有更高的公平份额。有以下几点好处:

​ 1、来自高优先级帐户的所有用户比来自低优先级帐户的所有用户获得更高的公平分享系数。

​ 2、对用户进行分类和排序,以防止由于精度损失而导致错误。允许绑定。

​ 3、帐户协调器不能意外地损害其用户相对于其他帐户中的用户的优先级。

​ 4、由于计算精度的损失,用户极不可能拥有与其他用户完全相同的公平分享系数。

​ 5、新作业立即被分配优先级。

​ 对于普通用户来说如何查看公平共享因子呢,slurm提供了一个命令工具sshare -l 来查看账户/用户的FairShareLevel FS

在这里插入图片描述

​ 如果一个帐户的LevelFS 值高于其他任何兄弟用户或兄弟帐户,则该帐户的所有子帐户的 FairShare 值都将高于其他帐户的子帐户。在关联树的每个级别都是如此。

FairShare 值是通过使用公平树算法来对所有用户按照优先级(降序)进行排序而获得的。FairShare 值是用户的等级除以用户关联的总数。排名最高的用户将获得1.0的公平分享价值。

​ 如果UserA的 FairShare 值低于另一个用户UserB ,并且想知道原因,请找到第一个共同祖先帐户。在公共祖先之下的级别上,将UserA祖先的 Level FS 值与 UserB 祖先的 Level FS 值进行比较。UserA的祖先具有比 UserB 的祖先更低的级别 FS 值。

​ 假设树包含的关系如下:

root => Acct1 => Acct12 => UserA
root => Acct1 => Acct16 => UserB

​ Acct1是 UserA 和 UserB 的第一个共同祖先。检查 Acct12和 Acct16的 Level FS 值。如果 UserB 的 FairShare 值高于 UserA,则 Acct16的级别 FS 值高于 Acct12。

算法内容

​ 一个方程被用来计算每个关联的水平公平分享价值,只考虑它自己和它的兄弟账户的分享和使用。在逻辑上创建有根平面树(简言之就是多叉树),然后按左侧最高值的 Level Fairshare 排序。然后在深度优先遍历中访问树。用户被发现时按预先顺序排列。排名用于为用户创建最终的公平分享因子。
在这里插入图片描述

​ 该算法只对树进行一次遍历。其基本思想是将等级设置为用户关联的计数,然后从根开始:

​ 1、为子树的子树计算级别 Fairshare

​ 2、对子树的子树进行排序

​ 3、按照降序访问子节点,节点可以是账户也可以使用户,如果是一个用户,则分配一个FairShare因子,如果是账户,则对账户进行降序排序。

计算Level FS

​ Level Fairshare方程描述如下。未得到充分服务的关联的值将大于1.0。过度服务的关联的值将在0.0和1.0之间。
L F = S / U LF = S / U LF=S/U
​ 其中LF指的是关联的Level Fairshare值,S指的是标准化分配的份额, S = Srawself / Srawself+siblings,U被称为有效使用,U 是关联的使用标准化帐户的使用: U = Urawself / Urawself+siblings

关联处理规则:

​ 1、拥有相同级别Fairshare的兄弟用户获得相同的等级

​ 2、拥有相同级别Fairshare帐户的用户将获得与其最高级别用户相同的等级

​ 3、具有相同级别 Fairshare 的兄弟帐户在降低之前将其子列表合并

注意

​ 1、由于 Fair Tree 算法对所有用户进行排序,不管是否活动,管理员必须仔细考虑如何在优先级/多因素插件中应用其他优先级权重。PriorityWeightFairshare 可以有效地设置为比通常小得多的值,可能低至用户关联数量的1或2倍。

​ 2、Fair Tree需要根据slurmdbd获取资源用量和相关份额
不管是否活动,管理员必须仔细考虑如何在优先级/多因素插件中应用其他优先级权重。PriorityWeightFairshare 可以有效地设置为比通常小得多的值,可能低至用户关联数量的1或2倍。

​ 2、Fair Tree需要根据slurmdbd获取资源用量和相关份额

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值