目录

CloudEdgeDRL

作品简介

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

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

项目的主要特点如下:

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

算法说明

OfficialHEFT

OfficialHEFT 直接调用参考资料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-Final-v2.0.0/
├── 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 依赖
└── README.md

环境要求

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

numpy>=1.21
PyYAML>=6.0
torch>=1.10
pytest>=7.0

如果使用 GPU,需要安装与本机 CUDA 版本匹配的 PyTorch。若没有可用 GPU,可将配置文件中的 experiment.device 改为 cpu

安装说明

进入项目根目录:

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 可用性和数据清单目录等信息。

数据说明

默认配置文件为:

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      # 数据划分数量统计

运行说明

如果有 .stg 数据集,可使用脚本完成数据转换、训练和评测:

bash run_from_stg.sh /path/to/stg configs/submission.yaml

脚本内部会依次执行:

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

例如:

bash run_from_stg.sh /home/os/500 configs/submission.yaml

配置说明

configs/submission.yaml 中的核心参数如下:

experiment:
  seed: 42
  device: cuda
  output_dir: outputs/submission

model:
  hidden_dim: 128
  prior_scale: 20.0

training:
  bc_epochs: 2
  bc_max_scenarios: 40
  bc_steps_per_update: 64
  rl_epochs: 20
  episodes_per_epoch: 8
  validation_limit: 30
  ppo_epochs: 4
  minibatch_size: 64
  learning_rate: 0.0003
  gamma: 1.0
  entropy_coef: 0.001
  value_coef: 0.5
  early_stop_patience: 6

evaluation:
  test_limit: 0
  search_trials: 12

常用修改项:

  • experiment.device:设置为 cudacpu
  • experiment.output_dir:设置训练结果和评测结果输出目录。
  • training.bc_max_scenarios:行为克隆阶段最多使用的训练场景数量。
  • training.rl_epochs:PPO 训练轮数。
  • training.episodes_per_epoch:每轮 PPO 使用的 episode 数量。
  • training.validation_limit:每轮验证时最多使用的验证场景数量。
  • evaluation.test_limit:测试场景数量限制,0 表示使用全部测试集。

如果机器内存或显存不足,可优先降低:

training:
  bc_max_scenarios: 10
  episodes_per_epoch: 2
  validation_limit: 5
  minibatch_size: 32

输出结果

默认输出目录为:

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。

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

OfficialHEFT
Random
MaskedPPO

常见问题

1. 配置为 cuda 但无法运行

如果当前环境没有可用 GPU,python main.py doctor 会显示 cuda_available: false。此时请将 configs/submission.yaml 中的:

experiment:
  device: cuda

改为:

experiment:
  device: cpu

2. 训练时内存不足或进程被杀死

可以降低训练规模:

training:
  bc_max_scenarios: 10
  episodes_per_epoch: 2
  validation_limit: 5
  minibatch_size: 32

如果使用大规模 STG 数据,也可以先减少输入 .stg 文件数量进行调试。

3. 重新准备数据后结果路径在哪里

scripts/prepare_data.py 会根据配置写入:

data/workflows/
data/manifests/

训练和评测结果写入 experiment.output_dir,默认是:

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

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