CPU 功能验收入口是下面的 openEuler 裸机一键命令,安装 CPU wheel 时不依赖 Docker、
CUDA 或 NVIDIA 驱动。当前终版说明书的六模型 NPU 复现使用后面的“910B 实验复现”流程;
CPU 功能验收、历史模型复评与 NPU 新模型实验分别记录,不能互相替代。
Topcuoglu, H., Hariri, S., & Wu, M. Y. (2002). Performance-effective and low-complexity task scheduling for heterogeneous computing. IEEE TPDS, 13(3), 260–274.
Schulman, J., et al. (2017). Proximal Policy Optimization Algorithms. arXiv:1707.06347.
GrapheonRL: A Graph Neural Network and Reinforcement Learning Framework for Constraint and Data-Aware Workflow Mapping and Scheduling in Heterogeneous HPC Systems.
项目简介
本项目面向 IoT—边缘—云协同计算环境,将任务依赖、节点算力差异、资源可执行性和跨节点通信开销统一建模,提供从场景配置、模型训练、搜索增强推理到同环境评测和结果可视化的完整闭环。
赛题场景与公平对比原则
项目以
official-stg为主要实验线,generalization与realistic-sim为可选扩展。三类实验采用独立的数据政策、环境版本、配置、输出目录、checkpoint 和 summary 命名,实验结果分别统计。完整契约见实验主线与产物规范。configs/generalization/STG 是性能结论的主场景
为保证队伍间比较口径一致,项目以参考赛题提供的
AasishKumarSharma/grapheonrl-benchmark中的 STG 工作流和异构节点配置作为主要实验来源:通用 STG 运行入口为
configs/official-stg/rnc50.yaml、configs/official-stg/rnc100.yaml和src/scripts/run_stg_suite.py;复现终版使用下文的910B 六模型正式测试流程。数据划分、实验约束和输出说明见 STG 数据与同环境评测。generalization 与 realistic-sim 用于扩展实验
除 STG 主实验外,项目提供独立的配置和随机场景生成功能,支持在不修改算法代码的情况下替换实验条件:
configs/scenario.yamlgenerate、stg、load三种模式间切换scenario.generate.num_tasks、edge_probabilityscenario.generate.*configs/resources.yamlconfigs/training.yaml、configs/eval.yaml随机场景可以独立生成训练集和验证集,用于验证“更换任务规模或资源配置后,模型仍能完成训练—保存—加载—评测”的赛题要求。它是工程能力与扩展性补充,不与 STG 主实验的性能数字混为一谈。
HEFT 基线来源与一致性验证
项目中的 HEFT 根据参考赛题资料
grapheonrl-benchmark/stg_to_json_benchmarks/heft_solver.py编写,对齐任务与节点字段、任务—资源可行性、执行时间、通信时间、upward rank 和 最早完成时间(EFT)选择,并适配为统一的SchedulerPolicy逐步动作接口。两套 HEFT 已使用相同的 60 个固定 STG test 工作流、相同 8 节点资源和相同单位进行 makespan 对照:59 个场景的绝对偏差不超过
0.0001,最大绝对偏差为0.137947465, 最大相对偏差为0.128629%。因此本文表述为“核心口径高度一致”,不宣称逐场景零偏差。 项目中的ratio始终以本项目 HEFT 在同一环境中的 makespan 为分母。详细来源、映射和 偏差边界见 HEFT 流程对齐 GrapheonRL 说明。相较常见调度项目的优势
下表比较的是项目设计与常见“单启发式脚本、扁平强化学习或仅给出模型代码”的实现方式,不代表本项目在所有数据集和所有目标上都普遍最优。
后文实验支持当前组合方法的表现及同模型搜索增强的收益;未完成逐项消融的设计不能据此归因出单项增益。配置化、同环境评测和多 seed 主要提升项目的可复现性、可审查性与扩展能力。
Pairwise 任务—资源联合决策
传统分阶段策略可能先选任务、再选资源;本项目把一个合法的“任务—资源”组合直接定义为一个动作:
例如,两个就绪任务和两个资源最多形成四个候选配对。模型综合任务图表示、资源状态、 预计执行时间与通信开销,为每个配对计算分数,再由 PPO 在合法动作集合中决策。 这里的 Pairwise 指任务—资源配对建模,不是成对排序损失。
实测效果
昇腾 910B STG 六模型独立测试
rnc50、rnc100 各采用 120/30/30 个互斥训练/验证/测试工作流,固定 split_seed=42。每规模独立训练 seed 42、43、44,共六个模型,各完成 20,224 个 PPO 步(目标预算 20,000)。验证集用于选模与一轮先验校准,六组验证结果、模型及固定搜索配置封存后才评测 test。每规模有 90 个模型—工作流配对、30 个不同测试工作流;完整调度计时重复三次。
完整混合框架在 rnc50、rnc100 上的平均比值为 0.833001、0.866349,相对同环境 HEFT 的平均归一化完成时间降低 **16.70%、13.37%**。分别有 83/90、90/90 个配对改善,其余持平。混合推理相对校准策略的逐工作流配对平均改善为 **6.18%、8.93%**,95%置信区间为 [3.21%, 10.90%]、[6.07%, 12.83%]。
LookaheadHEFT 平均比值为 0.833179、0.862971。完整框架达到接近的平均调度质量,完整计划生成耗时由 3.1799/19.8183 秒降至 2.6224/7.6206 秒,减少 **17.53%、61.55%**;rnc100 展示了以明显更低的计算开销获得高质量方案的效果。
原始策略使用验证选中、校准前的检查点;校准策略使用同次训练的校准后检查点,两者直接决策。混合推理固定深度 4、束宽 8,组合 PPO top-4 与 EFT top-4,使用 HEFT 补全并保留 HEFT 与校准策略完整计划。LookaheadHEFT 固定 k=6。EFT 对照使用相同深度、束宽及补全,改为 EFT top-8,移除策略与外层纯策略候选;其神经概率调用仍保留。
比值为同工作流的 policy makespan / HEFT makespan,SD 是三个种子均值的样本标准差。完整配对统计、逐工作流记录和耗时见实验数字索引及正式测试归档。终版文件为操作系统开源创新大赛项目说明书.pdf。
NPU 实验运行环境
这是本批数据的环境记录,不要求其他复现机器固定为同一型号;更换硬件需单独记录环境, 运行耗时和资源占用分别报告。CPU、CUDA、NPU 使用同一调度接口,按兼容栈安装依赖并选择设备。
方法概览
每一步从所有已就绪任务和可执行资源中选择一个合法配对:
训练与推理链路
搜索增强仅发生在推理阶段,不修改 checkpoint;启用纯 PPO 保底候选时,按完整计划的 makespan 选择结果,保证逐场景不劣于该保底计划。当前 910B 正式测试使用固定的 rollout-guided Beam 混合推理(深度 4、宽度 8),同时保留 HEFT 和校准策略完整计划。 旧 NPU validation 的普通 Beam 与历史 CUDA 实验分别保留各自配置与数字。 当前结果见实验数字与证据索引,方法扩展与历史消融见 PPO Beam 推理优化实测。
快速开始
默认验收起点
CPU 功能验收入口是下面的 openEuler 裸机一键命令,安装 CPU wheel 时不依赖 Docker、 CUDA 或 NVIDIA 驱动。当前终版说明书的六模型 NPU 复现使用后面的“910B 实验复现”流程; CPU 功能验收、历史模型复评与 NPU 新模型实验分别记录,不能互相替代。
openEuler 裸机一键运行(CPU 功能验收)
昇腾用户直接按昇腾 910B 运行指南准备环境,不必先执行下面的 CPU 安装。
在项目根目录执行:
该命令会自动:
dnf安装 Python、pip、编译器等系统依赖;.venv虚拟环境;默认再次运行会复用
.venv,不重新安装;除非设置FORCE_SETUP=1,否则TORCH_SPEC等安装参数不会生效。 该脚本始终激活项目的.venv,不是沿用终端当前激活的其他环境。openEuler 裸机分步运行
如需逐步确认环境创建、依赖安装和训练过程,可在项目根目录依次执行以下精简命令。
源码现位于
src/。直接运行各入口脚本时会自行设置导入路径;在仓库根目录直接运行python -m unittest discover -s tests或python -m scripts.run_all时,请先设置PYTHONPATH=src(PowerShell:$env:PYTHONPATH="src";bash:export PYTHONPATH=src)。后续重新进入 CPU 环境时执行
source .venv/bin/activate。CPU 与昇腾的环境和 Torch 版本
CPU 示例固定安装 Torch
2.9.1;当前昇腾实验记录的是 Torch2.8.0+cpu与 torch_npu2.8.0.post4。这是两种运行平台的安装选择,不是必须依次安装的两个步骤。+cpu后缀不代表实际在 CPU 上运行,昇腾通过torch_npu使用 NPU。昇腾可以直接使用平台预装且已经配套的 Python 环境,不要求新建虚拟环境。 只有需要隔离安装、且已取得匹配 wheel 时,才按指南创建
.venv-ascend;名称本身不决定 Torch 版本。如果在同一个 Python 环境中先后安装不同 Torch,后一次可能替换前一次。 已跑通的 NPU 环境无需仅因 CPU 示例版本不同而重装;安装项目依赖时按指南使用requirements-ascend.txt与 Torch 版本约束,并记录实际解释器、版本和设备。训练与评测设备分别由
training.device、eval.ppo_device控制;当前auto按 CUDA → NPU → CPU 的顺序选择可用设备,以运行产物中的实际设备为准。NVIDIA GPU 可选安装
CPU/CUDA 依赖声明为
torch>=2.8,<3.0,历史 CUDA 实验使用2.9.1+cu128。 先用nvidia-smi查看驱动,再按 PyTorch 官方安装选择器 或 历史版本表 选择 wheel。以下为已具备 兼容驱动时的 CUDA 12.8 示例;FORCE_SETUP=1会重新安装.venv中的依赖,不用于昇腾环境:脚本也支持
TORCH_FIND_LINKS(wheel 目录)和TORCH_WHEEL(本地 wheel);详见src/scripts/setup_openeuler.sh。不支持所选 CUDA wheel 的机器使用上面的 CPU 入口。Docker 可选运行
若选择容器方式,需要先按照 openEuler Docker 安装配置文档 安装并启动 Docker;GPU 容器还需安装 NVIDIA 驱动和 NVIDIA Container Toolkit。项目不 假设这些宿主机组件已经存在。
宿主机容器环境准备完成后,CPU Docker 一键构建并运行:
已有项目 CUDA 镜像时,GPU 一键运行:
Dockerfile 的普通 Python 包默认使用清华 PyPI 镜像;新建 GPU 镜像时同样传入 wheel 参数:
以上
gpuprofile 面向 NVIDIA;昇腾容器入口见昇腾运行指南。已有模型快速复评
仓库提供的历史 seed=42 STG 模型位于(不是本次 910B 三 seed 新训练的模型):
纯 PPO 复评
--skip-train会读取下面两个 official-stg 位置的带前缀 checkpoint:全新克隆仓库后,先将内置模型放到默认位置:
裸机运行:
Docker GPU 运行:
该入口执行 HEFT 与确定性纯 PPO 的 validation/test 评测;
ppo_tuned表示动作先验经过 校准,不代表启用了 Beam。默认ppo_planning_rollouts=0,不会执行搜索增强。PPO+Beam 增强推理
下面的循环复评历史 seed=42 checkpoint,分别评测 rnc50 和 rnc100,启用该批实验采用的
depth=4、width=8PPO+Beam;它只增强推理,不修改模型权重:910B 实验复现(STG50/100 正式测试)
在包含 src、configs、data 的项目根目录执行。环境准备见昇腾 910B 指南。以下逐行脚本对应终版 PDF 附录 A;文档整理后,复现工具的源路径由
docs/调整为src/docs/,使用下面的复制命令。–reproduce 不锁定分支或提交,仍保留场景、配置和冻结模型检查。两个工作目录须为新目录;重复运行请更换编号。full 是执行器中的完整训练配置代号,对应终版的 PairwiseGNN-PPO 训练链路。train 完成六组训练与先验校准,确认执行器随后比较六种固定方法;freeze 在测试之前封存验证结果和模型。校准不访问 test,测试结束后不据其结果重新选模或调参。
只核对已发布数字,无需 NPU、PyTorch 或训练:
较早的固定源码 validation/普通 Beam 复现见历史归档,全量历史核验见归档与复现。历史 CUDA 性能资源清单的 CRLF/LF 差异可能触发 resource input mismatch,与新正式测试归档分别核验。
输出文件
CPU/CUDA 的
run_stg_suite.py训练或历史模型复评完成后检查以下文件; 终版六方法测试输出位于 $CONFIRM_WORK/reports/test;下列布局属于通用 run_stg_suite.py:各规模的 summary JSON 保留 PPO/HEFT 评测;suite CSV 汇总 PPO 的 makespan、 相对 HEFT 的 ratio 统计与胜率,不单独导出 HEFT 的完整统计表。
配置说明
configs/generalization/default.yaml是 generalization 默认入口;历史configs/default.yaml仍保留兼容。official-stg 和 realistic-sim 分别使用各自目录下的 canonical 配置。以下为
configs/generalization/default.yaml的部分配置;includes相对该 YAML 所在目录解析:configs/scenario.yamlconfigs/resources.yamlconfigs/training.yamlconfigs/eval.yaml场景支持三种来源:
generate:按配置生成可复现的随机 DAG;stg:读取 GrapheonRL/STG 工作流数据;load:读取项目原生 Scenario JSON 文件。official-stg 使用
configs/grapheon/heterogeneous_nodes_scc_mb.json的 8 个节点与固定split_seed=42;数据划分与字段映射见 STG 数据与同环境评测。实验结果与证据索引
当前 NPU 独立测试
历史 NPU validation 与普通 Beam
以下为 6fc8327 训练批次,与本轮 8ec171a 六模型训练及深度 4/束宽 8 混合推理分别记录:
旧结果使用参与选模和校准的 validation,见历史数字索引、历史预算曲线与旧 NPU 归档,不混入当前 test。
历史 CUDA test(独立训练批次)
以下历史 seed=42 模型分别在 30 个 test DAG 上评测,与当前 NPU 模型不混合统计:
完整 validation/test 表、多 seed 汇总和逐场景证据见 STG 数据与同环境评测、 历史 STG 归档 与 PPO Beam 推理优化实测。 test 结论仅支持同分布、同任务规模的未见 DAG 泛化,不表示单模型跨规模泛化; 本轮 NPU test 与这批 CUDA 模型使用各自的检查点和结果。
直接用归档的四份结果绘图,无需重新运行模型:
输出为
runs/search_probes/inference_optimization_comparison.png与同名.json, 包含总体 mean_ratio、相对 HEFT 胜率与逐场景配对统计。随机生成场景(补充)
configs/generalization/default.yaml合并scenario.yaml、resources.yaml、training.yaml和eval.yaml。其中scenario.mode=generate,任务规模、边密度、训练/验证数量和随机种子均从配置读取。该线用于跨规模训练和泛化评测。本地或 openEuler CPU 容器可运行:
默认输出位于
runs/generalization/default/。历史随机 DAG 消融见 PPO Beam 推理优化实测;原模型与原始结果未纳入当前 STG 归档,复现需补齐产物或重新测量,不作为 STG 公平对比证据。50/100/200/300 任务的单 checkpoint 混合训练使用
configs/generalization/multiscale-50-100-200-300.yaml。该入口的训练统一在 Docker 中运行, 数据比例、隔离规则、正式命令和四规模 smoke 见 Issue #12 多规模训练说明。Issue #13 在该场景池上增加按场景/按环境步采样与分阶段课程训练,入口为
configs/generalization/balanced-curriculum.yaml。等预算三 seed 对照、实际采样占比和 结果适用范围见 Issue #13 均衡采样与课程训练。可视化
场景编辑器
编辑器支持:
configs/resources.yaml;runs/custom/scenarios/。调度结果对比
先完成 official-stg 训练或历史模型复评,生成
scenarios/val.json与对应 checkpoint, 再显式指定配置和模型,避免脚本按旧默认名checkpoints/ppo.zip查找而跳过 PPO:已成功加载模型时输出 HEFT/PPO/Random 的 makespan 对比和甘特图,不展示 DAG 依赖图。 未加载兼容 checkpoint 时只比较 HEFT/Random;留意终端的
Skipping PPO提示。实现边界
cores和memory用于任务—资源可行性检查,不表示节点内部多任务并行容量(参考赛题的参考资料进行搭建)。storage为兼容资源配置保留字段,当前不参与环境和 HEFT 计算。更完整的限制列表请参阅 技术报告 第 11 节“实现边界与已知限制”;正式实验的证据等级、资源监测和泛化口径请参阅 完整运行资源报告。
项目结构
scripts/verify_official_stg.py属于已冻结的 official STG 证据清单,目录迁移时保留原文件及路径;可运行python scripts/verify_official_stg.py核验历史证据。扩展策略
新增调度方法可继承统一策略接口:
将策略注册到
src/scripts/eval.py的build_policies()后,即可与现有策略在相同场景和指标下比较。相关材料与文档
参考资料