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

【边缘计算实战】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,你的改进看不出价值。


五、环境与快速跑通

bash 复制代码
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

结果输出在:

text 复制代码
experiments/results/
  summary.md
  summary.csv
  timeout_normal.png
  timeout_weak_net.png
  timeout_edge_overload.png
  latency_*.png

六、关键代码结构

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

策略统一接口(示意):

python 复制代码
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 可观测诊断

相关推荐
隔壁阿布都1 小时前
MySQL 间隙锁死锁问题处理
数据库·mysql
蜡台2 小时前
通过Gradle脚本声明更改Java变量
android·java·开发语言·python·kotlin·gradle·groovy
qiuziqiqi2 小时前
Shopify推送订单及异常状态错误码说明
数据库
智能体与具身智能2 小时前
TVA 本质内涵与核心特征(系列)
人工智能·python·智能体视觉
云雾J视界3 小时前
SST:高频变压器设计实战:铁氧体 vs 纳米晶 vs 非晶,磁性材料怎么选
python·acdc·dab·sst
第一程序员3 小时前
Rust trait 入门:把 AI 客户端抽象成可替换接口
python·rust·github
三品PLM系统3 小时前
【无标题】
数据库·制造·cadence·plm
Ulyanov3 小时前
Python实现6-DOF刚体仿真器(下)——环境扰动与控制闭环
开发语言·python·算法·系统仿真·雷达电子对抗·导引头
ITxiaobing20233 小时前
如何构建IP维度的假量排查流程:以AppsFlyer Protect360判假后的实战为例
网络·数据库