1. 课程导入

当你训练好一个精度不错的神经网络模型,准备把它放进摄像头、手表、无人机或工业网关时,往往会遇到一个尴尬的现实:模型在服务器上跑得很好,但到了嵌入式设备上却“跑不动”。原因通常不是算法错了,而是算力、内存、带宽和功耗这四道门槛同时压了过来。模型量化与嵌入式部署,正是解决“模型如何真正落地”的工程学科。

本节核心问题:模型量化解决“模型太大、太慢、太耗电”的问题;嵌入式部署解决“模型如何被目标硬件正确执行”的问题。两者结合,才构成从训练产物到可运行产品的完整链路。

一、定义:量化与部署分别做什么

模型量化是指把神经网络中原本以 FP32(32位浮点数)表示的权重和激活值,转换为更低比特宽度的表示形式,例如 INT8、INT4,甚至二值化。它的本质是用更少的比特去近似原来的数值分布,从而减少存储占用、降低内存带宽压力,并让硬件可以使用整数运算单元加速计算。

嵌入式部署则是指将训练完成的模型经过格式转换、图优化、算子适配、内存规划后,运行在资源受限的嵌入式平台上的全过程。它不只是“把模型拷进去”,而是涉及模型表示、运行时环境、硬件后端和系统约束的协同设计。

两者关系可以这样理解:量化是模型侧的压缩与加速手段,部署是系统侧的集成与执行手段。量化后的模型如果没有合适的部署工具链,仍然无法在目标芯片上高效运行;而部署工具链如果没有量化支持,也很难充分发挥边缘硬件的性能。

二、核心概念地图

本课程围绕一条主线展开:训练模型 → 量化表示 → 图优化 → 格式转换 → 运行时执行 → 硬件加速。在这条主线上,需要掌握以下核心概念:

  • 数值精度:FP32、FP16、BF16、INT8、INT4 等不同表示方式及其精度与效率权衡。
  • 量化粒度:逐层量化、逐通道量化、逐组量化,粒度越细通常精度越好,但元数据开销也越大。
  • 校准与微调:训练后量化(PTQ)依赖校准集统计动态范围;量化感知训练(QAT)则在训练中模拟量化误差。
  • 算子融合:将 Conv+BN+ReLU 等组合合并,减少访存和调度开销。
  • 运行时与后端:TensorFlow Lite、ONNX Runtime、NCNN、TVM、厂商 SDK 等负责在目标硬件上执行模型。
  • 硬件约束:MCU 的 SRAM 大小、NPU 的算子支持列表、DSP 的向量宽度、内存带宽和功耗预算。

三、整体知识框架

下图展示了本课程的知识结构:从模型侧到系统侧,从量化原理到部署落地,形成一条完整的工程链路。

模型量化与嵌入式部署知识框架 训练模型 FP32 权重与激活 PyTorch / TensorFlow 量化表示 PTQ / QAT INT8 / INT4 / 混合精度 部署工具链 图优化 / 格式转换 TFLite / ONNX / NCNN 目标硬件 MCU / NPU / DSP / GPU SRAM / 带宽 / 功耗 工程落地关键能力 精度评估 Top-1 / mAP / 误差 性能分析 延迟 / 内存 / 功耗 算子适配 支持列表 / 回退策略 系统集成 驱动 / 调度 / 接口

四、典型应用场景

模型量化与嵌入式部署并不是实验室里的概念,它已经广泛存在于我们身边的产品中:

应用场景 典型硬件 量化需求 部署挑战
智能摄像头 / 人脸识别 NPU + ARM CPU INT8 为主,部分 INT4 多路视频流并发、内存带宽
可穿戴设备 / 健康监测 MCU + 低功耗 DSP INT8 甚至二值化 KB 级 SRAM、毫瓦级功耗
工业质检 / 缺陷检测 边缘 GPU / FPGA FP16 或 INT8 实时性、模型更新与版本管理
自动驾驶 / 辅助驾驶 车规级 SoC + NPU INT8 为主,混合精度 功能安全、确定性延迟
智能音箱 / 语音唤醒 低功耗 MCU INT8 / 二值化 常开监听、极低功耗

五、常见误区与学习建议

误区一:量化一定会掉精度。实际上,经过良好校准的 INT8 量化在多数视觉模型上精度损失可以控制在 1% 以内,部分模型甚至几乎无损。关键在于校准集选择、量化粒度和算子覆盖。
误区二:部署就是格式转换。格式转换只是第一步。真正的部署还包括图优化、算子替换、内存复用、线程调度和硬件后端适配。很多“模型跑不起来”的问题,根源在算子不支持或内存超限。
学习建议:先建立“精度—速度—内存—功耗”四维权衡意识,再动手跑通一条完整的量化部署流水线。建议从 TensorFlow Lite 或 ONNX Runtime 入手,在 PC 上验证量化效果,再迁移到真实嵌入式板卡。

六、一条最小可运行链路示例

下面以 TensorFlow Lite 为例,展示从训练模型到量化部署的基本命令流程。你不需要现在完全理解每一行,只需先建立整体印象:

# 1. 将 SavedModel 转换为 TFLite 浮点模型
tflite_convert \
  --saved_model_dir=./saved_model \
  --output_file=model_fp32.tflite

# 2. 训练后 INT8 量化(需要代表性数据集)
tflite_convert \
  --saved_model_dir=./saved_model \
  --output_file=model_int8.tflite \
  --optimizations=DEFAULT \
  --representative_dataset=rep_data_gen

# 3. 在目标设备上加载并推理
# interpreter = tf.lite.Interpreter(model_path="model_int8.tflite")
# interpreter.allocate_tensors()
# interpreter.invoke()

这条链路虽然简单,却已经包含了本课程后续要深入展开的几乎所有关键环节:模型表示、量化校准、格式转换、运行时加载和硬件执行。随着课程推进,我们会逐一拆解每个环节的原理、工具、参数和排障方法。

本章作为导入,目标是让你先看清全局:量化是手段,部署是过程,嵌入式落地是目标。接下来,我们将从数值表示和量化原理开始,逐步构建完整的工程能力。