t9k / user-support

为 TensorStack AI 平台提供用户支持。
3 stars 0 forks source link

资源看板显示问题修正 #76

Open wd0011 opened 7 months ago

wd0011 commented 7 months ago

改进内容 资源看板中,不同的队列资源显示不相通,但是实际使用中,default中使用的就是a40的卡。应该在a40的队列中正确显示已在default中被使用的资源。 image

期望的效果(可选) 同一份资源被使用后,包含该资源的队列都应该显示该资源已被使用。避免一种有大量资源空闲的错觉。

quanguachong commented 7 months ago

背景

队列的资源配额的作用是:限制队列中 ”所有工作负载“ 可申请使用的资源量的上限,队列资源配额并不代表集群实际可供队列使用的资源量。

队列的剩余资源配额 = 队列的资源配额 - 队列已使用的资源量。

分析

在上述问题中,前端的资源看板显示的是队列的资源配额使用情况。队列 default 和 a40 可以使用相同的节点资源,但是系统不会将通过队列 default 使用的资源量算作队列 a40 已使用的资源量。所以,UI 显示的内容是正确的。如果想避免“一种有大量资源空闲的错觉”,管理员可采取不同的设置。参考:队列设置讨论

针对“同一份资源被使用后,包含该资源的队列都应该显示该资源已被使用”,我们后续可能考虑在”集群管理 + 普通用户前端“ 增加 ui:显示队列可用节点资源的资源情况:包括资源总量,已经分配量(Allocated),实际的资源利用(Utlization)情况。

队列设置讨论

管理员在为一个队列设置资源配额时,应该清楚地了解下列情况:

  1. 队列可以使用哪些节点的资源,这些节点上的资源总量是多少
  2. 队列供给哪些用户使用
  3. 队列使用的节点同时被哪些其他的队列使用(队列资源重合)

然后管理员可根据工作负载特性和集群管理策略,合理地设置队列资源配额等参数,下面是为队列设置资源配额的示例:

注意:为了简化讨论,下文使用了单个节点进行讨论。但应当理解,这里的 “节点 A、B、C”、D、E” 等应分别对应一组节点。

示例 1 - 队列资源不重合

Screen Shot 2024-01-19 at 1 52 20 PM

队列 Q1 可以使用节点 A 和 B,队列 Q2 可以使用节点 C 和 D;队列之间无重合节点: 1 - oversubscription:Q1 资源配额 > 300,Q2 资源配额 > 400。队列资源配额 > 实际可用的资源总量。 2 - no oversubscription:Q1 资源配额 300 ,Q2 资源配额 400。队列资源配额 = 实际可用的资源总量。

示例 2 - 队列资源重合

Screen Shot 2024-01-19 at 1 52 45 PM

队列 Q1 可以使用节点 A 和 B,队列 Q2 可以使用节点 B 和 C,两个队列均可以使用节点 B。

配额设置除了需要考虑 “示例1” 中的 oversubscription 策略外,根据不同的设置,还可能会出现如下场景:

  1. shared + oversubscription:

    • 资源设置:Q1 资源配额 300 = 100(节点 A 资源量)+ 200(节点 B 资源量),Q2 资源配额 250 = 50(节点 C 资源量)+ 200(节点 B 资源量)。
    • 说明:这种设置提供了比较多的自由度,但很可能导致节点B的资源全部被 Q1 占用,如果 Q1 不释放资源,Q2 永远都无法使用节点 B 上的资源。
  2. partitioned + no oversubscription:

    • 资源设置:Q1 资源配额 200 = 100(节点 A 资源量)+ 100(节点 B 资源量),Q2 资源配额 150 = 50(节点 C 资源量) + 100(节点 B 资源量)。
    • 说明:对于节点 B,我们为 Q1 和 Q2 设置的资源配额 100 + 100 = 节点 B 的实际资源量,当队列 Q2 处于空闲状态时,节点 B 上总有 100 cpu 不能被使用。
  3. partially shared + oversubscription:

    • 资源设置:Q1 资源配额 250 = 100(节点 A 资源量)+ 150(节点 B 资源量),Q2 资源配额 200 = 50(节点 C 资源量) + 150(节点 B 资源量)。
    • 说明:我们为 Q1 和 Q2 设置的资源配额 150 + 150 > 节点 B 的实际资源量,但对单个队列设置的资源量 150 < 节点 B 的实际资源量。这种折衷的设置可以保证队列 Q1 无法占据节点 B 的所有资源,也能提高节点的资源利用率。

结论

本 issue 反应的问题是由于集群当前队列设置方案引起的,可以考虑重新配置一下。

管理员应当可根据集群运行实际情况采取不同的策略。一般情况下,采用一定程度的 oversubscription(例如:1.1, 2.1, 2.3)可提高集群的资源使用率(utilization)。

如果管理员想查看集群的资源实际使用情况,可在 Grafana 面板中查看。

wd0011 commented 7 months ago

目前使用队列的情况,既是为了对用户进行隔离,也是为了对资源进行复用。比如现在常用队列defualt拥有所有的资源,a100只有两台机器的资源。我们隔离了一部分用户,只能使用a100队列。这种情况下,a100队列用户的视野里面就只有空闲的资源,但是这些“空闲”的资源全都可能是不可用状态(被default队列占用)。 在管理员的角度,可以去看整体资源的使用情况,但是在用户的角度,他们对这些情况一无所知。