🧠 第九章 政务与教育:AI赋能治理与教学创新实践
📄 一句话概括

YOLOv8n 每次推理 8.7 GFLOPs,2 GFLOPS 的低端板卡只有 0.23 帧/秒; 一节课按每秒 1 帧、 45 分钟算要 2700 次推理,得跑 196 分钟—— 一节课根本跑不完。同一块板子换成 MobileNetV2(0.3 GFLOPs)只要 7 分钟。

📝 本节和前面几节的关系

前两节都在讲算法。 这一节讲一个最容易被跳过的问题:算法跑得动吗。教育硬件往往是「一台几百块的盒子」, 它不会因为你的模型很先进就变快。

一、选型只有一个式子

每节课要做的总计算量 ÷ 设备的有效算力 = 需要多少秒。把这个秒数和课时比, 超过一半就该重新考虑。 总计算量很好算:每次推理的 FLOPs × 次数。比如「每秒处理 1 帧、一节课 45 分钟」, 就是 2700 次推理。注意这里的「每节课」是业务需求,不是技术参数——先把需求定死,再挑设备。 设备的有效算力是坑最多的一环。 厂商标的 TOPS 是峰值,真实推理通常只能发挥两三成。Demo 里按两成折算, 这不是保守,是行业通例。 为什么只能发挥两成? 因为矩阵乘是计算密集的,而卷积、归一化、 激活这些层是访存密集的—— 数据搬不过来,算力就空转。所以「峰值算力」和「这个模型能跑多快」是两个数,后者只能实测。

二、四档模型 × 三档设备

Demo 里本机实测矩阵乘 124 GFLOPS,按两成折算成 25 GFLOPS 的有效算力,作为参照; 再代入三档典型教育硬件,算每次推理的理论帧率:

模型 每次 GFLOPs 低端板卡 NPU 盒子 工控机
MobileNetV2 224 0.3 6.67 26.67 133.33
ResNet-50 4.1 0.49 1.95 9.76
YOLOv8n 640 8.7 0.23 0.92 4.60
轻量分割 512 15.0 0.13 0.53 2.67
三档设备按 2/8/40 GFLOPS 代入(低端板卡、带 NPU 的盒子、带独显的工控机)。
每一格是「设备有效算力 ÷ 每次 GFLOPs」,也就是理论帧率。
看 YOLOv8n 那一行:低端板卡 0.23 帧/秒,连实时都做不到;
NPU 盒子 0.92 帧,刚够每秒一帧但没有余量;只有 40 GFLOPS 的工控机才能到 4.6 帧。
而 MobileNetV2 在低端板卡上有 6.67 帧——同一块板子,换模型差 29 倍。
这就是为什么教育硬件上的模型选型,第一顺位永远是「够不够小」,而不是「准不准」。

三、一节课跑不完,是这么算出来的

2700 次推理 × 8.7 GFLOPs = 23490 GFLOPs。低端板卡 2 GFLOPS, 需要 11745 秒,也就是 196 分钟。 一节课 45 分钟,需求是 196 分钟——超了 4 倍多。这个系统上线之后的表现会是: 下课时分析结果才出来一半,而且还在继续算。 换 MobileNetV2:2700 × 0.3 = 810 GFLOPs,除以 2 得 405 秒,6.75 分钟,约 7 分钟。 能跑完,但没有余量——只要设备上还跑着别的进程,就会掉帧。 所以「能不能跑」不该用「试一下卡不卡」来判断。 试验的时候是空载,上线之后是满载。这个式子至少能让你在上线前知道差了 4 倍。

四、三条缓解手段,按性价比排

① 降输入分辨率。从 640 降到 320,面积是四分之一,FLOPs 差不多也降到四分之一。 这是最便宜的一招, 代价是小目标检不出来——如果任务是「数人头」「看有没有人趴桌」,320 完全够。 ② 换更小的模型。MobileNetV2 对 ResNet-50,差 13 倍。 准确率会掉几个点,但通常掉得起——教育场景的判断大多是粗粒度分类,不是精密检测。 ③ 上 NPU 或做 int8 量化。理论 4 倍,实测常是 2 到 3 倍。 代价是要有工具链支持——很多教育盒子只支持特定格式的模型, 转不过去就得换硬件,这一条的隐性成本最高。 顺序不能反:先降分辨率(改一个参数),再换模型(改一次训练),最后才动硬件(改一次采购)。 先动硬件的项目,预算一定超。

五、落地:先算预算,再选板子

第一步,把需求写成式子。「每秒几帧、每节课多少分钟、 要跑几个模型」——三个数乘起来就是每节课的 GFLOPs 预算。 第二步,拿候选板子实测。 不要看规格书上的 TOPS,拿你的模型在上面跑一遍。 这一步不能省——同一颗芯片、不同内存带宽,实测能差两倍。 第三步,留一半余量。算出来占 30% 是安全线,占到 50% 就该考虑降配。设备还要跑操作系统、 解码视频、传数据,这些都不在模型的 FLOPs 里。 第四步,把「跑不动」当需求而不是故障。如果确实需要高精度模型, 那就该设计成「设备只做采集,分析放服务器」——边缘算力不够的时候,架构比优化更有效。

六、动手 Demo:边缘算力:8.7 GFLOPs 的检测模型,2 GFLOPS 板卡只有 0.23 帧

先在本机实测 1024 阶矩阵乘的 GFLOPS(取四次平均),按两成折算成「有效算力」; 再把四档常见视觉模型的单次 GFLOPs和三档教育硬件的算力代进去,算每次推理的理论帧率; 最后按「每秒 1 帧、45 分钟一节课 = 2700 次推理」折算总耗时。

def gflops(n=1024, rep=4):
    a = rg.normal(0, 1, (n, n))
    b = rg.normal(0, 1, (n, n))
    a @ b                              # 预热
    t0 = time.perf_counter()
    for _ in range(rep):
        a @ b
    dt = (time.perf_counter() - t0) / rep
    return 2.0 * n ** 3 / dt / 1e9     # 一次乘加算 2 FLOPs

devs = [(u"低端板卡", 2.0), (u"带 NPU 的盒子", 8.0),
        (u"带独显的工控机", 40.0)]
fps = g / fl                           # 每格:有效算力/每次 GFLOPs

实跑输出:

--------------------------------------------------------------------
边缘算力:8.7 GFLOPs 的检测模型,2 GFLOPS 板卡只有 0.23 帧
--------------------------------------------------------------------
  本机实测矩阵乘           124 GFLOPS
  折算有效算力             25 GFLOPS(按峰值两成)

  模型              每次 GFLOPs   低端板卡   带 NPU 的盒子   带独显的工控机
  ------------------------------------------------------------------------
  MobileNetV2 224           0.3       6.67           26.67   133.33
  ResNet-50                 4.1       0.49            1.95   9.76
  YOLOv8n 640               8.7       0.23            0.92   4.60
  轻量分割 512             15.0       0.13            0.53   2.67
  每一格是「设备有效算力 ÷ 每次 GFLOPs」,也就是**理论帧率**。
  看 **YOLOv8n 那一行**:2 GFLOPS 的板卡只有 **0.23 帧/秒**,8 GFLOPS 的盒子 0.92 帧,
  **只有 40 GFLOPS 的工控机才能到 4.6 帧。**
  而一节课的需求是「每秒 1 帧、45 分钟」,也就是 **2700 次推理**。
  2 GFLOPS 板卡跑 YOLOv8n:**196 分钟**,一节课跑不完。
  同一块板卡跑 MobileNetV2(0.3 GFLOPs):**7 分钟**,勉强够,但没有任何余量。
  所以教育硬件的选型判断只有一个式子:
  **每节课总 FLOPs ÷ 设备有效算力,得到总秒数,再和课时比。**比例超过 0.5 就该降模型或降频率。
  三条缓解手段,按性价比排:
  **① 降输入分辨率**(面积减到四分之一,FLOPs 也差不多降到四分之一);
  **② 换更小的模型**(MobileNet 对 ResNet,差 13 倍);
  **③ 上 NPU 或 int8 量化**(理论 4 倍,实测常是 2 到 3 倍)。
  要说明:设备那三档是**代入口径,不是实测**——沙箱里没有这些板子。
  本机那个 124 GFLOPS 是真测的,但它只是**上界**:真实推理受内存带宽限制,**通常只能发挥两成左右**,所以表里没直接用峰值算。

done -> _out_39o.txt

本机实测矩阵乘 124 GFLOPS、折算 25 GFLOPS。 这两个数差距这么大,就是为了让「峰值不等于可用」这件事有个具体的样子。 YOLOv8n 那一行:0.23/0.92/4.60 帧。 从低端板卡到工控机差 20 倍,而模型一个字节没改。 算力不够是硬件问题,不是模型问题。 一节课那个折算:196 分钟对 45 分钟。 这个比值(4.35)比帧率更直观——帧率 0.23 听起来「慢一点」, 折算成课时才知道是「根本做不完」。 MobileNetV2 的 7 分钟也不是好成绩:只占课时的 15%,但没有余量。 真实部署还要加上系统开销,实际会明显更长。 要说明:三档设备的算力是我代进去的口径,不是实测——沙箱里没有这些板子。 本机那个 124 GFLOPS 是真测的,但它只是上界(真实推理受内存带宽限制,通常只发挥两成), 而且每次跑会有浮动。换到具体硬件上,请用实际型号的实测数据重算这张表。

30 秒实验

  1. 把输入分辨率从 640 降到 320, 把 YOLOv8n 的每次 GFLOPs 按四分之一(8.7 到 2.2)重算一节课的耗时。 196 分钟会掉到 50 分钟左右,勉强能做但仍旧吃紧。
  2. 把「每秒 1 帧」改成「每秒 0.2 帧」(5 秒一次),重算。 次数从 2700 降到 540,低端板卡 39 分钟——降频率是最有效的一招。
  3. 把有效系数从两成改成五成(假设优化得很好),看工控机那一档。 YOLOv8n 从 4.60 帧涨到 11.5 帧,但实际很难达到五成。

常见误区

  1. 「规格书写 40 TOPS,肯定够用」。峰值和可用差五倍以上,必须拿自己的模型实测。
  2. 「先在好设备上调通,再往便宜的板子上搬」。 搬过去才发现差 4 倍,架构要重做。应该先算预算再选型。
  3. 「算力不够就上量化」。 量化是有收益,但先降分辨率更便宜,而且转格式的隐性成本经常比硬件还高。
自测三问(点开对答案) 1. 怎么快速判断一块板子能不能跑一个模型? —— 用「每次推理 FLOPs × 每节课次数 ÷ 设备有效算力」算出总秒数,和课时比。 占课时一半以上就该降配。 2. 为什么峰值算力只能发挥两三成? —— 卷积、归一化、激活这些层是访存密集的,数据搬不过来算力就空转。 峰值只在纯矩阵乘这类计算密集场景才接近。 3. 三条缓解手段的正确顺序是什么? —— 先降输入分辨率(改参数),再换小模型(改训练),最后才动硬件(改采购)。 先动硬件的项目预算一定超。

第九章到这里结束。 政务与教育的六件事都指向同一个判断: 能不能落地,取决于数据、代价和算力这三条硬约束,不取决于模型有多新。下一章换到交通与智驾, 这三条约束只会更紧。

相关笔记