添加:操作系统开源创新大赛作品原创承诺书
CloudEdgeDRL是一个面向云-边-端异构计算环境的DAG任务调度框架。项目针对任务之间存在依赖关系、云/边/端节点计算能力不同、节点间通信带宽和时延不同的场景,训练调度策略在每一步选择一个就绪任务,并将其分配到合法计算节点上,从而尽量降低整体完成时间makespan。
本作品面向云边端资源调度赛题需求设计,提供了从 STG 工作流数据转换、训练集/验证集/测试集划分、HEFT 基线计算、Masked PPO 策略训练到统一评测输出的完整流程。
项目的主要特点如下:
.stg
vendor/grapheonrl_benchmark/heft_solver.py
OfficialHEFT
Random
MaskedPPO
summary.json
scenario_results.csv
OfficialHEFT 直接调用参考资料HEFT 求解器:
该策略作为评测基线,也是 ratio 指标的分母。它会根据任务依赖、节点处理速度、资源可行性和节点间通信代价生成一个启发式调度结果。
ratio
Random 是随机调度策略。它每一步从当前 ready task 集合中随机选取任务,再从该任务的合法节点集合中随机选取执行节点。
MaskedPPO 是本项目的可训练策略。训练分为两个阶段:
在决策时,模型只在合法动作空间中选择任务和节点:
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。
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/ 下包含:
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
常用修改项:
cuda
experiment.output_dir
training.bc_max_scenarios
training.rl_epochs
training.episodes_per_epoch
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
training_history.csv/json
system_info.json
mean_ratio = mean(policy_makespan / OfficialHEFT_makespan)
含义如下:
mean_ratio < 1
mean_ratio = 1
mean_ratio > 1
默认评测结果包含三种策略:
OfficialHEFT Random MaskedPPO
如果当前环境没有可用 GPU,python main.py doctor 会显示 cuda_available: false。此时请将 configs/submission.yaml 中的:
python main.py doctor
cuda_available: false
experiment: device: cuda
改为:
experiment: device: cpu
可以降低训练规模:
如果使用大规模 STG 数据,也可以先减少输入 .stg 文件数量进行调试。
scripts/prepare_data.py 会根据配置写入:
scripts/prepare_data.py
data/workflows/ data/manifests/
训练和评测结果写入 experiment.output_dir,默认是:
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
CloudEdgeDRL
作品简介
CloudEdgeDRL是一个面向云-边-端异构计算环境的DAG任务调度框架。项目针对任务之间存在依赖关系、云/边/端节点计算能力不同、节点间通信带宽和时延不同的场景,训练调度策略在每一步选择一个就绪任务,并将其分配到合法计算节点上,从而尽量降低整体完成时间makespan。
本作品面向云边端资源调度赛题需求设计,提供了从 STG 工作流数据转换、训练集/验证集/测试集划分、HEFT 基线计算、Masked PPO 策略训练到统一评测输出的完整流程。
项目的主要特点如下:
.stg工作流文件,并转换为内部 JSON 场景格式。vendor/grapheonrl_benchmark/heft_solver.py计算HEFT基线。OfficialHEFT、Random、MaskedPPO三种策略。summary.json和scenario_results.csv,便于结果统计。算法说明
OfficialHEFT
OfficialHEFT直接调用参考资料HEFT 求解器:该策略作为评测基线,也是
ratio指标的分母。它会根据任务依赖、节点处理速度、资源可行性和节点间通信代价生成一个启发式调度结果。Random
Random是随机调度策略。它每一步从当前 ready task 集合中随机选取任务,再从该任务的合法节点集合中随机选取执行节点。MaskedPPO
MaskedPPO是本项目的可训练策略。训练分为两个阶段:在决策时,模型只在合法动作空间中选择任务和节点:
项目结构
环境要求
建议使用 Python 3.8 及以上版本。项目依赖如下:
如果使用 GPU,需要安装与本机 CUDA 版本匹配的 PyTorch。若没有可用 GPU,可将配置文件中的
experiment.device改为cpu。安装说明
进入项目根目录:
创建并激活 Conda 环境:
安装依赖:
检查运行环境:
该命令会输出 Python、操作系统、PyTorch、CUDA 可用性和数据清单目录等信息。
数据说明
默认配置文件为:
其中主要数据字段如下:
data/manifests/下包含:运行说明
如果有
.stg数据集,可使用脚本完成数据转换、训练和评测:脚本内部会依次执行:
例如:
配置说明
configs/submission.yaml中的核心参数如下:常用修改项:
experiment.device:设置为cuda或cpu。experiment.output_dir:设置训练结果和评测结果输出目录。training.bc_max_scenarios:行为克隆阶段最多使用的训练场景数量。training.rl_epochs:PPO 训练轮数。training.episodes_per_epoch:每轮 PPO 使用的 episode 数量。training.validation_limit:每轮验证时最多使用的验证场景数量。evaluation.test_limit:测试场景数量限制,0表示使用全部测试集。如果机器内存或显存不足,可优先降低:
输出结果
默认输出目录为:
训练和评测后会生成:
其中:
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。默认评测结果包含三种策略:
常见问题
1. 配置为 cuda 但无法运行
如果当前环境没有可用 GPU,
python main.py doctor会显示cuda_available: false。此时请将configs/submission.yaml中的:改为:
2. 训练时内存不足或进程被杀死
可以降低训练规模:
如果使用大规模 STG 数据,也可以先减少输入
.stg文件数量进行调试。3. 重新准备数据后结果路径在哪里
scripts/prepare_data.py会根据配置写入:训练和评测结果写入
experiment.output_dir,默认是: