new file
CloudEdgeDRL是一个面向云-边-端异构计算环境的DAG任务调度框架。项目针对任务之间存在依赖关系、云/边/端节点计算能力不同、节点间通信带宽和时延不同的场景,训练调度策略在每一步选择一个就绪任务,并将其分配到合法计算节点上,从而尽量降低整体完成时间makespan。
本作品面向云边端资源调度赛题需求设计,提供了从 STG 工作流数据转换、训练集/验证集/测试集划分、HEFT 基线计算、Masked PPO 策略训练到统一评测输出的完整流程。
项目的主要特点如下:
.stg
vendor/grapheonrl_benchmark/heft_solver.py
HEFT
Random
MaskedPPO
summary.json
scenario_results.csv
HEFT直接调用参考资料HEFT 求解器:
该策略作为评测基线,也是 ratio 指标的分母。它会根据任务依赖、节点处理速度、资源可行性和节点间通信代价生成一个启发式调度结果。
ratio
Random 是随机调度策略。它每一步从当前 ready task 集合中随机选取任务,再从该任务的合法节点集合中随机选取执行节点。
MaskedPPO 是本项目的可训练策略。训练分为两个阶段:
在决策时,模型只在合法动作空间中选择任务和节点:
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/ 下包含:
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
training_history.csv/json
system_info.json
mean_ratio = mean(policy_makespan / OfficialHEFT_makespan)
含义如下:
mean_ratio < 1
mean_ratio = 1
mean_ratio > 1
默认评测结果包含三种策略:
HEFT Random MaskedPPO
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
CloudEdgeDRL
作品简介
CloudEdgeDRL是一个面向云-边-端异构计算环境的DAG任务调度框架。项目针对任务之间存在依赖关系、云/边/端节点计算能力不同、节点间通信带宽和时延不同的场景,训练调度策略在每一步选择一个就绪任务,并将其分配到合法计算节点上,从而尽量降低整体完成时间makespan。
本作品面向云边端资源调度赛题需求设计,提供了从 STG 工作流数据转换、训练集/验证集/测试集划分、HEFT 基线计算、Masked PPO 策略训练到统一评测输出的完整流程。
项目的主要特点如下:
.stg工作流文件,并转换为内部 JSON 场景格式。vendor/grapheonrl_benchmark/heft_solver.py计算HEFT基线。HEFT、Random、MaskedPPO三种策略。summary.json、scenario_results.csv文件和一些图表,便于结果统计。算法说明
HEFT
HEFT直接调用参考资料HEFT 求解器:
该策略作为评测基线,也是
ratio指标的分母。它会根据任务依赖、节点处理速度、资源可行性和节点间通信代价生成一个启发式调度结果。Random
Random是随机调度策略。它每一步从当前 ready task 集合中随机选取任务,再从该任务的合法节点集合中随机选取执行节点。MaskedPPO
MaskedPPO是本项目的可训练策略。训练分为两个阶段:在决策时,模型只在合法动作空间中选择任务和节点:
项目结构
环境要求
建议使用 Python 3.8 及以上版本。项目依赖如下:
数据说明
默认配置文件为:
其中主要数据字段如下:
data/manifests/下包含:安装说明
进入项目根目录:
创建并激活 Conda 环境:
安装依赖:
检查运行环境:
该命令会输出 Python、操作系统、PyTorch、CUDA 可用性和数据清单目录等信息。
运行说明
如果有
.stg数据集,可使用脚本完成数据转换、训练和评测,并生成图像。为了方便运行,项目datasets中存在rnc50数据集。脚本内部会依次执行:
输出结果
默认结果输出目录为:
训练和评测后会生成:
其中:
best.pt:验证集表现最好的 MaskedPPO 模型。training_history.csv/json:每轮训练 reward、训练 ratio、验证 ratio 和耗时。system_info.json:运行环境信息。scenario_results.csv:每个测试场景下各策略的 makespan、ratio、推理耗时等。summary.json:各策略在测试集上的平均结果统计。summary.json中的核心指标为:含义如下:
mean_ratio < 1:该策略平均优于官方 HEFT。mean_ratio = 1:该策略平均与官方 HEFT 持平。mean_ratio > 1:该策略平均不如官方 HEFT。默认评测结果包含三种策略: