Delete TRAINING_DELIVERY.json
让工作流调度,从启发式走向可学习、可验证。
云—边—端异构工作流调度 · 轻量强化学习 · 可复现评测
快速开始 · 界面展示 · 实验结果 · 方法设计 · 训练与复现 · 文档导航
CEOSched-RL 是一套面向云、边、端异构计算环境的工作流调度与强化学习训练评测框架。它将工作流表示为有向无环图(DAG),联合决定下一步选择哪个就绪任务、将任务分配到哪个可行节点,在依赖、资源与通信约束下优化总完成时间(makespan)。
从场景配置、策略训练到排程校验与可视化,项目提供一条可运行、可检查、可扩展的实验流程,适用于静态异构工作流调度研究、策略比较与教学展示。
真实运行截图:使用本次训练生成的模型进行调度,查看 DAG、任务详情与完成时间。
推荐 Linux x86_64 / WSL2 + Conda + Python 3.10。常规运行使用 CPU,无需 GPU、Node.js 或外部 AI API。
克隆或解压完整项目后,进入包含 demo/、tests/ 和 src/ 的项目根目录。以下命令均从该目录执行:
demo/
tests/
src/
# 创建项目提供的独立 CPU 环境 export CORE_DIR="$PWD/src/ceosched-rl" conda env create -f "$CORE_DIR/environment/conda.yaml" conda activate ceosched-rl-cpu # 指定解释器并检查运行条件 export PYTHON_BIN="$CONDA_PREFIX/bin/python" bash "$CORE_DIR/run.sh" --doctor
项目直接运行 Python 源码,无需前端打包;Numba 在首次调用时编译。首次安装依赖需要网络,环境就绪后可本地运行。
固定 CPU 环境配置见 environment/conda.yaml。
environment/conda.yaml
仅执行通用的 pip install -e . 不会配齐正式方法所需依赖。先创建上述环境;如需安装命令行包,再执行:
pip install -e .
"$PYTHON_BIN" -m pip install --no-deps --no-build-isolation -e "$CORE_DIR"
图表重绘另需 Matplotlib。原生 Windows 未作为正式验收环境;CUDA 为可选训练路径,缓存推理仍在 CPU 上执行。
bash demo/run.sh
浏览器打开 **http://127.0.0.1:8765**,选择场景和策略,执行调度即可查看结果。
端口冲突时使用 bash demo/run.sh --port 8875。只想浏览内置示例,可直接打开 demo/index.html;静态页面展示冻结数据,真实调度和训练需启动服务。
bash demo/run.sh --port 8875
demo/index.html
"$PYTHON_BIN" demo/worker.py \ --request demo/request.json \ --output runs/demo_01
结果包含 result.json、records.json、trace.json、receipt.json 等文件,可检查排程、逐步动作和运行身份。输出目录需为新目录,再次运行请更换名称。
result.json
records.json
trace.json
receipt.json
展示任务落在哪个节点、何时执行,以及排程是否通过独立校验。此图来自随包保留的冻结演示记录。
曲线展示训练样本代价与 Train 内部开发集指标;完整训练完成后再进行四域验证。
此图对应演示中本次训练的结果;下方主成绩表使用正式冻结模型,两者分别保留。
正式主方法为 **R10 三种子冻结模型 + CachedContextPolicy**。以相同场景下的 HEFT-Append 为基准,统计逐场景完成时间比值:
CachedContextPolicy
Ratio=makespanCEOSched-RLmakespanHEFT-Append\mathrm{Ratio}=\frac{\mathrm{makespan}_{\mathrm{CEOSched\text{-}RL}}}{\mathrm{makespan}_{\mathrm{HEFT\text{-}Append}}}Ratio=makespanHEFT-AppendmakespanCEOSched-RL
Ratio 越低越好,低于 1 表示完成时间更短。 下表为三个固定种子的均值及种子间样本标准差。
数据来源:域汇总 CSV · 逐实例冻结记录 · 结果与分析
统计口径: 共 369 个场景、1107 条三种子记录,全部为有效排程;其中保留了 133 条相对 HEFT-Append 退化的记录。改善率为 1 − mean_ratio,不代表每个实例都更优。Synthetic 的 288 个场景来自 24 个拓扑的变体,场景数不等于独立拓扑数。
1 − mean_ratio
公开 Validation 参与过历史开发;RNC300 的任务规模在训练范围内。以上结果用于公开验证集比较,不作为隐藏 Test 成绩或规模外推结论。
策略将一个调度动作分解为两步:先在就绪任务中选任务,再在其可行节点中选节点。
π(t,n∣s)=πtask(t∣s) πnode(n∣s,t)\pi(t,n\mid s)=\pi_{\mathrm{task}}(t\mid s)\;\pi_{\mathrm{node}}(n\mid s,t)π(t,n∣s)=πtask(t∣s)πnode(n∣s,t)
两个候选共享的 16 → 16 → 1 MLP 分别负责两阶段评分,包含可学习的先验系数,总计 582 个参数。上下文结合任务优先级、预计完成时间、乐观后继代价与剩余独占资源负载,使当前决策能够考虑后续任务的执行条件。
16 → 16 → 1
训练采用 PPO,以完整排程相对 HEFT 的归一化完成时间构造优化信号;同图多条轨迹通过 leave-one-out 基线降低方差。推理采用单轨迹 greedy 决策。
flowchart TD A["DAG、节点与通信配置"] --> B["调度状态与合法候选"] B --> C["任务评分:选择就绪任务"] C --> D["节点评分:选择可行节点"] D --> E["应用动作并更新状态"] E -->|仍有任务| B E -->|排程完成| F["独立校验器"] F --> G["结果、轨迹与运行收据"]
上图展示逻辑决策过程。缓存实现复用静态特征和动态统计量;预生成的动作序列由统一 Kernel 重放,再交给独立校验器检查。优化同时核对动作与排程一致性。
context_actor.py
context_training.py
fast_dispatch.py
context_inference.py
kernel.py
validation.py
当前正式方法使用上述上下文策略;仓库保留的早期 GNN 等研究模块不属于这组主成绩。
完成快速开始中的环境设置后,按目标选择一个命令。每次使用新的输出目录:
# 复核三个冻结模型:四域、369 个场景 bash "$CORE_DIR/run.sh" --evaluate-frozen --output "$PWD/runs/frozen_01" # 正式从头训练:3 个种子,各 1200 轮,再进行四域验证 bash "$CORE_DIR/run.sh" --submission --device cpu --output "$PWD/runs/train_01" # 流程检查:3 个种子,各 2 轮,不用于证明正式模型质量 bash "$CORE_DIR/run.sh" --smoke --output "$PWD/runs/smoke_01"
训练配置见 r10_context_multiseed.json,种子为 2026 / 2027 / 2028。选模使用 Train 内部开发集;输出包含模型、阶段日志、report.html、summary.json、scoreboard.csv 和逐实例记录。
r10_context_multiseed.json
2026 / 2027 / 2028
report.html
summary.json
scoreboard.csv
成功运行应同时满足:退出码为 0、receipt.json 中 status=complete、summary.json 中 acceptance.passed=true。正式重训按预设门槛验收:零失败、每域每种子平均 Ratio 小于 1,且域三种子均值不超过冻结值加 0.015。
0
status=complete
acceptance.passed=true
0.015
正式全链验收预算为 4 CPU、16 GiB 内存、7200 秒,属于验收配置;实际耗时随硬件与环境变化。可视化训练结果保存在 runs/interactive-demo/。关闭网页不会停止训练,请使用页面停止按钮或停止所属服务。
runs/interactive-demo/
安装 Docker 后,在项目根目录构建依赖镜像并启动演示:
docker build \ -f src/ceosched-rl/containers/Dockerfile.submission.openEuler \ -t ceosched-rl:r10-openeuler-20260929 \ src/ceosched-rl bash demo/deploy.sh
访问 **http://127.0.0.1:8766**。首次构建需要网络;部署脚本以只读方式挂载源码,并独立保存结果。
演示容器默认配额为 4 CPU、2 GiB;正式完整训练应按 16 GiB 验收预算配置。更多镜像和部署选项见 演示说明 与 openEuler 文档。
项目将材料核验、回归测试、冻结复核与正式训练分开,便于按验证目标选择入口。
# 仅核对文件、统计与已记录门槛;只需 Python 标准库 python3 tests/tools/verify_materials.py # 核心回归、约束检查、插件与真实默认调度 "$PYTHON_BIN" tests/tools/run_validation.py \ --suite quick --output runs/check_quick_01 # 训练演示边界测试:单独执行,补充 quick 套件 PYTHONPATH=src/ceosched-rl/src:src/ceosched-rl:src/ceosched-rl/examples \ "$PYTHON_BIN" -m pytest tests/test_demo_training.py -q
完整测试入口见 测试说明 和 训练演示验收。run_validation.py 还提供 frozen、supplementary、train 套件;每次运行需指定新的输出目录。
run_validation.py
frozen
supplementary
train
原始证据位于 tests/materials/,统计报告位于 tests/reports/,结论索引见 tests/claims.json。下载后可本地打开 tests/index.html 浏览报告。随包历史验收记录与当前机器重新运行的结果分别保留。
tests/materials/
tests/reports/
tests/claims.json
tests/index.html
调度策略通过 reset(instance) 和 choose(kernel, deterministic=True) 接入,返回 Decision(task, node)。策略从 kernel.legal_actions() 选择合法动作,共用调度内核与独立校验器。
reset(instance)
choose(kernel, deterministic=True)
Decision(task, node)
kernel.legal_actions()
在 YAML 中声明外部策略即可接入评测:
policy_plugins: - id: my_policy class_path: my_package.module:MyPolicy kwargs: weight: 0.5 evaluation: policies: [heft, global_eft, my_policy]
以上为配置片段;完整接口、数据配置和可运行示例见 策略插件文档。任务规模、DAG 类型、节点能力与通信条件可通过 configs/ 调整。
configs/
demo/README.md
r10_reproduction.md
dataset_protocol.md
heft_semantics.md
r11_reproduction.md
tests/README.md
THIRD_PARTY_NOTICES.txt
核心代码位于 src/ceosched-rl/src/ceosched/;demo/ 提供交互入口,tests/ 保存验证工具和证据,src/ceosched-rl/artifacts/ 保存冻结模型及历史实验材料。
src/ceosched-rl/src/ceosched/
src/ceosched-rl/artifacts/
欢迎通过 Issue 或 Pull Request 讨论调度策略、场景配置、测试与文档。复现问题时,请附上运行命令、配置、随机种子、环境信息及相关日志;比较新策略时,请保留逐实例结果和独立校验记录。
项目自有源码采用 Apache License 2.0,第三方依赖与数据遵循各自许可证。
公开工作流数据来自 GrapheonRL Benchmark dataset v1.0(DOI: 10.5281/zenodo.18927122,CC BY 4.0),本项目使用 public_scalar_cpu_projection 转换。完整署名、转换说明与许可文本见 数据来源记录 和 第三方声明。
public_scalar_cpu_projection
感谢 HEFT、PEFT、PPO 等相关研究,以及 PyTorch、NumPy、Numba 和 openEuler 生态为本项目提供的方法与工程基础。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
CEOSched-RL
让工作流调度,从启发式走向可学习、可验证。
云—边—端异构工作流调度 · 轻量强化学习 · 可复现评测
快速开始 · 界面展示 · 实验结果 · 方法设计 · 训练与复现 · 文档导航
CEOSched-RL 是一套面向云、边、端异构计算环境的工作流调度与强化学习训练评测框架。它将工作流表示为有向无环图(DAG),联合决定下一步选择哪个就绪任务、将任务分配到哪个可行节点,在依赖、资源与通信约束下优化总完成时间(makespan)。
从场景配置、策略训练到排程校验与可视化,项目提供一条可运行、可检查、可扩展的实验流程,适用于静态异构工作流调度研究、策略比较与教学展示。
真实运行截图:使用本次训练生成的模型进行调度,查看 DAG、任务详情与完成时间。
为什么使用 CEOSched-RL?
🚀 快速开始
1. 准备环境
推荐 Linux x86_64 / WSL2 + Conda + Python 3.10。常规运行使用 CPU,无需 GPU、Node.js 或外部 AI API。
克隆或解压完整项目后,进入包含
demo/、tests/和src/的项目根目录。以下命令均从该目录执行:项目直接运行 Python 源码,无需前端打包;Numba 在首次调用时编译。首次安装依赖需要网络,环境就绪后可本地运行。
依赖版本与可选安装
固定 CPU 环境配置见
environment/conda.yaml。仅执行通用的
pip install -e .不会配齐正式方法所需依赖。先创建上述环境;如需安装命令行包,再执行:图表重绘另需 Matplotlib。原生 Windows 未作为正式验收环境;CUDA 为可选训练路径,缓存推理仍在 CPU 上执行。
2. 启动演示
浏览器打开 **http://127.0.0.1:8765**,选择场景和策略,执行调度即可查看结果。
端口冲突时使用
bash demo/run.sh --port 8875。只想浏览内置示例,可直接打开demo/index.html;静态页面展示冻结数据,真实调度和训练需启动服务。3. 运行一次无界面调度
结果包含
result.json、records.json、trace.json、receipt.json等文件,可检查排程、逐步动作和运行身份。输出目录需为新目录,再次运行请更换名称。🖼️ 界面展示
排程对照:同轴甘特图与独立校验
展示任务落在哪个节点、何时执行,以及排程是否通过独立校验。此图来自随包保留的冻结演示记录。
从头训练:三种子进度与实际训练曲线
曲线展示训练样本代价与 Train 内部开发集指标;完整训练完成后再进行四域验证。
训练完成:本次四域验证与新模型应用
此图对应演示中本次训练的结果;下方主成绩表使用正式冻结模型,两者分别保留。
📊 实验结果
正式主方法为 **R10 三种子冻结模型 +
CachedContextPolicy**。以相同场景下的 HEFT-Append 为基准,统计逐场景完成时间比值:Ratio=makespanHEFT-AppendmakespanCEOSched-RL
Ratio 越低越好,低于 1 表示完成时间更短。 下表为三个固定种子的均值及种子间样本标准差。
数据来源:域汇总 CSV · 逐实例冻结记录 · 结果与分析
统计口径: 共 369 个场景、1107 条三种子记录,全部为有效排程;其中保留了 133 条相对 HEFT-Append 退化的记录。改善率为
1 − mean_ratio,不代表每个实例都更优。Synthetic 的 288 个场景来自 24 个拓扑的变体,场景数不等于独立拓扑数。公开 Validation 参与过历史开发;RNC300 的任务规模在训练范围内。以上结果用于公开验证集比较,不作为隐藏 Test 成绩或规模外推结论。
🧠 方法设计
联合选择任务与节点
策略将一个调度动作分解为两步:先在就绪任务中选任务,再在其可行节点中选节点。
π(t,n∣s)=πtask(t∣s)πnode(n∣s,t)
两个候选共享的
16 → 16 → 1MLP 分别负责两阶段评分,包含可学习的先验系数,总计 582 个参数。上下文结合任务优先级、预计完成时间、乐观后继代价与剩余独占资源负载,使当前决策能够考虑后续任务的执行条件。训练采用 PPO,以完整排程相对 HEFT 的归一化完成时间构造优化信号;同图多条轨迹通过 leave-one-out 基线降低方差。推理采用单轨迹 greedy 决策。
从策略到可复核排程
flowchart TD A["DAG、节点与通信配置"] --> B["调度状态与合法候选"] B --> C["任务评分:选择就绪任务"] C --> D["节点评分:选择可行节点"] D --> E["应用动作并更新状态"] E -->|仍有任务| B E -->|排程完成| F["独立校验器"] F --> G["结果、轨迹与运行收据"]上图展示逻辑决策过程。缓存实现复用静态特征和动态统计量;预生成的动作序列由统一 Kernel 重放,再交给独立校验器检查。优化同时核对动作与排程一致性。
context_actor.pycontext_training.pyfast_dispatch.pycontext_inference.pykernel.py/validation.py当前正式方法使用上述上下文策略;仓库保留的早期 GNN 等研究模块不属于这组主成绩。
🔬 训练与复现
完成快速开始中的环境设置后,按目标选择一个命令。每次使用新的输出目录:
训练配置见
r10_context_multiseed.json,种子为2026 / 2027 / 2028。选模使用 Train 内部开发集;输出包含模型、阶段日志、report.html、summary.json、scoreboard.csv和逐实例记录。成功运行应同时满足:退出码为
0、receipt.json中status=complete、summary.json中acceptance.passed=true。正式重训按预设门槛验收:零失败、每域每种子平均 Ratio 小于 1,且域三种子均值不超过冻结值加0.015。openEuler 容器构建与运行
安装 Docker 后,在项目根目录构建依赖镜像并启动演示:
访问 **http://127.0.0.1:8766**。首次构建需要网络;部署脚本以只读方式挂载源码,并独立保存结果。
演示容器默认配额为 4 CPU、2 GiB;正式完整训练应按 16 GiB 验收预算配置。更多镜像和部署选项见 演示说明 与 openEuler 文档。
🧪 测试与验证
项目将材料核验、回归测试、冻结复核与正式训练分开,便于按验证目标选择入口。
完整测试入口见 测试说明 和 训练演示验收。
run_validation.py还提供frozen、supplementary、train套件;每次运行需指定新的输出目录。原始证据位于
tests/materials/,统计报告位于tests/reports/,结论索引见tests/claims.json。下载后可本地打开tests/index.html浏览报告。随包历史验收记录与当前机器重新运行的结果分别保留。🧩 扩展自己的策略
调度策略通过
reset(instance)和choose(kernel, deterministic=True)接入,返回Decision(task, node)。策略从kernel.legal_actions()选择合法动作,共用调度内核与独立校验器。在 YAML 中声明外部策略即可接入评测:
以上为配置片段;完整接口、数据配置和可运行示例见 策略插件文档。任务规模、DAG 类型、节点能力与通信条件可通过
configs/调整。📚 文档导航
demo/README.mdr10_reproduction.mddataset_protocol.mdheft_semantics.mdr11_reproduction.mdtests/README.mdTHIRD_PARTY_NOTICES.txt核心代码位于
src/ceosched-rl/src/ceosched/;demo/提供交互入口,tests/保存验证工具和证据,src/ceosched-rl/artifacts/保存冻结模型及历史实验材料。📌 已知限制
🤝 参与改进
欢迎通过 Issue 或 Pull Request 讨论调度策略、场景配置、测试与文档。复现问题时,请附上运行命令、配置、随机种子、环境信息及相关日志;比较新策略时,请保留逐实例结果和独立校验记录。
📄 许可证与致谢
项目自有源码采用 Apache License 2.0,第三方依赖与数据遵循各自许可证。
公开工作流数据来自 GrapheonRL Benchmark dataset v1.0(DOI: 10.5281/zenodo.18927122,CC BY 4.0),本项目使用
public_scalar_cpu_projection转换。完整署名、转换说明与许可文本见 数据来源记录 和 第三方声明。感谢 HEFT、PEFT、PPO 等相关研究,以及 PyTorch、NumPy、Numba 和 openEuler 生态为本项目提供的方法与工程基础。