dms 算法一般指分布式多任务调度算法,也有部分领域把动态多尺度分割算法简称 dms 算法,工程领域最常见是分布式多任务调度版本,核心思路是在多节点分布式系统里面,把大量任务拆分之后分配到不同计算节点,综合考虑节点负载 通信开销 任务依赖关系,实现任务均衡调度,避免个别节点过载同时降低整体任务完成总时长,很多人容易混淆 dms 算法不同领域定义,导航图像识别里面的 dms 算法侧重点和分布式调度版本完全不一样,dms 算法属于启发式调度类算法,不需要穷举所有任务组合,计算复杂度比全局最优枚举低很多,适合节点数量多任务量大的分布式集群,缺点是属于近似最优算法,不能保证每次都得到理论全局最优解,在动态任务持续到达场景,dms 算法可以动态重新调整调度方案,这也是它对比静态调度算法最大优势。
核心分类对照表
| 领域 | dms 算法全称 | 核心目标 |
|---|---|---|
| 分布式集群 | 分布式多任务调度算法 | 多节点任务均衡分配 |
| 图像处理 | 动态多尺度分割算法 | 图像多尺度自适应分割 |
| 车载 DMS | 驾驶员状态监测算法 | 识别驾驶员疲劳分心状态 |
分布式版本 dms 算法基本流程
第一步 任务建模,把所有待调度任务建立任务图,记录任务计算量 任务之间前驱后继依赖 任务通信数据量
第二步 节点状态采集,实时获取每个计算节点 CPU 负载 内存占用 当前队列等待任务数量
第三步 计算调度评分,对每个可调度任务,计算放到不同节点的综合代价,代价包含本地计算时间加上节点间通信时间,同时叠加负载惩罚项
第四步 任务分配,优先选择综合代价最低的节点分配任务,如果多个节点评分接近,优先选择负载更低节点
第五步 动态重调度,当新任务到达或者节点故障负载突变,dms 算法重新评估现有任务队列,必要时迁移已经分配任务
第六步 调度输出,生成任务执行顺序和节点映射表,下发给各个节点执行
关键设计要点
第一 负载均衡权重,权重设置偏大的时候算法优先压低节点负载,权重偏小会更侧重减少通信开销,参数需要根据业务调优
第二 任务依赖约束,存在前驱依赖的任务,前驱任务没有完成,后继任务不能启动,dms 算法调度的时候必须遵守这个约束,不能随意并行
第三 动态更新周期,周期太短会频繁触发重调度,带来额外计算开销,周期太长响应滞后,不能及时应对负载突变
第四 容错机制,节点宕机之后 dms 算法需要识别故障节点,把该节点未完成任务重新分配到其他正常节点
车载 DMS 监测算法版本说明
车载场景 dms 算法是驾驶员状态监测算法,一般基于摄像头采集人脸眼部特征,核心算法流程是人脸检测 人眼定位 眼部闭合率计算 头部姿态估计,再结合连续帧序列判断疲劳 分心 打哈欠 抽烟打电话等状态,这个版本 dms 算法属于计算机视觉类算法,和分布式调度 dms 算法不是同一个算法体系,阅读文献的时候要先确认所属领域,避免概念混淆。
优缺点分析
优点
第一 支持动态任务变化,适合持续产生任务的在线集群
第二 兼顾计算开销和通信开销,不是单纯追求节点平均负载
第三 计算复杂度可控,节点规模扩大之后依然可以运行
缺点
第一 启发式算法,结果是近似最优,无法保证全局最优解
第二 参数调优依赖经验,不同集群业务需要单独调参
第三 节点通信延迟波动大的时候,dms 算法预测代价会出现偏差,调度效果下降
调优实操步骤
1 先采集一段时间集群历史任务数据,统计任务平均计算量和通信数据量
2 初始化负载权重和重调度周期参数
3 跑仿真测试,记录总完成时间 节点负载方差 任务等待时间
4 如果节点负载不均衡,提高负载惩罚权重,如果跨节点通信延迟很高,提高通信代价权重
5 多次迭代测试,确定适合当前业务的 dms 算法参数
【常见问题】
问题 1 dms 算法属于最优调度算法吗
回答 1 dms 算法是启发式近似调度算法,dms 算法不能保证得到全局最优解,dms 算法优势是计算速度快适合大规模动态分布式集群。
问题 2 车载 dms 算法和分布式 dms 算法是同一个吗
回答 1 车载 dms 算法是驾驶员状态监测视觉算法,分布式 dms 算法是多任务调度算法,两种 dms 算法名称缩写相同但是原理用途完全不一样。
问题 3 dms 算法重调度频繁是什么原因
回答 1 dms 算法重调度频繁一般是重调度周期设置太短,或者节点负载波动剧烈,调大 dms 算法重调度周期,同时优化负载预测模型可以减少频繁重调度。
【免责申明】
本文 dms 算法相关内容属于公开技术原理科普,不同文献里面 dms 缩写定义存在差异,具体算法公式请以对应原始论文为准,本文仅作学习参考,工程落地需要结合业务场景验证,不替代专业算法设计方案。


