一、队列为什么会堵
(一)两类任务的资源画像
集群里的任务大致分两类:短任务数量多、单次要卡少、几分钟到几小时就结束;长任务数量少、单次要卡多、一跑就是几天。两类任务混在一个队列里,结果往往是长任务为了凑齐资源把整池占住等待,短任务排在后面动弹不得,整体吞吐与体验一起下降。
(二)资源碎片从哪里来
资源碎片是另一个隐形杀手。长任务等待期间,已经分配到的那部分资源处于闲置状态;多个小任务各自占住零散的卡,又拼不出一个能满足大任务的连续块。碎片越多,名义上的空闲资源越多,能真正派上用场的却越少。
1. 队头阻塞:大任务排在前面,后面的小任务全部等待。
2. 资源碎片:零散空闲卡拼不出连续块,利用率上不去。
3. 预留闲置:已分配但未使用的资源在等待期间白白空转。
二、队列划分的基本方法
(一)按时长与规模分队列
最直接有效的做法是分队列:短队列接收时长在数小时以内、卡数较少的任务,给较高的优先级与较快的响应;长队列接收大规模任务,优先级略低但允许占用更多资源。两类任务各走各的通道,短任务不必再等大任务凑齐,体验立刻改观。
(二)配额怎么分配
队列之间要分配配额,防止某一类任务吃满整池。常见做法是按比例分配,并允许配额在闲置时临时借出、需要时收回。借出与收回的规则要写清楚,减少长期占用借用配额的队列事实上吃掉全部资源,使配额失去意义。
(三)回填机制
回填是提高碎片利用率的有效手段:在不推迟高优先级任务开始时间的前提下,让后面的小任务先跑。调度系统需要知道每个任务的预计时长,因此提交时填写时长估计很重要。填得越准,回填的收益越大,整体利用率提升也越明显。
① 按时长分队列:短任务走快速通道,不再被大任务堵塞。
② 配额可借用:闲置时临时借出,需要时按规则收回。
③ 开启回填:在不推迟高优先级任务的前提下插空执行。
三、优先级与抢占
(一)优先级怎么定
优先级不宜设太多档位,三到四档足够:紧急调试、常规短任务、常规长任务、低优先级批处理。档位太多会让规则难以理解,团队也会倾向于都填最高档。优先级还应与配额联动,高优先级队列的总量受限,减少被滥用。
(二)抢占的代价与适用条件
抢占能让紧急任务立即拿到资源,代价是被抢占任务的损失。因此抢占通常只用于短任务:保存检查点后释放资源,稍后从检查点恢复。长周期训练任务一般不参与抢占,或者只在约定的时间窗口内允许,防止反复中断把有效算力消耗殆尽。
四、多团队共用时的协作规则
(一)按项目打标签
多团队共用一个集群时,标签是管理的基础。每个任务带上项目与负责人标签,配额按项目分配,账单按项目统计。标签体系一旦建立,谁在用、用了多少、该由谁优化,全部有据可查,跨团队沟通也从争论变成看数据。
(二)变更与协商机制
队列与配额不可能一次设定就永远合适。建议每季度复盘一次各队列的等待时长与利用率,按实际数据调整比例。调整前把方案发给各团队征求意见,执行时留出过渡期。规则透明、调整有据,团队对调度的信任度才会提高。
(三)均衡与效率的取舍
调度始终要在响应速度与资源利用率之间找均衡:过度偏向响应速度会造成大量碎片,过度偏向利用率又会让小任务长时间等待。没有通用最优解,只能按团队构成来定。以调试为主的团队偏向响应速度,以批量训练为主的团队偏向利用率。
五、观测与调优
(一)该盯住哪些指标
调优的前提是可观测。需要盯住的指标包括:各队列的均值等待时长、队列积压任务数、集群整体利用率、碎片率、抢占次数与回填命中率。前两项反映体验,后几项反映效率。指标异常时,先定位是哪一类任务引起的,再针对性调整。
(二)调优的步骤
调优建议小步进行:一次只改一个参数,观察一到两周,确认效果后再改下一个。同时保留调整记录,把每次改动的原因与结果写下来。这样做虽然慢一些,但能清楚知道每个参数的影响方向,出现问题时也容易回退。
六、天翼云的相关能力
(一)队列与配额的配置
天翼云的调度能力支持队列划分、配额设置与优先级配置,并可按项目打标签统计消耗。任务提交时按显存、算力与互联带宽等标签匹配规格,配合资源视图可以看到各队列的余量情况。天翼云主机可以支撑调度与监控组件,把观测数据集中留存。
七、特殊任务的安排
(一)交互式调试任务
交互式调试需要立即拿到资源,等待会打断思路。为这类任务单独设一个小额度的快速通道,限制单次占用时长与卡数,既能保证即时响应,又不会让调试任务吃掉大量资源。额度用完时提示改用批处理方式提交。同时限制单个人同时占用的数量,防止少数人把快速通道占满,影响其他人调试。
(二)批处理与夜间任务
批处理任务对启动时限不敏感,适合排在低峰时段自动执行。把这类任务设为低优先级并允许中断重来,可以有效利用原本闲置的资源。经验上看,把批处理集中到夜间之后,白天的排队投诉通常明显减少,集群整体也更稳定。
(三)超大规模任务
需要整池资源的超大规模任务不适合与普通任务混排。常见做法是为它们安排专门的窗口期,提前通知各团队,窗口期内暂停其他任务的调度。虽然会短暂影响其他任务,但能保证大任务一次跑完,整体效率反而更高。
八、文档与培训
(一)把规则写成文档
队列规则、配额比例、优先级档位与提交方式都应写成文档并保持更新。文档要包含常见问题:为什么我的任务一直排队、什么时候该用哪个队列、如何申请临时配额。文档越清楚,答疑的工作量越小,规则执行也越一致。
(二)新成员的培训
新成员往往不清楚提交规范,容易填错时长估计或选错队列,影响整体调度。建议做一次简短的入门培训,说明队列用途与填写要求,并提供几个可直接复用的提交模板,把人为失误降到最低,也减少老成员的重复答疑。
结语:排队问题的根源通常不是资源总量不足,而是队列设计没有区分任务形态。按长短分队列、配额可借用、开启回填,这三招能让多数集群的体验明显改观。抢占要慎用,只适合能保存检查点的短任务。建议先补齐等待时长与利用率两项观测数据,再小步调整参数,每次只改一处并记录结果。