【边缘计算实战】P1:从零搭建边云任务卸载仿真实验台(Python 可复现)

适合人群:研0 / 本科毕设 / 想入门 Computation Offloading 的同学
系列说明:巡检机器人场景下的边云协同(P1 仿真 → P2 运行时 → P3 在线 → P4 运维诊断)
代码仓库:https://gitee.com/ghaweiuptgb/edge-computing
本篇对应目录projects/p01-offloading-lab


一、写在前面

边缘计算里有个非常经典的问题:计算卸载(Computation Offloading)——一个推理/检测任务,到底放在本地边缘算,还是卸载到云端算?

很多文章停留在公式推导,缺少「能跑、能对比、能复现」的小实验台。本篇带你用 纯 Python 搭一个最小但完整的卸载仿真实验台,并产出可写进组会 PPT 的对比图。

本篇你将得到:

  • 清晰的时延代价模型
  • 4 种可插拔策略(含基线)
  • 固定随机种子、≥1000 任务的可复现实验
  • 一张能说明「无脑策略会翻车」的结果图

二、问题场景(巡检机器人)

想象复杂环境下的巡检机器人:摄像头持续产生「缺陷检测」类感知任务。

  • 边缘节点:离机器人近,RTT 小,但算力有限,容易排队
  • 云端:算力强,但弱网时传输代价陡增

目标不是做一个「万能调度器」,而是先证明:

在弱网 / 过载工况下,合理策略显著优于 Always-Local / Always-Cloud。


三、时延代价模型

端到端时延拆成四项(代码与文档一致):

[
T = T_{tx} + T_{queue} + T_{compute} + T_{base}
]

符号 含义 直觉
(T_{tx}) 传输 图大、带宽小、上云 RTT 大时变差
(T_{queue}) 排队 边侧过载时变差
(T_{compute}) 计算 复杂度高、核少时变差
(T_{base}) 固有开销 云端通常更大

成功判定:(T \le deadline) 则成功,否则超时。


四、四种策略

策略 行为 典型翻车场景
always_local 固定走本地边缘 边侧过载
always_cloud 固定上云 弱网
threshold 队列/时延超阈值才上云 阈值极端时退化
greedy_min_latency 选估计时延最小的节点 估计不准时(研一再改进)

研究里一定要有「傻基线」。没有 AlwaysLocal/AlwaysCloud,你的改进看不出价值。


五、环境与快速跑通

git clone https://gitee.com/ghaweiuptgb/edge-computing.git
cd edge-computing/projects/p01-offloading-lab
pip install -r requirements.txt

# 单元测试
python -m pytest tests/ -v

# 跑实验(1000 任务,种子 42)
python scripts/run_experiments.py --seed 42 --n-tasks 1000

# 总验收
python scripts/accept_p1.py

结果输出在:

experiments/results/
  summary.md
  summary.csv
  timeout_normal.png
  timeout_weak_net.png
  timeout_edge_overload.png
  latency_*.png

六、关键代码结构

p01-offloading-lab/
├── src/
│   ├── models.py          # 任务/节点/网络/工况
│   ├── cost.py            # 时延分解
│   ├── policies/          # 四种策略
│   ├── simulator/         # 工作负载 + 仿真引擎
│   └── eval/              # 汇总与出图
├── scripts/run_experiments.py
└── docs/教学手册.md

策略统一接口(示意):

class OffloadingPolicy(ABC):
    def select(self, task, nodes, network) -> ComputeNode:
        ...

这样实验脚本可以对 同一批任务 切换策略,保证对比公平。


七、一组可复现实验结果(seed=42, n=1000)

工况 现象(摘要)
normal greedy / threshold 成功率可达 100%;两基线因单点拥塞很差
weak_net always_cloud 超时率显著高于 greedy
edge_overload always_local 进一步变差;智能策略仍稳

组会口述三句话:

  1. 无脑策略会把单一节点队列打满。
  2. 弱网主要惩罚云端传输项。
  3. 用代价模型做决策,能明显降低超时。

八、常见问题

Q1:仿真和真实系统差很多怎么办?
A:研0 先保证可讲解、可复现。下一篇 P3 会把策略接到真实 HTTP 推理服务,并对比 online vs sim。

Q2:为什么不上强化学习?
A:中等难度路线优先把建模与评测做扎实;RL 留研一。

Q3:和导师的视觉组怎么衔接?
A:视觉组出模型,你出「何时何地跑模型」的决策与评测。


九、小结与下期预告

P1 解决的是:纸面上把卸载问题跑通并出图

下一篇 【P2】巡检边缘运行时:用 Docker Compose 拉起真正的 edge/cloud 服务,提供 /infer、注册与心跳——把「节点」从对象变成可调用的微服务。


标签建议边缘计算 计算卸载 Python 仿真 研究生 可复现实验

系列导航:P1(本篇) → P2 运行时 → P3 在线卸载 → P4 可观测诊断

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐