目录

CloudEdgeDRL

作品简介

CloudEdgeDRL是一个面向云-边-端异构计算环境的DAG任务调度框架。项目针对任务之间存在依赖关系、云/边/端节点计算能力不同、节点间通信带宽和时延不同的场景,训练调度策略在每一步选择一个就绪任务,并将其分配到合法计算节点上,从而尽量降低整体完成时间makespan。

本作品面向云边端资源调度赛题需求设计,提供了从 STG 工作流数据转换、训练集/验证集/测试集划分、HEFT 基线计算、Masked PPO 策略训练到统一评测输出的完整流程。

项目的主要特点如下:

  • 支持读取 .stg 工作流文件,并转换为内部 JSON 场景格式。
  • 使用 vendor/grapheonrl_benchmark/heft_solver.py 计算HEFT基线。
  • 将调度过程建模为强化学习环境,包含就绪任务约束和任务-节点可行性约束。
  • 提供HEFT行为克隆预训练和HEFT-guided Masked PPO强化学习训练。
  • 评测阶段统一比较 HEFT、Random、MaskedPPO 三种策略。
  • 输出summary.json 、scenario_results.csv文件和一些图表,便于结果统计。

算法说明

HEFT

HEFT直接调用参考资料HEFT 求解器:

vendor/grapheonrl_benchmark/heft_solver.py

该策略作为评测基线,也是 ratio 指标的分母。它会根据任务依赖、节点处理速度、资源可行性和节点间通信代价生成一个启发式调度结果。

Random

Random 是随机调度策略。它每一步从当前 ready task 集合中随机选取任务,再从该任务的合法节点集合中随机选取执行节点。

MaskedPPO

MaskedPPO 是本项目的可训练策略。训练分为两个阶段:

  1. HEFT 行为克隆:用官方 HEFT 的任务顺序和节点分配作为专家轨迹,对策略网络进行监督预训练。
  2. PPO 强化学习微调:在行为克隆的基础上使用 clipped objective、GAE、优势归一化、价值函数裁剪等机制继续优化策略。

在决策时,模型只在合法动作空间中选择任务和节点:

  • 任务选择只允许当前依赖已满足的 ready task。
  • 节点选择只允许满足任务 CPU/GPU/内存需求的计算节点。

项目结构

CloudEdgeDRL
├── app/
│   ├── checkpoint.py        # 模型保存与加载
│   ├── config.py            # YAML 配置读取
│   ├── environment.py       # 云边端调度环境
│   ├── evaluation.py        # 统一评测入口
│   ├── model.py             # Guided Actor-Critic 网络
│   ├── policies.py          # HEFT、Random、MaskedPPO 策略接口
│   ├── scenario.py          # 场景读取与官方 HEFT 调用
│   ├── search.py            # 备用搜索调度逻辑
│   ├── training.py          # 行为克隆与 PPO 训练流程
│   └── vendor.py            # 第三方转换器封装
├── configs/
│   └── submission.yaml      # 默认训练与评测配置
├── data/
│   ├── manifests/           # train/validation/test 划分清单
│   ├── systems/             # 云边端资源与网络配置
│   └── workflows/           # 转换后的工作流 JSON
├── scripts/
│   └── prepare_data.py      # STG 转 JSON 并生成数据划分
├── tests/
│   └── test_minimal.py      # 最小功能测试
├── vendor/
│   └── grapheonrl_benchmark/# 官方 STG 转换器与 HEFT 求解器
├── main.py                  # doctor/train/evaluate/all 命令入口
├── run_from_stg.sh          # 一键数据准备、训练、评测脚本
├── requirements.txt         # Python 依赖

环境要求

建议使用 Python 3.8 及以上版本。项目依赖如下:

numpy>=1.21
PyYAML>=6.0
torch>=1.10
pytest>=7.0
pandas>=1.3
matplotlib>=3.5

数据说明

默认配置文件为:

configs/submission.yaml

其中主要数据字段如下:

data:
  workflow_dir: data/workflows
  manifest_dir: data/manifests
  system_file: data/systems/hetero_8node.json
  train_ratio: 0.7
  validation_ratio: 0.15

data/manifests/ 下包含:

train.jsonl       # 训练集场景清单
validation.jsonl  # 验证集场景清单
test.jsonl        # 测试集场景清单
summary.json      # 数据划分数量统计

安装说明

进入项目根目录:

cd CloudEdgeDRL

创建并激活 Conda 环境:

conda create -n cloudedge_drl python=3.10 -y
conda activate cloudedge_drl

安装依赖:

pip install -r requirements.txt

检查运行环境:

python main.py doctor --config configs/submission.yaml

该命令会输出 Python、操作系统、PyTorch、CUDA 可用性和数据清单目录等信息。

运行说明

如果有 .stg 数据集,可使用脚本完成数据转换、训练和评测,并生成图像。为了方便运行,项目datasets中存在rnc50数据集。

#解压rnc50数据集到datasets
tar -zxvf datasets/rnc50.gz -C datasets/

#运行命令
bash run_from_stg.sh ./datasets/50 configs/submission.yaml

脚本内部会依次执行:

STG 转 JSON
生成 train/validation/test manifest
训练 MaskedPPO
在测试集上统一评测 HEFT、Random、MaskedPPO
生成图像

输出结果

默认结果输出目录为:

outputs/submission/

训练和评测后会生成:

outputs/submission/
├── checkpoints/
│   └── best.pt
├── training_history.csv
├── training_history.json
├── system_info.json
└── evaluation/
    ├── summary.json
    └── scenario_results.csv

其中:

  • best.pt:验证集表现最好的 MaskedPPO 模型。
  • training_history.csv/json:每轮训练 reward、训练 ratio、验证 ratio 和耗时。
  • system_info.json:运行环境信息。
  • scenario_results.csv:每个测试场景下各策略的 makespan、ratio、推理耗时等。
  • summary.json:各策略在测试集上的平均结果统计。
  • summary.json 中的核心指标为:
mean_ratio = mean(policy_makespan / OfficialHEFT_makespan)

含义如下:

  • mean_ratio < 1:该策略平均优于官方 HEFT。
  • mean_ratio = 1:该策略平均与官方 HEFT 持平。
  • mean_ratio > 1:该策略平均不如官方 HEFT。

默认评测结果包含三种策略:

HEFT
Random
MaskedPPO
关于
170.0 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

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