目录

云-边-端异构计算资源调度框架

本项目对应高校赛题“研究创新-基于深度强化学习的云-边-端异构计算资源 管理调度方法”。给定带依赖约束的任务 DAG、异构计算资源和有向网络参数, 调度器为就绪任务选择执行节点,以降低整体完成时间(makespan)。

项目提供可训练、可配置、可插拔和可复现的完整工程框架,而不只是单个模型:

  • 云、边、端异构资源及非对称带宽/延迟模拟器。
  • JSON/YAML 场景生成、保存、加载和固定 seed 数据划分。
  • 统一 Scheduler 接口及 Random、EFT、HEFT 外部基线。
  • NumPy 强化学习环境、离散任务-资源动作和 action masking。
  • PyTorch masked PPO、HEFT 行为克隆、领域特征和专家约束。
  • 按任务规模路由的双 BC checkpoint,以及 BC + EFT 候选组合。
  • 固定测试、270 场景泛化评测、合法性审计和规模压力测试。
  • 100 场景混合规模固定测试及九方法统一消融评测。
  • 一条命令完成数据生成、训练、评测和最终结果导出。

正式结果

推荐策略为 routed_bc_eft:

  1. 12 任务及以下使用小规模 BC checkpoint,超过 12 任务使用混合规模 BC。
  2. 路由 BC 与 EFT 分别生成完整时间表。
  3. 选择 makespan 更短的候选结果。

这是明确标注的“BC + 启发式候选组合”,不读取 HEFT 评测答案,也不将 行为克隆或组合成绩表述为纯 DRL 单模型成绩。真正经过 PPO 更新的模型通过 独立的 best_ppo.pt 报告,即使其性能低于 BC 也保留供复核。

评测 场景数 mean ratio to HEFT
混合固定测试 routed_bc_eft 100 1.1076
混合固定测试 bc_initialized_ppo_eft 100 1.1101
混合固定测试 EFT 100 1.1600
泛化九组宏平均 270 1.1133
泛化最好组:稠密 DAG 30 1.0405
泛化最差组:24 任务 30 1.1706

指标定义:

mean_ratio = mean(policy_makespan / HEFT_makespan)

数值越低越好,1.0 表示与 HEFT 相同。正式汇总位于 outputs/final/final-v3-audited/summary.json,逐组指标位于 outputs/final/final-v3-audited/metrics.csv。九方法严格消融位于 artifacts/results/ablation-nine-method-v3/。

固定测试审计 400 份时间表,泛化评测审计 1080 份时间表,任务缺失、依赖 违规、资源重叠和非法动作计数均为 0。九方法消融另审计 900 份时间表, 同样全部合法。

系统结构

flowchart LR
    C["YAML 配置"] --> G["场景生成与数据划分"]
    G --> S["DAG、异构资源与网络场景"]
    S --> E["调度模拟器 / RL 环境"]
    E --> B["Random / EFT / HEFT"]
    E --> R["Masked PPO / HEFT 行为克隆"]
    R --> T["任务规模路由"]
    B --> P["BC + EFT 候选组合"]
    T --> P
    P --> A["合法性审计"]
    A --> O["JSON / CSV / 图表 / 最终汇总"]

环境、场景来源、资源参数和调度策略通过独立模块连接。所有策略使用相同的 场景模型、合法动作约束和评测指标。

环境准备

推荐环境:

  • Python 3.11
  • CPU 版 PyTorch
  • openEuler 24.03 LTS SP4 或 Windows

Windows Conda 示例:

conda create -p D:\conda_envs\scheduler python=3.11
conda activate D:\conda_envs\scheduler
pip install -r requirements.txt

Windows 开发环境使用 Python 3.11.15 和 PyTorch 2.12.0+cpu。 openEuler 验证环境使用 openEuler 24.03 LTS SP4、内核 6.6.0-159.4.3.154.oe2403sp4.x86_64、Python 3.11.6 和 PyTorch 2.12.0+cpu。验证虚拟机分配 2 个 CPU、3 GB 内存和 40 GB 动态磁盘, 网络模式为 NAT。

项目代码不依赖 CUDA;不同平台安装 PyTorch 时应选择与平台匹配的 CPU wheel。

一键复现

完整执行单规模和混合规模数据生成、双模型训练、固定测试、270 场景泛化 评测及最终汇总:

Windows:

python scripts\run_full_pipeline.py `
  --config configs\final_pipeline_v3.yaml

openEuler:

source ~/scheduler-env/bin/activate
cd ~/cloud-edge-scheduler
mkdir -p outputs/final/openeuler-full-v3
time python -u scripts/run_full_pipeline.py \
  --config configs/final_pipeline_openeuler.yaml \
  2>&1 | tee outputs/final/openeuler-full-v3/console.log

openEuler 专用配置使用独立的数据、模型和结果目录,避免覆盖 Windows 正式 v3 产物。正式复现命令不带 --reuse-existing。

已有完整数据和 checkpoint 时可复用通过指纹校验的训练产物:

python scripts\run_full_pipeline.py `
  --config configs\final_pipeline_v3.yaml `
  --reuse-existing

正式输出目录:

outputs/final/final-v3-audited/
  summary.json
  metrics.csv
  pipeline_run.json
  configs/
  logs/
  fingerprints/
  fixed-test/
  generalization/

--reuse-existing 会同时校验步骤命令、输入文件或目录、源码、Git 状态和 输出产物 SHA-256。缺少旧版指纹,或任一指纹发生变化时,该步骤会自动重跑; 上游产物变化还会使依赖它的下游步骤失效。最终正式实验仍要求从空输出目录 且不带该参数完整运行一次。

openEuler 复现结果

2026-07-28 在 openEuler 空输出目录中完成了不带 --reuse-existing 的 六步流水线。数据生成两步、模型训练两步、固定测试和泛化评测在 pipeline_run.json 中均记录为 completed。

平台 Python / PyTorch 固定测试 ratio 泛化宏平均 ratio 流水线耗时
Windows 正式 v3 3.11.15 / 2.12.0+cpu 1.1076 1.1133 约 313.1 秒
openEuler 最终 GitLink 验收 3.11.6 / 2.12.0+cpu 1.1062 1.1131 642.524 秒

跨平台重新训练结果存在轻微浮点与优化轨迹差异,但两个平台的指标和方法排序 保持一致。最终验收从 GitLink 提交 b8e2d5e9d89a5adc80d1ad9bb353b27d6766ab55 全新 clone,在干净工作树中 完成依赖完整性检查、当前 93 项自动化测试和无复用六步流水线:

No broken requirements found.
93 tests passed
6/6 pipeline steps completed
git_dirty=false

正式证据位于 artifacts/openeuler/final-acceptance/,包括:

  • system-info.txt:系统版本、内核、CPU、内存和磁盘信息。
  • requirements-freeze.txt:Python 依赖版本。
  • console.log 与 logs/:总控制台日志和六步独立日志。
  • pipeline_run.json:六步状态、耗时和产物路径。
  • fingerprints/:输入、源码和输出产物指纹。
  • summary.json、metrics.csv、固定测试及泛化明细。

自动化测试

python -m pytest

当前共有 93 项测试,已在 Windows 和 openEuler 最终验收环境全部通过。 测试覆盖:

  • DAG、资源、通信和资源时间轴。
  • 场景生成、序列化和数据集复现。
  • Random、EFT、HEFT、模型路由和候选组合。
  • 强化学习环境、action mask、PPO、行为克隆和 checkpoint。
  • 调度合法性审计、报告、图表和最终流水线。
  • 32/64/90 任务压力测试及超容量跳过逻辑。

规模边界

运行压力测试:

python scripts\run_scale_stress_test.py `
  --config configs\scale_stress.yaml `
  --checkpoint artifacts\models\small\best_bc.pt `
  --large-checkpoint artifacts\models\mixed\best_bc.pt `
  --task-threshold 12 `
  --output outputs\stress\scale-v1 `
  --device cpu

32、64、90 任务各使用 3 个固定场景。动态强化学习环境、EFT 和 HEFT 均 成功运行至 90 任务,30 份已完成时间表全部合法。

现有 checkpoint 的固定容量为 max_tasks = 32。因此组合策略只在 32 任务运行;64 和 90 任务明确记录为超容量跳过。这里区分“框架支持 90 任务”和“当前 DRL 模型支持 90 任务”,后者尚未实现。

主要入口

任务 命令
最小演示 python scripts/run_demo.py
数据集生成 python scripts/generate_dataset.py --config configs/dataset.yaml --output data/datasets/baseline-v1
基线评测 python scripts/evaluate_baselines.py --scenarios data/datasets/baseline-v1/test --output outputs/baselines/test
PPO 训练 python scripts/train_ppo.py --config configs/ppo.yaml --dataset data/datasets/baseline-v1 --output outputs/training/ppo-v1
PPO 诊断冒烟测试 python scripts/train_ppo.py --config configs/ppo_diagnostics_smoke.yaml --dataset data/datasets/baseline-v1 --output outputs/validation/ppo-diagnostics-smoke
泛化评测 当前 v3 完整复现命令
混合规模消融 九方法完整复现命令
完整流水线 python scripts/run_full_pipeline.py --config configs/final_pipeline_v3.yaml
openEuler 完整流水线 python scripts/run_full_pipeline.py --config configs/final_pipeline_openeuler.yaml

项目结构

configs/                  数据、训练、泛化和流水线配置
scripts/                  可直接执行的命令入口
src/cloud_edge_scheduler/ 核心模型、环境、策略、训练与报告代码
tests/                    自动化测试
docs/                     设计、实验、复现和压力测试文档
artifacts/                可直接复核的模型、固定测试集、正式结果和系统证据
data/                     生成的数据集,默认不提交 Git
outputs/                  模型和实验产物,默认不提交 Git
工作日志.md                选题、决策、实验结果和开发记录

文档索引

已知限制

  • 现有 DRL checkpoint 最多支持 32 任务;更大规模需要调整编码容量并重新训练。
  • 当前最佳正式方法是 BC + EFT 候选组合,不是单一 DRL 模型。
  • 100 场景混合消融已使用身份明确的 v3 checkpoint 在严格模式完成;所有 学习方法仍弱于 HEFT,结果与限制已如实报告。
  • Python 内存追踪不包含已加载的 PyTorch 原生内存,压力测试报告已明确测量口径。
  • Windows 正式流水线以及 openEuler 最终 GitLink 验收的自动化测试和完整 流水线均已通过;正式验收 commit、干净指纹、配置快照和完整结果均保存在 artifacts/openeuler/final-acceptance/。
关于
40.2 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

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