
# 优先级和调度策略
使用专属资源池训练作业时，支持在创建训练作业时设置任务优先级，也支持作业在长时间处于"等待中"的状态时调整优先级。如通过调整作业优先级可以减少作业的排队时长。
#### 什么是训练作业优先级
在用户运行训练作业过程中，需要对训练作业做优先级划分。例如部分低优先级任务用于测试或简单的非关键实验，当存在高优先级作业时，高优先级作业能够比低优先级作业更快进入调度队列。
在资源使用高峰期，用户可以通过提高或降低训练作业的优先级，来动态调节作业的执行顺序，保障关键业务的及时运行。请参考[如何修改训练作业优先级]。
如需了解训练作业调度策略，请参考[训练作业调度策略]。
#### 约束限制
- 仅使用专属资源池训练时才支持设置训练作业优先级。公共资源池不支持设置训练作业优先级。
- 作业优先级可以设置的取值为数字1-3，数字越大，优先级越高，默认优先级为"1"，最高优先级为"3"。当选择"3"优先级时，还需要配置用户权限才可以生效，权限配置参考本章节内容[给子账号配置"设置作业调度最高优先级"权限]。
- 只有训练作业长时间在专属资源池的排队列表中导致的"等待中"状态才支持修改作业优先级，如果是其他原因导致的长时间等待则不支持修改作业优先级。
 
#### 如何设置训练作业优先级
参照[模型训练：资源配置](https://support.huaweicloud.com/develop-modelarts/develop-modelarts-0006.html#ZH-CN_TOPIC_0000002544683355__section17420147204619)，在创建训练作业页面可以勾选"提高作业调度优先级"。优先级可以设置数字1-3，数字越大，优先级越高，默认优先级为"1"，最高优先级为"3"。
 #### 如何修改训练作业优先级
1. 登录[ModelArts管理控制台](https://console.huaweicloud.com/modelarts/)。
2. 在左侧导航栏中，选择"模型训练 \> 训练作业 \> （新版为"模型训练"）"，进入"训练作业"列表。
3. 在训练作业列表页面，选择"状态"为"等待中"的训练作业。
4. 单击训练作业名称，进入详情页面。
5. 在"作业优先级"单击![](https://support.huaweicloud.com/develop-modelarts/figure/zh-cn_image_0000001965755488.png)，在弹窗中修改优先级后单击"确定"。
 
 #### 给子账号配置"设置作业调度最高优先级"权限
默认用户权限可选择优先级"1"和"2"，配置了"设置作业为高优先级"权限的用户可选择优先级1\~3。当选择优先级为"3"时还需要为用户配置"modelarts:trainJob:setHighPriority"权限，才能生效。
1. 使用主用户账号登录[华为云管理控制台](https://console.huaweicloud.com/console)，单击右上角用户名，在下拉框中选择"统一身份认证"，进入统一身份认证（IAM）服务。
2. 在统一身份认证服务页面的左侧导航选择"权限管理 \> 权限"，单击右上角的"创建自定义策略"按如下要求设置完成后单击"确定"。
   - "策略名称"：设置自定义策略名称，例如：允许用户设置训练作业最高优先级。
   
   - "策略配置方式"：选择可视化视图。
   
   - "策略内容"：允许，云服务中搜索ModelArts服务并选中，操作列中搜索关键词"modelarts:trainJob:setHighPriority"并选中，所有资源选择默认值。
     图1创建自定义策略   
     ![](https://support.huaweicloud.com/develop-modelarts/figure/zh-cn_image_0000002673094489.png "点击放大")
     
     
     
    
3. 在统一身份认证服务页面的左侧导航选择"用户组"，在用户组页面查找待授权的用户组名称，在右侧的操作列单击"授权"，勾选步骤[2]创建的自定义策略，单击"下一步"，选择授权范围方案，单击"确定"。
   此时，该用户组下的所有用户均有权限设置训练作业优先级1\~3。
   如果没有用户组，也可以创建一个新的用户组，并通过"用户组管理"功能添加用户，并配置授权。如果指定的子用户没有在用户组中，也可以通过"用户组管理"功能增加用户。
   
 
 #### 训练作业调度策略
模型训练作业调度采用**优先级排序** 与**FIFO (F** irst**I** n**F** irst**O** ut**)**顺序出队的策略。每轮调度开始时，待调度作业按优先级（降序）和创建时间（升序）排列，形成调度队列；随后从队首逐个尝试出队，队首任务资源不足时本轮调度结束，不跳过队首调度后续任务。
- **优先级定义**
  训练作业支持1、2、3三个优先级等级，数字越大优先级越高。优先级在创建作业时指定，运行期间可动态调整。如需修改优先级，请参考[如何修改训练作业优先级]。
  
- **调度流程**
  1. **获取：**获取当前队列所有待调度作业。
  
  2. **排序：**优先级降序 → 创建时间升序。
  
  3. **出队：**从队首取作业尝试调度。
  
  
  ├── 资源满足 → 出队运行，本轮调度结束。
  └── 资源不足 → 本轮调度结束，等待下轮。
  4. 下一轮调度重新按照步骤1开始执行。
   
- **典型场景**
  - **场景一：优先级决定调度顺序** 。
    队列中存在任务A（优先级3，9:00创建）、任务B（优先级2，8:30创建）、任务C（优先级3，9:30创建）。
    排序结果：A → C → B。任务B虽创建最早，但优先级低于A和C，需等待高优先级任务调度完成。
    
  
  - **场景二：FIFO不跳过队首。**
    队列中存在任务A（8卡，优先级3）和任务B（2卡，优先级2），当前空闲2卡。
    任务A排在队首但资源不足，任务B虽有足够资源，但FIFO策略不允许跳过队首，两个任务均排队等待，直到空闲资源满足任务A。
    
  
  - **场景三：优先级动态调整。**
    任务A（优先级1）排在任务B（优先级2）之后。管理员将任务A优先级提升至3后，排序实时更新，任务A移至队首优先调度。
    
   
 
