整体说明
TI-ONE 资源组在调度训练任务和在线服务时,支持“排队策略”及“优先级调度策略”。
排队策略:当资源不足时,默认排队策略是按照任务/服务提交时间的先后顺序先进先出。用户也可以在资源组配置遍历策略,优先调度队列中满足资源要求的任务/服务。详见 排队策略配置说明。 优先级调度策略:支持根据标签设置任务/服务的优先级(P0最高-P9最低),高优先级任务/服务会默认抢占低优先级任务,低优先级任务被抢占后会重新进入排队队列,详细使用说明请见 优先级调度说明。 备注:通过标签设置任务优先级的功能仅支持“任务式建模”及“在线服务”模块。
服务优先原则:高优的在线服务可以抢占低优任务式建模的资源,但高优任务式建模不会抢占低优在线服务的资源。
说明:
针对 CPU 任务,默认会按照负载均衡的策略均分到资源组不同节点。
针对 GPU 任务,默认会按照最小化碎片的方式,优先调度到同一台节点。
不同卡类型的任务不会互相阻塞,例如T4卡的任务不会影响A100卡的任务。
排队策略配置说明
DefaultQueue 表示资源组内训练任务的默认排队策略,仅支持任务式建模。
其中默认值为0,设置为0代表 严格先进先出 :不管当前空闲多少资源,在等待队列中取到最早提交的任务,如果资源足够则调度执行,如果不够则等待;
设置为1代表 资源尽量利用的先进先出 :根据当前空闲的资源情况,从队列中按照时间顺序找到第一个当前资源满足的任务,调度执行。
{
"Version": "1.0",
"ResourceRule": {
"DefaultPriority": 0,
"DefaultQueue": 0,
"Preempted": 1
},
"TaskRules": []
}
参数说明
DefaultPriority:默认优先级,优先级为0-9,P0最高,默认值为0。
DefaultQueue:默认排队策略,可选值0、1、2,默认值为0。
0代表严格先进先出:不管当前空闲多少资源,在等待队列中取到最早提交的任务,如果资源足够则调度执行,如果不够则等待;
1表示在优先级范围内的遍历策略,也就是说同一优先级的任务可以不严格按照任务提交时间按顺序出队,可以看资源空闲情况插队;
2表示全部队列的遍历策略,也就是说整个排队队列都按照遍历策略,只要资源满足,就出队。
Preempted:默认优先级抢占策略,可选值0和1,默认值为1。
0表示队列中的高优任务不会抢占已经在运行中的低优任务;
1表示队列中的高优任务会抢占已经在运行中的低优任务。
优先级调度说明
策略语法示例
在资源组维度,支持配置调度策略的描述文件。其中,DefaultPriority 表示默认优先级,TaskRules 中可以按照以下示例通过任务标签设置优先级,其中 ValueType 默认为 Tag,后续可能会根据实际需求不断补充ValueType。
下面是一个示例语句,实现的场景为:该资源组下的训练任务默认优先级为P0,如果任务的标签符合任务类型-语音任务,则该任务的优先级为P1(注意:通过标签设置任务优先级的功能仅支持任务式建模及在线服务)。
低优任务会被高优任务或服务抢占,但低优的服务只会被高优服务抢占。被抢占后的任务/服务将进入排队队列,继续等待。
服务优先原则:高优的在线服务可以抢占低优任务式建模的资源,但高优任务式建模不会抢占低优在线服务的资源。
注意:
下述策略语句中的#注释部分不符合 json 语法,仅做文档展示,粘贴到平台需要清除。
{
"Version":"1.0",
"ResourceRule":{
"DefaultPriority": 0,
"DefaultQueue": 1,
"Preempted": 1
},
"TaskRules":[
{
"AttrRules":[{
"ValueType":"Tag",
"Key":"任务类型",
"Value":"语音任务"
}],
"ScheduleRule":{
"Priority": 1
}
}
]
}
具体操作流程(以任务式建模为例)
单击新建标签,输入标签键任务类型,标签值语音任务。 2. 进入 TI-ONE 资源组管理页面,选择具体的资源组,单击编辑,在调度策略一栏输入上述的策略描述语句。
3. 新建训练任务的时候,如果需要当前这个任务的优先级为低优的话,需要在新建任务的时候给这个任务打上标签任务类型 > 语音任务,那么这个任务在调度的时候就是低优任务,会被抢占,自动进入排队队列。