Go to file
superfw e536507a48 docs: 重写 README,补全一键复现流程、核心结果表与文档摘要
- 新增亮点速览、问题定义与统一指标口径
- 核心结果直接展示:三划分主表、5-seed 统计、质量-时延 Pareto、
  蒸馏 Top-K、Conformal、因果在线、国产 OS 逐位复现
- 一键复现脚本带注释(生成/训练/评测/策略矩阵/Web)+ 论文级证据复现命令
- 文档索引按「核心/工程部署/历史参考」分类并逐篇加摘要,标注旧协议文档勿引用
- 补充数据集口径与诚实边界声明
2026-07-30 16:59:29 +08:00
configs docs: Phase 5c-α 结果——单补特征不足以让 RL 在 v2 反超 HEFT 2026-07-28 14:21:23 +08:00
data data: meta_selector v2/v3 实验配置入库 2026-07-30 16:17:23 +08:00
docs docs: 完善项目说明与交付文档 2026-07-29 16:10:13 +08:00
iterations docs: 完善项目说明与交付文档 2026-07-29 16:10:13 +08:00
results data: 补充挑战集蒸馏与首轮运行日志 2026-07-30 15:49:30 +08:00
scripts docs: 完善项目说明与交付文档 2026-07-29 16:10:13 +08:00
src/sched docs: 完善项目说明与交付文档 2026-07-29 16:10:13 +08:00
swarm docs: 完善项目说明与交付文档 2026-07-29 16:10:13 +08:00
tasks docs: 完善项目说明与交付文档 2026-07-29 16:10:13 +08:00
tests
web docs: 完善项目说明与交付文档 2026-07-29 16:10:13 +08:00
.gitignore chore: 运行日志归档到 results/logs/,根目录不再散放 2026-07-30 15:48:08 +08:00
DAG初赛讲解视频.mp4 初赛要求文稿资料 2026-07-29 19:50:22 +08:00
README.md docs: 重写 README,补全一键复现流程、核心结果表与文档摘要 2026-07-30 16:59:29 +08:00
git
pyproject.toml
requirements.txt
操作系统开源创新大赛 作品原创承诺书.docx 初赛要求文稿资料 2026-07-29 19:50:22 +08:00
操作系统开源创新大赛项目答辩PPT.pptx 初赛要求文稿资料 2026-07-29 19:50:22 +08:00
操作系统开源创新大赛项目说明书.docx 初赛要求文稿资料 2026-07-29 19:50:22 +08:00

README.md

DRL 云-边-端异构资源调度框架

赛题#16 Python PyTorch CPU 53 tests 国产操作系统 MIT

面向赛题 #16《基于深度强化学习的云-边-端异构计算资源管理调度方法》 的完整开源实现: 一套可训练、可插拔、可复现的 DAG 调度框架,把「专家启发式 + Transformer 课程强化学习候选 + 仿真择优安全选择」 统一到同一个 Policy 接口与同一个 makespan 仿真器下公平比较并附带蒸馏快速策略、Conformal 校准、 因果在线重调度,以及在三大国产操作系统上的逐位可复现证据链。

一句话结果:主方法 safe[rlk_10+peft+heft_insertion] 在三个独立划分上全面优于 HEFT 基线 mean_ratio val 0.9322 / test 0.9427 / OOD 0.9404HEFT=1.0,越低越好), 且经 5 个随机种子复跑确认std ≤ 0.0041),并在 openEuler / openKylin / OpenCloudOS 上逐位复现


目录


为什么值得看(亮点)

  • 🏗️ 候选生成与安全选择解耦的混合框架SafeSelector 对候选池7 种启发式 + RL 多样本 rlk_K)逐一真实仿真取 makespan 最小者——框架输出可证明不差于池内最强单候选RL 候选即使不完美也能带来净收益。
  • 🤖 Transformer + 四阶段课程 PPODAG 边偏置 self-attention + 节点 cross-attention + 上下文感知解码器;让 RL 候选首次给安全选择器带来净收益CEED-100 上 rlk_5 1.0009,旧 GNN 为 1.08930.088)。
  • 蒸馏 Top-K 工程策略50 维结构特征预测候选排序,只真实运行最有希望的 K 个;~24 ms 逼近仿真择优上界OOD 上反超含 RL 的完整方法0.9373 vs 0.9404)。
  • 📐 Conformal 覆盖校准 + OOD 检测:分布内对候选集合做 split conformal 校准coverage ≈ 0.90),分布外用 KS 检验识别偏移并主动保守回退
  • 🔄 因果在线重调度(诚实口径):事件驱动在线仿真(节点失效/恢复、速度/带宽波动、工作负载揭示);正式评测不读取未来事件,预知结果只作为 Oracle 上界单独标注。
  • 🇨🇳 三大国产 OS 逐位可复现 + 可审计证据链:同一份代码 + 数据,在 openEuler / openKylin / OpenCloudOS 原生软件源部署,1440 个 makespan800 + 640跨系统逐位一致,每个系统附完整安装/执行/包来源证据。
  • 📊 统计严谨:主方法 5 个随机种子复跑、逐实例比值均值 + win_rate + 配对 t-test单 checkpoint 的偶然性已闭环排除。
  • 🖥️ 开箱即用的前端Flask + ECharts 9 个页面含可当场审计的「因果在线演示台」与「OS 兼容覆盖矩阵」(按证据文件存在性实时计算,删一个证据文件对应单元格立即变灰)。

问题定义

给定任务有向无环图 G=(V,E) 与云、边、端异构计算资源:

  • 任务 i ∈ V 携带计算量 w_i;依赖边 (i→j) ∈ E 携带数据量 d_ij,仅当两任务被分到不同节点时产生通信开销。
  • 节点 n 具有异构计算速度 speed_n,节点间为带宽矩阵 B;单处理机串行执行模型。
  • 调度器需在满足依赖与合法动作约束下,为每个就绪任务选择执行节点,最小化整体完成时间makespan

主指标(全文统一口径):

mean_ratio = mean_over_scenarios( policy_makespan / HEFT_makespan )

mean_ratio 越低越好< 1 表示平均优于 HEFTHEFT 恒等于 1.0。

MDP 建模(状态 / 联合动作 a = task·N + node / ready-task action mask / 归一化稀疏奖励 r = 1 makespan/HEFT_makespan 与代码一一对应,详见 系统设计创新点 §8.1


核心结果

全部数字来自本仓库 results/ 下的真实评测产物非手填。HEFT=1.0,越低越好。

1. 主方法三划分(代表 checkpointseed=42

方法 = safe[rlk_10+peft+heft_insertion]RL 多样本 + 启发式候选,仿真择优)。

划分 场景数 mean_ratio win_rate 相对 HEFT
val 200 0.9322 0.795 6.8%
test 200 0.9427 0.765 5.7%
OOD40 任务) 100 0.9404 0.850 6.0%

三个划分均严格优于任一单候选(如 rlk_10 单列 0.9436 / 0.9609 / 0.9834),验证「安全选择带来净收益」。

2. 五随机种子统计(消除单 checkpoint 偶然性)

主方法用 5 个 Transformer 种子4246同配置仅改 seed复跑五个划分mean ± std

划分 safe[rlk_10+peft+heft_ins] rlk_10 rlk_5
val 0.9380 ± 0.0041 0.9648 ± 0.0179 0.9725 ± 0.0183
test 0.9467 ± 0.0037 0.9752 ± 0.0178 0.9836 ± 0.0195
OOD 0.9398 ± 0.0023 0.9842 ± 0.0153 0.9933 ± 0.0190
CEED-100 v2 public 0.9629 ± 0.0012 1.0774 ± 0.0139 1.0886 ± 0.0126
CEED-100 v2 hidden_val 0.9738 ± 0.0019

主方法 std 全部 ≤ 0.0041,远小于单 RL 候选的 ~0.018;配对 t-test 表明 seed42 非「幸运种子」。 注意 v2 上单 RL 候选 rlk_* > 1.0RL 在通信主导 regime 泛化有限),但安全选择靠启发式候选兜底仍稳超 HEFT——这正是混合框架的价值所在。 证据:results/core_evidence/multiseed_stats.md5 seed × 5 split = 25 个逐场景目录)。

3. 质量–时延 Paretoval 划分,同机同口径独立计时)

策略 mean_ratio win_rate 推理 ms/场景 Pareto 前沿
safe[rlk_10+peft+heft_insertion] 0.9322 0.795 1567.6
rlk_10 0.9436 0.735 1544.6
safe[纯启发式 6 候选] 0.9453 0.720 37.7
蒸馏 Top-K=3 0.9476 ~24
heft_insertion 0.9712 0.390 3.2
peft 0.9747 0.470 4.3
heft(基线) 1.0000 0.000 3.7

提供从「极致质量」到「极致时延」的完整可调谱系:蒸馏 Top-K 以约 1/65 的推理时延逼近仿真择优上界。 证据:results/core_evidence/pareto/pareto.md

4. 蒸馏 Top-K 工程策略(无 torch 依赖sklearn pickle

划分 mean_ratio 说明
val 0.9476 距 oracle 择优上界 0.9453 仅 0.0023
test 0.9557
OOD 0.9373 win 0.840反超含 RL 的 safe[rlk_10+…]0.9404

5. Conformal 覆盖校准与 OOD 检测

划分 coverage avg_K regret 加速
val 0.895 3.3 +0.0013 1.14×
test 0.905 3.4 +0.0023 1.16×
OOD 0.77 0.0078

OOD 的 coverage 0.77 是 KS 检测信号p≈0识别到分布偏移而非缺陷——触发后全局回退保守启发式。 证据:results/p3/conformal_gate_v2_*.md

6. 因果在线重调度val 200 场景)

方法 mean_ratio 口径
SafeOnlineSelector因果在线 1.3470 主表数字,不读取未来事件
Oracle 上界(预知未来事件) 1.1207 仅作上界,不进主表

因果–预知 gap = 0.226,经诊断为信息差距oracle 提前避障),非触发时机问题;重调度触发器实验为诚实阴性。 证据:results/online/online_val_causal/

7. 国产 OS 逐位可复现

内容 覆盖系统 指纹
L1 轻量核心 8 策略 × CEED-100 v1100 场景)= 800 makespan openEuler / openKylin / OpenCloudOS b411f07f…7280
L2 v2 场景 8 策略 × CEED-100 v280 场景)= 640 makespan openEuler / openKylin / OpenCloudOS 96730abc…65ad
L3 完整 DRL torch + Transformer 三 split + 全量 pytest + Flask openEuler 与主链路 4 位小数一致
  • 轻量核心仅依赖 numpy + 标准库,全部走各发行版原生软件源dnf / apt无第三方源、无编译。
  • 跨三套不同 numpy 版本1.24.2 / 1.24.3 / 1.25.2)结果逐位一致,峰值内存 3543 MB,容器冷启动 246328 ms。
  • openEuler 完整链路torch 2.13.0+cpu全量 53 项测试通过Transformer 固定 ckpt 三 split 与开发机逐位一致。
  • 证据:results/os_compat/evidence/(每系统含 build.log / packages_native.txt / evidence.json 等可审计文件)。

六大创新点

# 创新点 一句话主张 关键数字 证据位置
1 混合调度框架 候选生成与安全选择分离,稳超任一单候选 val/test/OOD 0.9322 / 0.9427 / 0.9404 results/benchmark/transformer_*
2 Transformer + 课程 RL RL 候选首次给安全选择器带来净收益 CEED rlk_5 1.0009(旧 GNN 1.0893 results/ceed100/transformer_run1/
3 蒸馏 Top-K 工程化 ~24 ms 逼近上界OOD 反超含 RL 版 K=3OOD 0.9373 results/benchmark/distill_topk_*
4 Conformal + OOD 检测 ID 覆盖校准OOD 用 KS 检测并保守回退 coverage ≈0.90OOD regret 0.0078 results/p3/conformal_gate_v2_*
5 因果在线调度 因果在线仍最优;预知数字只作上界 causal 1.3470 vs oracle 1.1207 results/online/online_val_causal/
6 国产 OS 可复现 + 证据链 三大国产 OS 装得上、跑得通、算得逐位一致 800+640 makespan 指纹匹配 results/os_compat/

每个创新点的「方法 / 数字 / 答辩口径 / 对答预案」详见 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 测试53 项)

统一接口契约:所有调度方法实现 Policy.assign(dag, res) -> {task: node},经同一个确定性仿真器计算 makespan RL 的联合动作 task × node 与 ready-task action mask 在训练与推理阶段完全一致,保证行为可复现、口径可比较。

                 ┌────────────── 候选生成(多样性)──────────────┐
  DAG + 资源 ──▶ │ HEFT / HEFT-ins / CPOP / PEFT / Lookahead /    │
                 │ EMD / CP-priority / RL 多样本 rlk_K            │
                 └──────────────────────┬─────────────────────────┘
                                        ▼
                       SafeSelector逐一真实仿真取 makespan 最小
                                        ▼
                          输出(可证明 ≥ 池内最强单候选)

快速开始(一键复现)

环境Python ≥ 3.10CPU 即可,无显卡要求。以下命令均在仓库根目录执行。

0. 安装依赖

# 建议虚拟环境
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.yamlhidden=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 指纹、不落盘场景,防止方法开发期偷看。


Web 可视化与在线演示台

python web/app.py            # 默认 http://localhost:5050
页面 路径 内容
总览 / 项目与核心指标概览(/api/overview
静态调度对比 /schedule 单场景 RL vs HEFT 甘特图对比val_00000HEFT 8.316 → RL 6.27325%
泛化分析 /generalization 三划分 + 挑战集泛化5-seed std ≤ 0.004
鲁棒性 /robustness 扰动下的稳定性
Conformal /conformal 覆盖校准与 OOD 检测可视化
在线调度 /online 事件驱动在线仿真结果
因果在线演示台 /demo-online 节点失效/带宽波动等预设,实时因果调度 vs HEFT主秀
挑战集 /challenge CEED-100 固定挑战集运行与逐场景结果
OS 兼容 /oscompat 覆盖矩阵按 results/ 证据文件存在性实时计算,可当场审计

所有页面的 makespan / ratio / 重调度次数 / 决策耗时均来自真实在线仿真,无任何硬编码指标或假动画。 演示台默认策略 SafeOnlineSelector(online_lookahead=False)(纯因果在线)。 录制说明见 演示台操作≤5 分钟录制脚本


仓库结构

dr-ce-scheduler/
├── src/sched/            框架核心env / scenarios / policies / training / evaluation / utils
├── scripts/              训练 / 评测 / 基准矩阵 / 蒸馏 / Conformal / 在线 / OS 复现脚本
├── configs/              场景、模型与训练 YAML换规模/异构度只改配置)
├── web/                  Flask + ECharts 前端与因果在线演示台
├── tests/                53 项核心逻辑与 API 测试
├── data/
│   ├── scenarios/        生成数据train/val/test可由脚本重生成
│   ├── scenarios_ood/    OOD 40 任务场景
│   ├── ceed100/          固定挑战集 v1manifest + 场景,入库)
│   └── ceed100_v2/       固定挑战集 v2public/hidden_val 入库hidden_test 仅指纹)
├── results/              结果与逐场景记录benchmark / core_evidence / ceed100 / os_compat / logs …)
├── docs/                 设计与答辩文档(见下方索引)
└── iterations/           阶段状态与项目摘要

文档索引(含摘要)

核心文档(当前可信,优先阅读)

文档 摘要
创新点与答辩依据 最重要的一份。六大创新点「一句话主张 + 关键数字 + 证据位置」,附赛题评分细则(功能 40 / 性能 35 / 文档 25逐项自查表、5-seed 统计口径与答辩对答预案。
系统设计 问题建模、MDP状态/动作/掩码/奖励公式、五层架构与接口契约、reward 归一化的设计原因。
复现实验 运行命令、配置文件、关键超参表、数据划分train600/val200/test200零重叠、输出路径与依赖版本。
国产 OS 兼容与复现 三层递进实验L1 轻量核心 / L2 v2 场景 / L3 完整 DRL、指纹与数值结果、文件级证据链与答辩预案。
演示台操作说明 /demo-online 因果在线演示台的录屏流程与预设(节点故障等)。
演示视频录制脚本 ≤5 分钟初赛视频的逐场景时间表、画面操作、逐字旁白、字幕与数字速查表。

工程与部署文档

文档 摘要
极简部署 3 步约 5 分钟,把项目传到无显卡 Linux 服务器并用 nohup 跑长训练。
无人值守部署 一次性在服务器上跑完全部训练变体rsync 同步 + 后台执行)。
自动化实验闭环 把 DRL 调参从手工转为可复现/可扩展/可并行的实验流程:实验控制器 + 独立执行进程 + 结构化记分牌。

历史参考文档(基于旧评测协议,数字仅供溯源)

以下三份生成于 Phase 2 P0 修复之前的旧评测协议(各策略 order 不一致),其具体数字已被 INNOVATION.mdresults/core_evidence/ 取代,请勿引用其中数字,仅作演进记录保留。

文档 摘要
评测与结果(历史) 旧评测协议下的结果;顶部含 P0 修复声明,修复后同 ckpt val 1.0085 → 1.0450。
泛化分析(历史) / test 版 旧协议下的 val / test 子集泛化分析。
鲁棒性扰动(历史) 旧协议下的静态参数扰动泛化(非执行中故障与在线恢复)。

测试

python -m pytest -q          # 53 passed

覆盖DAG / 仿真器确定性、action mask 训练-推理一致性、各策略与选择器、蒸馏、Conformal、在线仿真、OS 兼容 API。


数据集与评测口径

数据集 规模 用途 说明
data/scenarios train 600 / val 200 / test 200 训练与分布内评测 固定种子区间零重叠base_seed=1234
data/scenarios_ood 100 × 40 任务 OOD 规模外泛化 训练未见过的更大实例
data/ceed100 100 场景 固定挑战集 v1 manifest 入库,不重生成
data/ceed100_v2 public 60 / hidden_val 20 / hidden_test 仅指纹 固定挑战集 v2 防偷看hidden_test 不落盘场景
  • 指标mean_ratio = mean(策略 makespan / HEFT makespan),逐实例取比值再平均;辅助 win_rate / std / P90 / P95。
  • 时延Pareto 表中各策略同机、同口径独立计时;纯启发式 SafeSelector 耗时不冒充含 RL 方法耗时。
  • 因果口径在线评测主表只用因果数字预知结果一律标注「Oracle 上界」。

可复现性与诚实边界

本项目把「可复现」与「诚实口径」作为一等公民:

  • 逐位可复现:仿真器为确定性纯 Python 实现makespan 指纹 = (场景id, 策略, round(makespan,6)) 有序序列的 sha256跨三套 numpy 版本与三大国产 OS 逐位一致。
  • 统计严谨:主方法 5 个随机种子复跑std ≤ 0.0041,配对 t-test 排除幸运种子。
  • 防偷看CEED-100 v2 hidden_test 仅存指纹;指纹在全部策略跑完后统一计算,无法事后修改单条。
  • ⚠️ 已知边界(如实声明):在 40 任务 OOD 与 CEED-100 v2 等通信主导 regime 上,单 RL 候选泛化有限rlk_* > 1.0),此时由安全选择器中的启发式候选兜底;纯启发式 SafeSelector 在质量–时延 Pareto 上更优,工程交付可采用蒸馏 Top-K 或启发式安全池。我们对此做了完整的根因诊断(通信主导 + 绝对位置编码尺寸外推弱),而非回避。

赛题 #16 · 基于深度强化学习的云-边-端异构计算资源管理调度方法