队列管理
更新时间:2024-10-29
队列功能概述
队列是一个资源池中部分资源的集合,用于工作负载(训练任务、模型服务)的运行。用户可将资源池划分成若干个独立队列(逻辑队列、物理队列)来运行不同工作负载。资源池创建成功后会默认生成default队列。
队列分为逻辑队列和物理队列,逻辑队列仅通过配额限制资源使用,与物理节点无绑定;物理队列绑定节点,实现队列间资源物理隔离。一级逻辑队列和物理队列下都可再创建二级队列,形成层级队列,方便用户细粒度资源管理。
本文将介绍如何通过百舸控制台创建、更新和使用队列。
前提条件
在 CCE 组件管理页面,选择云原生 AI 栏目,CCE AI Job Scheduler 组件版本按照下图升级到最新版本(1.7.23 以上),以使用相关队列功能。
逻辑队列
普通队列
普通队列通常是为不同业务部门分配资源配额最常见的队列形式,是将固定数量的配额资源分配给不同部门使用,实现基础的资源分配能力。
弹性队列
弹性队列是帮助平台型客户更高效为不同业务部门分配资源配额的队列形式。在弹性队列中允许队列闲置配额资源借出给其他队列使用,实现资源出借回收、任务超发抢占等能力,以提高GPU/NPU资源的利用率。具体的任务超发、抢占资源的策略见附录详情。
物理队列
通过物理队列对GPU/NPU资源进行物理隔离,支持客户保障重点业务的资源供给,避免资源抢占。同时在物理队列下可以创建多个子逻辑队列。
队列功能说明
配额设置说明
弹性队列需要设置三类资源配额:独占型、共享型和抢占型,以更好地优化成本并提高GPU/NPU资源的利用率。
- 独占型:队列独占资源,仅限本队列使用,不会被其他队列抢占。
- 共享型:队列可对其他队列共享的资源。开启队列间抢占功能时,其他队列可使用该队列中空闲的共享型资源。
- 抢占型:队列可从资源池或其他队列空闲资源中抢占的资源,独占+共享型资源不足时可抢占其他队列空闲资源。
物理队列仅需选择GPU型号和节点数量即可,支持指定节点加入到物理队列中,物理队列下可再创建子队列(逻辑队列)。
针对以上配额的概念,可参考以下示例便于理解:
调度策略说明
弹性队列支持两种调度策略:
- 遍历策略:当队列中的第一个任务无法出队,则会跳过该任务,然后依次尝试对后续队列中的任务进行出队操作。弹性队列选择Fifo调度策略时,需要注意合理配置独占型资源配额,配置独占型资源不足且队首任务申请资源较多时,可能会出现长期排队资源无法满足的情况。
- Fifo策略:当队列中的第一个任务无法出队,系统将反复尝试对第一个任务进行出队操作,而不会跳过。
队列限制说明
队列配额遵循以下的限制:
- 单个子队列“独占型+共享型+抢占型”配额之和不允许大于父队列“独占型+共享型+抢占型”配额之和
- 同一父队列下的子队列“独占型”配额之和不允许大于父队列“独占型”配额
- 同一父队列下的子队列“独占型+共享型”配额之和不允许大于父队列“独占型+共享型”配额
层级队列遵循以下限制:
- 不支持指定default 队列为父队列
- 不支持指定第二层队列为父队列
- 不支持不允许向已存在运行任务的队列添加子队列
- 目前仅支持创建1级子队列,队列结构即“资源池配额-父队列-子队列”。
删除队列遵循以下限制:
- 层级队列中不允许直接删除父队列,需要先删除子队列后,再删除父队列;
- 有任务正在运行的队列不允许删除。
使用说明
普通/弹性队列配置项说明
配置项 | 说明 |
---|---|
队列名称 | 队列名称,首尾只能是小写字母或数字,支持数字、小写字母和- |
父队列 | 该队列所属的父队列名称,默认为资源池配额,也可选择其他没有正在运行任务的一级队列。 |
队列类型 | 按需选择普通队列或弹性队列,弹性队列支持闲置资源借出回收,借用资源池空闲资源,如无此需求可选择普通队列 |
GPU分配 | 普通队列直接申请配额,弹性队列按需配置独占型、共享型、抢占型配额。 |
调度策略 | 弹性队列按需选择遍历策略或Fifo策略 |
队列间抢占 | 是否开启队列间抢占策略,借用的资源是否接受被抢占。默认关闭 |
物理队列配置项说明
配置项 | 说明 |
---|---|
队列名称 | 队列名称,首尾只能是小写字母或数字,支持数字、小写字母和- |
GPU分配 | 选择要加入该物理队列的GPU类型及节点数量,支持指定节点加入物理队列。 |
调度策略 | 物理队列按需选择遍历策略或Fifo策略。 |