Merge pull request #6: feat: 调度工作台基础层(Phase 6 分支一) 工作台 Blueprint 与服务层(场景源/策略白名单/序列化/复现字段)、/workbench 页面壳、 三个只读 API(capabilities / scenario-sources / policies)、31 项契约测试; 全量 pytest 431 通过,独立验收通过。
Merge pull request #6: feat: 调度工作台基础层(Phase 6 分支一)
工作台 Blueprint 与服务层(场景源/策略白名单/序列化/复现字段)、/workbench 页面壳、 三个只读 API(capabilities / scenario-sources / policies)、31 项契约测试; 全量 pytest 431 通过,独立验收通过。
面向赛题 #16《基于深度强化学习的云-边-端异构计算资源管理调度方法》 的完整开源实现: 一套可训练、可插拔、可复现的 DAG 调度框架,把「专家启发式 + Transformer 课程强化学习候选 + 仿真择优安全选择」 统一到同一个 Policy 接口与同一个 makespan 仿真器下公平比较,并附带蒸馏快速策略、Conformal 校准、 因果在线重调度,以及在三大国产操作系统上的逐位可复现证据链。
Policy
一句话结果:主方法 safe[rlk_10+peft+heft_insertion] 在三个独立划分上全面优于 HEFT 基线 (mean_ratio val 0.9322 / test 0.9427 / OOD 0.9404,HEFT=1.0,越低越好), 且经 5 个随机种子复跑确认(std ≤ 0.0041),并在 openEuler / openKylin / OpenCloudOS 上逐位复现。
safe[rlk_10+peft+heft_insertion]
mean_ratio
SafeSelector
rlk_K
rlk_5
给定任务有向无环图 G=(V,E) 与云、边、端异构计算资源:
G=(V,E)
i ∈ V
w_i
(i→j) ∈ E
d_ij
n
speed_n
B
主指标(全文统一口径):
mean_ratio = mean_over_scenarios( policy_makespan / HEFT_makespan )
mean_ratio 越低越好,**< 1 表示平均优于 HEFT**,HEFT 恒等于 1.0。
MDP 建模(状态 / 联合动作 a = task·N + node / ready-task action mask / 归一化稀疏奖励 r = 1 − makespan/HEFT_makespan) 与代码一一对应,详见 系统设计 与 创新点 §8.1。
a = task·N + node
r = 1 − makespan/HEFT_makespan
全部数字来自本仓库 results/ 下的真实评测产物,非手填。HEFT=1.0,越低越好。
results/
方法 = safe[rlk_10+peft+heft_insertion](RL 多样本 + 启发式候选,仿真择优)。
三个划分均严格优于任一单候选(如 rlk_10 单列 0.9436 / 0.9609 / 0.9834),验证「安全选择带来净收益」。
rlk_10
主方法用 5 个 Transformer 种子(42–46,同配置仅改 seed)复跑五个划分,mean ± std:
mean ± std
主方法 std 全部 ≤ 0.0041,远小于单 RL 候选的 ~0.018;配对 t-test 表明 seed42 非「幸运种子」。 注意 v2 上单 RL 候选 rlk_* > 1.0(RL 在通信主导 regime 泛化有限),但安全选择靠启发式候选兜底仍稳超 HEFT——这正是混合框架的价值所在。 证据:results/core_evidence/multiseed_stats.md(5 seed × 5 split = 25 个逐场景目录)。
rlk_*
results/core_evidence/multiseed_stats.md
safe[纯启发式 6 候选]
heft_insertion
peft
heft
提供从「极致质量」到「极致时延」的完整可调谱系:蒸馏 Top-K 以约 1/65 的推理时延逼近仿真择优上界。 证据:results/core_evidence/pareto/pareto.md。
results/core_evidence/pareto/pareto.md
safe[rlk_10+…]
OOD 的 coverage 0.77 是 KS 检测信号(p≈0,识别到分布偏移)而非缺陷——触发后全局回退保守启发式。 证据:results/p3/conformal_gate_v2_*.md。
results/p3/conformal_gate_v2_*.md
因果–预知 gap = 0.226,经诊断为信息差距(oracle 提前避障),非触发时机问题;重调度触发器实验为诚实阴性。 证据:results/online/online_val_causal/。
results/online/online_val_causal/
b411f07f…7280
96730abc…65ad
numpy + 标准库
results/os_compat/evidence/
build.log
packages_native.txt
evidence.json
results/benchmark/transformer_*
results/ceed100/transformer_run1/
results/benchmark/distill_topk_*
results/p3/conformal_gate_v2_*
results/os_compat/
每个创新点的「方法 / 数字 / 答辩口径 / 对答预案」详见 docs/INNOVATION.md。
docs/INNOVATION.md
src/sched/ env/ DAG、异构资源、静态与在线仿真器(唯一 makespan 真值 compute_makespan) scenarios/ 场景生成、加载与数据划分(固定种子区间,零重叠) policies/ 统一 Policy 接口 + 启发式 / RL / 安全选择器 / 蒸馏 Top-K training/ 自研 PPO、rollout、四阶段课程学习与训练入口 evaluation/ 公平评测器与指标汇总(逐实例比值 + win_rate + 分位数) utils/ 配置、IO 与随机种子工具 scripts/ 训练、评测、基准矩阵、蒸馏、Conformal、在线、OS 兼容复现脚本 configs/ 场景 / 模型 / 训练配置(换规模与异构度只改 YAML) web/ Flask + ECharts 可视化与因果在线演示台 tests/ 核心逻辑与 API 测试(58 项)
统一接口契约:所有调度方法实现 Policy.assign(dag, res) -> {task: node},经同一个确定性仿真器计算 makespan; RL 的联合动作 task × node 与 ready-task action mask 在训练与推理阶段完全一致,保证行为可复现、口径可比较。
Policy.assign(dag, res) -> {task: node}
task × node
┌────────────── 候选生成(多样性)──────────────┐ DAG + 资源 ──▶ │ HEFT / HEFT-ins / CPOP / PEFT / Lookahead / │ │ EMD / CP-priority / RL 多样本 rlk_K │ └──────────────────────┬─────────────────────────┘ ▼ SafeSelector:逐一真实仿真,取 makespan 最小 ▼ 输出(可证明 ≥ 池内最强单候选)
环境:Python ≥ 3.10,CPU 即可,无显卡要求。以下命令均在仓库根目录执行。
# 建议虚拟环境 python -m venv .venv && source .venv/bin/activate # 安装(torch 用 CPU 构建即可;本项目不依赖 GPU) python -m pip install -r requirements.txt
# ── 第 1 步:生成固定场景 ───────────────────────────────────────────── # 由 configs/scenarios_default.yaml 驱动,生成 train=600 / val=200 / test=200, # 三个划分使用互不重叠的固定种子区间(base_seed=1234),保证可复现、零泄漏。 python scripts/generate_scenarios.py --config configs/scenarios_default.yaml # ── 第 2 步:训练 Transformer 课程 PPO(一键完成训练 + 训练中 val 评测)── # 产出 best.pt / final.pt / summary.json / train_log.json,无需改任何代码。 # 配置见 configs/train_attn_ppo.yaml:hidden=128, n_layers=3, heads=8, # 4 阶段课程(<=15t -> <=30t -> <=50t -> 全尺寸),PPO 300 iter。 # CPU 上约 2.7 小时;想先跑通可临时把 total_iterations 调小。 python scripts/run_train.py --config configs/train_attn_ppo.yaml # ── 第 3 步:单 split 公平评测(HEFT / 随机 / RL 同口径比较)────────── # 加载第 2 步产出的 checkpoint,在 val 上跑统一评测器,产出 summary.json。 python scripts/run_eval.py \ --data data/scenarios \ --split val \ --rl_ckpt results/rl_transformer/best.pt \ --out results/summary_val.json # ── 第 4 步:完整策略矩阵(多策略 + 逐场景 + 独立计时)───────────────── # 注册表支持 heft / heft_insertion / cpop / peft / lookahead / emd / # cp_priority / random / rl / rlk_K / safe[...] / distilled_topk。 # 输出 summary.json(含 mean_ratio / win_rate / 分位数 / 每场景结果)+ per_scenario.csv。 python scripts/benchmark_matrix.py \ --data data/scenarios \ --split val \ --policies 'heft,heft_insertion,peft,rlk_10,safe[rlk_10+peft+heft_insertion]' \ --rl_ckpt results/rl_transformer/best.pt \ --name final_val # ── 第 5 步:启动 Web 可视化与在线演示台 ─────────────────────────────── python web/app.py # 访问 http://localhost:5050
# 多 seed 统计(5 seed × 5 split,对应「核心结果 §2」) bash scripts/run_phase4_master.sh # 串行训练 seeds 45/46 + 五 split 评测 python scripts/core_evidence_stats.py # -> results/core_evidence/multiseed_stats.{json,md} # 质量-时延 Pareto(对应「核心结果 §3」,逐策略独立计时) python scripts/pareto_comparison.py # -> results/core_evidence/pareto/ # 蒸馏 Top-K(对应「核心结果 §4」,无 torch 依赖) python scripts/train_distilled_selector.py # 训练逐候选回归器 python scripts/benchmark_matrix.py --data data/scenarios --split val \ --policies 'distilled_topk' --name distill_val # Conformal 覆盖校准 + OOD 检测(对应「核心结果 §5」) python scripts/conformal_gate.py # 因果在线评测(对应「核心结果 §6」,online_lookahead=False 纯因果) python scripts/online_benchmark.py # 国产 OS 逐位复现(对应「核心结果 §7」,需对应 OS 环境/容器) bash scripts/os_compat/run_os_compat.sh # L1 轻量核心 bash scripts/os_compat/run_os_compat.sh v2 # L2 v2 场景 bash scripts/os_compat/run_openeuler_full.sh # L3 openEuler 完整 DRL 链路
固定挑战集 CEED-100 的 manifest 与场景已入库(data/ceed100/、data/ceed100_v2/),无需重新生成即可复现消融与评测; v2 的 hidden_test 仅存 sha256 指纹、不落盘场景,防止方法开发期偷看。
data/ceed100/
data/ceed100_v2/
hidden_test
python web/app.py # 默认 http://localhost:5050
/
/api/overview
/schedule
/generalization
/robustness
/conformal
/online
/demo-online
/challenge
/oscompat
所有页面的 makespan / ratio / 重调度次数 / 决策耗时均来自真实在线仿真,无任何硬编码指标或假动画。 演示台默认策略 SafeOnlineSelector(online_lookahead=False)(纯因果在线)。 录制说明见 演示台操作 与 ≤5 分钟录制脚本。
SafeOnlineSelector(online_lookahead=False)
dr-ce-scheduler/ ├── src/sched/ 框架核心(env / scenarios / policies / training / evaluation / utils) ├── scripts/ 训练 / 评测 / 基准矩阵 / 蒸馏 / Conformal / 在线 / OS 复现脚本 ├── configs/ 场景、模型与训练 YAML(换规模/异构度只改配置) ├── web/ Flask + ECharts 前端与因果在线演示台 ├── tests/ 58 项核心逻辑与 API 测试 ├── data/ │ ├── scenarios/ 生成数据(train/val/test,可由脚本重生成) │ ├── scenarios_ood/ OOD 40 任务场景 │ ├── ceed100/ 固定挑战集 v1(manifest + 场景,入库) │ └── ceed100_v2/ 固定挑战集 v2(public/hidden_val 入库,hidden_test 仅指纹) ├── results/ 结果与逐场景记录(benchmark / core_evidence / ceed100 / os_compat / logs …) ├── docs/ 设计与答辩文档(见下方索引) └── iterations/ 阶段状态与项目摘要
nohup
以下三份生成于 Phase 2 P0 修复之前的旧评测协议(各策略 order 不一致),其具体数字已被 INNOVATION.md 与 results/core_evidence/ 取代,请勿引用其中数字,仅作演进记录保留。
results/core_evidence/
python -m pytest -q # 58 passed
覆盖:DAG / 仿真器确定性、action mask 训练-推理一致性、各策略与选择器、蒸馏、Conformal、在线仿真、OS 兼容 API。
data/scenarios
data/scenarios_ood
data/ceed100
data/ceed100_v2
mean_ratio = mean(策略 makespan / HEFT makespan)
本项目把「可复现」与「诚实口径」作为一等公民:
(场景id, 策略, round(makespan,6))
赛题 #16 · 基于深度强化学习的云-边-端异构计算资源管理调度方法
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
DRL 云-边-端异构资源调度框架
面向赛题 #16《基于深度强化学习的云-边-端异构计算资源管理调度方法》 的完整开源实现: 一套可训练、可插拔、可复现的 DAG 调度框架,把「专家启发式 + Transformer 课程强化学习候选 + 仿真择优安全选择」 统一到同一个
Policy接口与同一个 makespan 仿真器下公平比较,并附带蒸馏快速策略、Conformal 校准、 因果在线重调度,以及在三大国产操作系统上的逐位可复现证据链。目录
为什么值得看(亮点)
SafeSelector对候选池(7 种启发式 + RL 多样本rlk_K)逐一真实仿真取 makespan 最小者——框架输出可证明不差于池内最强单候选,RL 候选即使不完美也能带来净收益。rlk_51.0009,旧 GNN 为 1.0893,−0.088)。问题定义
给定任务有向无环图
G=(V,E)与云、边、端异构计算资源:i ∈ V携带计算量w_i;依赖边(i→j) ∈ E携带数据量d_ij,仅当两任务被分到不同节点时产生通信开销。n具有异构计算速度speed_n,节点间为带宽矩阵B;单处理机串行执行模型。主指标(全文统一口径):
mean_ratio越低越好,**< 1 表示平均优于 HEFT**,HEFT 恒等于 1.0。MDP 建模(状态 / 联合动作
a = task·N + node/ ready-task action mask / 归一化稀疏奖励r = 1 − makespan/HEFT_makespan) 与代码一一对应,详见 系统设计 与 创新点 §8.1。核心结果
1. 主方法三划分(代表 checkpoint,seed=42)
方法 =
safe[rlk_10+peft+heft_insertion](RL 多样本 + 启发式候选,仿真择优)。三个划分均严格优于任一单候选(如
rlk_10单列 0.9436 / 0.9609 / 0.9834),验证「安全选择带来净收益」。2. 五随机种子统计(消除单 checkpoint 偶然性)
主方法用 5 个 Transformer 种子(42–46,同配置仅改 seed)复跑五个划分,
mean ± std:3. 质量–时延 Pareto(val 划分,同机同口径独立计时)
safe[rlk_10+peft+heft_insertion]rlk_10safe[纯启发式 6 候选]heft_insertionpeftheft(基线)4. 蒸馏 Top-K 工程策略(无 torch 依赖,sklearn pickle)
safe[rlk_10+…](0.9404)5. Conformal 覆盖校准与 OOD 检测
6. 因果在线重调度(val 200 场景)
7. 国产 OS 逐位可复现
b411f07f…728096730abc…65adnumpy + 标准库,全部走各发行版原生软件源(dnf / apt),无第三方源、无编译。results/os_compat/evidence/(每系统含build.log/packages_native.txt/evidence.json等可审计文件)。六大创新点
results/benchmark/transformer_*rlk_51.0009(旧 GNN 1.0893)results/ceed100/transformer_run1/results/benchmark/distill_topk_*results/p3/conformal_gate_v2_*results/online/online_val_causal/results/os_compat/每个创新点的「方法 / 数字 / 答辩口径 / 对答预案」详见
docs/INNOVATION.md。系统架构
统一接口契约:所有调度方法实现
Policy.assign(dag, res) -> {task: node},经同一个确定性仿真器计算 makespan; RL 的联合动作task × node与 ready-task action mask 在训练与推理阶段完全一致,保证行为可复现、口径可比较。快速开始(一键复现)
0. 安装依赖
一键复现主流程(带注释)
复现论文级证据(可选,对应核心结果各表)
Web 可视化与在线演示台
//api/overview)/schedule/generalization/robustness/conformal/online/demo-online/challenge/oscompatresults/证据文件存在性实时计算,可当场审计所有页面的 makespan / ratio / 重调度次数 / 决策耗时均来自真实在线仿真,无任何硬编码指标或假动画。 演示台默认策略
SafeOnlineSelector(online_lookahead=False)(纯因果在线)。 录制说明见 演示台操作 与 ≤5 分钟录制脚本。仓库结构
文档索引(含摘要)
核心文档(当前可信,优先阅读)
/demo-online因果在线演示台的录屏流程与预设(节点故障等)。工程与部署文档
nohup跑长训练。历史参考文档(基于旧评测协议,数字仅供溯源)
测试
覆盖:DAG / 仿真器确定性、action mask 训练-推理一致性、各策略与选择器、蒸馏、Conformal、在线仿真、OS 兼容 API。
数据集与评测口径
data/scenariosdata/scenarios_ooddata/ceed100data/ceed100_v2mean_ratio = mean(策略 makespan / HEFT makespan),逐实例取比值再平均;辅助 win_rate / std / P90 / P95。可复现性与诚实边界
本项目把「可复现」与「诚实口径」作为一等公民:
(场景id, 策略, round(makespan,6))有序序列的 sha256;跨三套 numpy 版本与三大国产 OS 逐位一致。hidden_test仅存指纹;指纹在全部策略跑完后统一计算,无法事后修改单条。赛题 #16 · 基于深度强化学习的云-边-端异构计算资源管理调度方法