目录

赛题题目:基于深度强化学习的云-边-端异构计算资源管理调度方法(高校赛题)

赛题说明:

本赛题聚焦云-边-端异构计算环境中的资源管理与调度问题。给定任务 DAG 及多类型计算资源(云/边/端),任务之间存在依赖约束;在资源速度与跨节点通信带宽不一致的情况下,调度器需要在每一步选择一个就绪任务并将其分配到合适的计算节点,从而尽量降低整体完成时间(makespan)。赛题强调的不仅是“训练一个DRL模型”,更要求参赛者提供一个可复用的训练与评测框架:参赛方法应当能够抽象并封装环境状态、动作空间与合法性约束,支持场景(任务图与资源参数)的生成/加载,提供统一的策略接口以便评测脚本批量调用,并能与外部调度方法(如启发式基线、行为克隆等)进行公平对比。参赛者需要设计清晰的模块边界,使得环境与资源配置可替换、算法可插拔、实验流程可复现。最终,参赛者应输出在验证集上的标准化指标与模型/配置说明,展示其框架的可训练性、可扩展性与工程可用性。

赛题要求:

  • 基于 openEuler、openKylin、OpenHarmony 等至少一个国内主流开源操作系统开发,鼓励在更多Linux发行版上编译、运行和测试。

  • 参赛者需提交一个可训练的 DRL 调度框架,用于云-边-端异构计算资源管理调度。

  • 框架必须支持将环境与资源参数抽象为可配置组件,便于更换任务规模、资源类型与异构参数。

  • 框架必须提供统一的调度策略接口,使评测脚本能够在同一组验证场景上对不同策略进行公平比较。

    评分细则(明确评审角度、标准和分值范围):

  • 功能完整性(40 分) (1)代码可运行:一键完成“训练 + 验证评测 + 产出结果文件”(如 summary.json/表格),且不依赖手工修改关键代码(10 分) (2)模块化/抽象能力:环境、资源配置、场景来源、策略接口(Policy/Scheduler)解耦清晰,能通过配置替换资源规模/异构参数(10 分) (3)插拔接口:参赛者框架支持接入至少一种外部调度方法(如 HEFT、BC 或用户自定义策略),评测脚本可统一调用并输出同一指标(10 分) (4)合法动作处理:对 ready/task mask 等约束有明确实现(如 action masking、非法动作惩罚/过滤),训练与推理阶段行为一致(10 分)

  • 性能优化(35 分) (1)指标表现:在给定验证集上达到更优 mean_ratio = mean(RL_makespan / HEFT_makespan),并给出均值与方差或样本规模说明(15 分) (2)泛化能力:在未参与训练的场景(或不同划分)上性能保持稳定,避免仅对少量场景过拟合(10 分) (3)训练策略有效性:合理设计采样/更新/早停/超参,并能解释选择原因(5 分) (4)工程效率:在合理时间/算力预算下达到性能(5 分)

  • 文档质量(25 分) (1)赛题对齐说明:文档清楚描述“问题建模—环境—动作定义—奖励设计—训练流程—评估指标”的对应关系,且与代码一致(10 分) (2)复现实验说明:给出运行命令/配置文件示例、关键超参、数据划分方式、输出路径、依赖版本(如 PyTorch 版本)(10 分) (3)可读性与结构:目录组织合理、接口原型/类职责明确、图示或伪代码帮助理解框架(5 分)

项目简介

面向云—边—端异构计算环境的 DAG 工作流调度框架,支持场景建模、策略训练、统一评测、搜索增强推理与结果可视化。

项目将任务依赖、计算资源差异和跨节点通信开销统一建模为调度环境,并使用带合法动作掩码的 Pairwise GNN-PPO 选择 (ready_task, resource)。框架内置 HEFT、Lookahead HEFT 与随机策略,可在同一验证集上比较总完成时间(makespan),形成从配置、训练、推理到评测的完整实验闭环。

核心特性

  • 云—边—端统一建模:描述 IoT、Edge、Cloud、HPC 等异构节点的算力、核心数、内存、特性与网络带宽。
  • DAG 约束调度:同时考虑任务依赖、资源可执行性、资源占用和跨节点数据传输。
  • Pairwise GNN-PPO:为每个合法的“任务—资源”组合单独打分,结合 DAG 表征、资源表征与动作级启发式特征。
  • 合法动作掩码:训练与推理使用同一套 action mask,避免选择未就绪任务或不满足资源约束的节点。
  • 多策略公平评测:在相同场景和环境中比较 HEFT、Lookahead HEFT、Random 与 PPO。
  • 完整实验流程:支持 Lookahead HEFT 行为克隆、MaskablePPO 微调、动作先验校准、PPO-guided Beam、单调局部修复与泛化测试。
  • 可视化工具:提供 DAG 场景编辑器、调度甘特图和多策略结果对比图。
  • 可复现运行环境:支持本地 Python、openEuler Docker CPU 环境及 NVIDIA GPU Compose 配置。

赛题要求对应关系

赛题关注点 项目实现 主要位置
国产开源操作系统适配 以 openEuler 24.03 LTS 为容器基础环境 Dockerfiledocker-compose.yml
深度强化学习调度 基于 sb3-contrib MaskablePPO,实现 Pairwise GNN 策略网络 cloud_edge_scheduler/training/ppo.pycloud_edge_scheduler/policies/ppo_gnn.py
云—边—端异构资源 配置节点层级、CPU/GPU 算力、核心数、内存、能力标签和带宽 configs/resources.yaml
DAG 工作流建模 建模任务依赖、资源约束、执行时间与跨节点通信时间 cloud_edge_scheduler/envs/
合法调度约束 训练和推理统一使用 ready task 与资源可行性 action mask cloud_edge_scheduler/envs/dag_env.pygym_env.py
基线算法与统一接口 提供 HEFT、Lookahead HEFT、Random、PPO 策略 cloud_edge_scheduler/policies/
参数化与可扩展性 场景、资源、训练和评测配置相互拆分并支持覆盖 configs/
实验复现与结果输出 一键训练和评测,输出 checkpoint、固定场景与 summary.json scripts/run_all.pyruns/
可视化展示 支持场景编辑、DAG 展示、甘特图及策略对比 scripts/config_editor.pyscripts/viz_demo.py

方法概览

每一步调度从所有已就绪任务和可执行资源中选择一个合法组合:

DAG 场景 + 异构资源
        ↓
生成合法动作 mask
        ↓
选择 (ready_task, resource)
        ↓
计算执行时间与通信时间
        ↓
更新资源可用时间和 makespan
        ↓
重复直至全部任务完成

动作编码为:

action = task_id × num_resources + resource_id

核心评测指标为:

ratio = policy_makespan / HEFT_makespan

ratio < 1.0 表示该策略在对应场景上的 makespan 优于 HEFT。

训练与推理链路

DAG 场景与异构资源
        ↓
状态构造与合法动作 mask
        ↓
Pairwise GNN 编码任务、资源与候选动作
        ↓
Lookahead HEFT 行为克隆 warm start
        ↓
MaskablePPO fine-tune
        ↓
PPO-guided Beam 与单调局部修复
        ↓
统一评测 makespan / ratio / mean_ratio

PPO-guided Beam 与单调局部修复

正式质量档并行生成三类完整候选:

  • 确定性 PPO 调度;
  • depth-16 rollout-guided Beam;
  • window-8 receding Beam。

Beam 每层联合扩展 PPO 高概率动作、EFT 较小动作和 HEFT 当前动作,并使用 HEFT completion 与可选 PPO tail 补全剩余任务。前缀以完整计划的真实 makespan 排序,而不是仅按 PPO 概率或局部奖励排序。

每条完整候选都会独立执行最多 8 轮单任务资源迁移和相邻独立任务换序,随后尝试成对资源交换以及 Top-16 依赖边共置。Top-16 由 8 条静态 bottom-level 关键边和 8 条实际尾部协同边组成。候选只有在完整重放后 makespan 严格下降时才会被接受;边共置产生新收益时,最多继续到第 3 个修复周期。最后从所有修复后的候选中选择真实 makespan 最小的计划。

搜索与修复属于推理阶段,不改变 PPO checkpoint。详细实现与消融结果见 PPO Beam 推理优化实测

快速开始

1. 环境要求

项目 要求
操作系统 openEuler 24.03 LTS
Python 3.11 推荐
深度学习框架 PyTorch 2.2 及以上、3.0 以下
容器环境 Docker 与 Docker Compose;GPU 模式另需 NVIDIA Container Toolkit

CPU 环境可以完成训练和评测;GPU 用于缩短模型训练和搜索实验时间,具体耗时取决于硬件、场景规模与搜索参数。

2. 安装依赖

Linux、openEuler 或 openKylin:

python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install --upgrade pip setuptools wheel
python3 -m pip install -r requirements.txt

3. 运行完整流程

训练、动作先验校准并在验证集上评测:

python scripts/run_all.py --config configs/default.yaml --no-plot

完成后主要产物位于 runs/default/

runs/default/
├── checkpoints/
│   ├── ppo.zip
│   ├── ppo_best.zip
│   ├── ppo_final.zip
│   └── ppo_tuned.zip
├── scenarios/
│   ├── train.json
│   ├── selection_val.json
│   └── val.json
└── summary.json

其中,summary.json 记录各策略的 makespan、相对 HEFT 的 ratio、均值、标准差和胜率。

4. 分步运行

# 仅训练
python scripts/train.py --config configs/default.yaml --no-plot

# 使用已有模型评测
python scripts/eval.py --config configs/default.yaml --checkpoint runs/default/checkpoints/ppo_tuned.zip

# 跳过训练,仅执行 run_all 中的评测阶段
python scripts/run_all.py --config configs/default.yaml --skip-train --no-plot

如需训练期间的实时曲线,移除 --no-plot

快速验收

为避免混淆默认训练流程与正式质量结果,建议按以下两条路径验收。

功能完整性验收

在 openEuler 容器中执行默认的训练、校准和评测流程:

docker compose up --build scheduler

运行完成后检查:

runs/default/checkpoints/ppo.zip
runs/default/checkpoints/ppo_tuned.zip
runs/default/scenarios/val.json
runs/default/summary.json

该路径用于确认环境、训练、checkpoint 保存和多策略评测链路能够完整运行,不代表下文记录的正式最优质量配置。

正式质量结果复核

若已包含正式模型时,可跳过训练,直接在固定验证配置上评测:

python scripts/eval.py --config configs/optimized_pairwise_rollout_beam_repair_top16.yaml --checkpoint runs/optimized_pairwise_tuned/checkpoints/ppo_tuned.zip

Docker 运行

默认 Compose 服务基于 openEuler 24.03 LTS 构建 CPU 环境,并将运行结果映射到宿主机的 runs/

docker compose up --build scheduler

已配置 NVIDIA Container Toolkit 时,可使用 GPU 服务:

docker compose --profile gpu up --build scheduler-gpu

直接构建和运行镜像:

docker build -t cloud-edge-dag-rl-scheduler:openeuler .
docker run --rm \
  -v "$(pwd)/runs:/workspace/runs" \
  cloud-edge-dag-rl-scheduler:openeuler

Windows PowerShell 的挂载写法为:

docker run --rm `
  -v "${PWD}\runs:/workspace/runs" `
  cloud-edge-dag-rl-scheduler:openeuler

配置说明

configs/default.yaml 是默认入口,通过 includes 合并四类配置:

seed: 42
output_dir: runs/default

includes:
  - scenario.yaml
  - resources.yaml
  - training.yaml
  - eval.yaml
文件 作用
configs/scenario.yaml 场景来源、训练/验证数量、任务规模和 DAG 生成参数
configs/resources.yaml 异构节点的层级、算力、核心数、内存、特性与带宽
configs/training.yaml GNN-PPO、行为克隆、奖励塑形、选模和先验校准参数
configs/eval.yaml 评测策略、模型设备和搜索增强推理参数

场景支持三种来源:

  • generate:按配置生成可复现的随机 DAG;
  • stg:读取 GrapheonRL/STG 工作流数据;
  • load:读取项目原生 Scenario JSON 文件。

可视化

场景编辑器

python scripts/config_editor.py

编辑器支持:

  • 创建、移动和删除任务节点;
  • 绘制任务依赖边并设置数据传输量;
  • 管理异构资源节点;
  • 读取或保存 configs/resources.yaml
  • 将场景导出到 runs/custom/scenarios/

调度结果对比

# 使用默认验证场景
python scripts/viz_demo.py

# 指定场景
python scripts/viz_demo.py --id val-0003

# 指定 PPO checkpoint
python scripts/viz_demo.py \
  --checkpoint runs/default/checkpoints/ppo_tuned.zip

# 可视化编辑器导出的自定义场景
python scripts/viz_demo.py --custom my_dag

输出包含 DAG 依赖图、策略 makespan 对比和 HEFT/PPO/Random 调度甘特图。

提交版本与结果口径

正式质量评测使用:

配置:configs/optimized_pairwise_rollout_beam_repair_top16.yaml
模型:runs/optimized_pairwise_tuned/checkpoints/ppo_tuned.zip
结果:runs/search_probes/combined_tail_edge16_cycle3_full24.json

在 seed 42 的 24 个 64-task 固定验证场景上,端到端结果为:

指标 结果
mean_ratio 0.9919084136
std_ratio 0.0081317475
min_ratio 0.9691236839
max_ratio 1.0000000000
相对 HEFT 胜率 75%

在 seed 43、44、45 各 4 个未见场景上,同配置 top-16 评测的聚合 mean_ratio0.995929

上述指标来自 PPO-guided beam search + 严格单调局部修复 的完整推理流程。

完整实验口径、消融与复现说明见:

实现边界

  • 本项目是调度算法的仿真、训练与评测框架,输出任务—资源映射和调度时间线。
  • 当前优化目标是最小化 makespan;能耗、费用、可靠性和在线节点故障尚未纳入正式目标函数。
  • 同一资源上的任务按时间顺序执行,coresmemory 用于任务—资源可行性检查,不表示节点内部多任务并行容量(参考赛题的参考资料进行搭建)。
  • 跨节点通信时间按数据量与两端瓶颈带宽计算;storage 为兼容资源配置保留字段,当前不参与环境和 HEFT 计算。

项目结构

CloudEdgeDAG-RL-Scheduler/
├── cloud_edge_scheduler/
│   ├── envs/                 # DAG 调度环境、Gymnasium 适配与场景模型
│   ├── policies/             # HEFT、Lookahead HEFT、Random、GNN-PPO
│   ├── training/             # 行为克隆与 MaskablePPO 训练
│   ├── utils/                # 配置加载、评测与指标汇总
│   └── visualization/        # 甘特图、对比图和训练曲线
├── configs/                  # 默认配置、实验配置和资源定义
├── docs/                     # 算法原理、实现说明与实验报告
├── scripts/                  # 训练、评测、调优、泛化测试和可视化入口
├── tests/                    # 奖励、策略和局部修复测试
├── runs/                     # checkpoint、场景和评测结果
├── Dockerfile
├── docker-compose.yml
└── requirements.txt

扩展策略

新增调度方法可继承统一策略接口:

from cloud_edge_scheduler.policies.base import SchedulerPolicy


class MyPolicy(SchedulerPolicy):
    name = "my_policy"

    def select_action(self, obs, mask, deterministic=True):
        """返回一个合法动作索引。"""
        ...

将策略注册到 scripts/eval.pybuild_policies() 后,即可与现有策略在相同场景和指标下比较。

提交材料与文档

材料 用途
技术报告 问题建模、系统设计、算法原理与实验结论
项目整体流程说明 从配置加载到训练、推理和评测的完整调用链
模块文档 源码模块、脚本入口、配置项和扩展方法
GNN-PPO 当前实现方案与数学原理 状态、动作、奖励、网络结构与数学定义
GNN-PPO 训练流程详解 行为克隆、PPO 微调、验证选模和先验校准
HEFT 算法说明 HEFT 基线实现与调度流程
PPO 算法说明 PPO 算法原理与项目实现
GrapheonRL 字段设计参考 任务与异构资源字段的参考来源和映射关系

赛题联系人:

汪老师 wlp@nwpu.edu.cn

参考资料:

  • Grapheonrl,AasishKumarSharma/grapheonrl-benchmark
  • 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.
关于
1.3 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号