边缘AI任务怎么切?张量边界如何定?
把模型从云端搬到设备上之后,系统边界不再等于模型边界。边缘AI能否稳定实时,取决于子图在哪里切开,以及切开后谁拥有那块张量缓冲。
跨处理器切分不能只按算子数量平均分配。卷积前端放在NPU、后处理留给CPU,看似符合各自长处,但真正的代价取决于切点处张量的尺寸和格式。早期特征图分辨率高,哪怕后续计算量很小,一次跨域传输也可能占满片上互连;切得太晚,又会让不受支持的算子把整段子图拉回CPU。于是条件从“哪边算得快”变成“计算节省能否覆盖序列化、同步和格式转换”。
切点还受内核覆盖和量化域约束。两个处理器若采用不同的张量布局或量化尺度,边界处就要插入转置、反量化再量化,既增加带宽,也扩大数值误差。动态尺寸模型更棘手:编译器可能只为常见形状生成加速内核,现场输入一变便触发回退。因此,应从编译报告中确认边界算子的执行域,并以最坏输入尺寸测量传输时间,不能拿静态MAC数量代替端到端证据。
合理分割需要把流水线也纳入模型。摄像头预处理、推理与控制输出可以并行时,某段子图略慢并不一定拉长周期;若切点引入全局同步,原本能重叠的阶段却会串行。工程上应给每个候选切点建立“张量字节数、转换次数、同步等待、计算时长”四项账,再按截止期而非平均吞吐选择。网络连接参与分割时,还必须把丢包重传和抖动放进上界,否则实验室结论无法迁移到现场。
切分方案还要保留故障时的完整退路。若远端处理器重启或子图编译失败,直接把剩余部分临时交给CPU,可能让时延突然越过控制截止期。可接受的回退应在设计阶段就限定功能,例如降低输入分辨率、只运行关键类别或暂时停用非安全输出,并提前测出回退路径的内存与功耗。这样切分节点失联时,系统不会用一个未经验证的慢路径假装仍在正常服务。
确定切点以后,零拷贝也不是把同一地址交给所有模块就结束。摄像头、CPU和NPU可能看到同一片物理内存,却拥有不同缓存视图;生产者尚未完成写回,消费者就启动DMA,会读到旧数据。反过来,缓冲仍被加速器占用时由采集线程覆盖,结果会表现为随机花屏或置信度跳变。零拷贝成立的前提,是内存可被相关主设备访问,并且所有权交接有明确的完成事件。
边缘AI运行时应把缓冲状态设计成有限状态机,例如空闲、采集中、可推理、推理中和可回收。状态变化由硬件栅栏或完成中断驱动,不能靠固定延时猜测;缓存一致性不由硬件自动保证的平台,还要在所有权移交点执行精确范围的清理或失效。整片缓存粗暴刷新虽然容易实现,却会污染其他实时任务,并把零拷贝省下的时间重新花在维护操作上。
验证时应同时追踪帧号、物理缓冲编号和每次所有权变化。若只在算法输出上找异常,很难分清是模型误判、边界转换出错,还是上一帧残留。压力测试要覆盖不同分辨率、并发模型和丢帧路径,确认取消任务后缓冲仍能被正确回收。只有切分收益在最坏传输条件下仍为正,且缓冲交接没有竞争窗口,跨处理器部署才算真正完成。
因此,任务分割的核心不是把算力摊匀,而是控制边界代价与数据所有权。把切点和缓冲协议一起设计,边缘AI才能既少搬数据,又不靠偶然时序运行。





