课程导入:学习目标、课程大纲、适用人群、前置知识要求、整体学习路径
随着深度学习模型在移动端、嵌入式设备、边缘计算节点上的广泛部署,模型参数量与计算量同硬件资源受限之间的矛盾日益突出。以ResNet-50为例,其原始FP32权重约98MB,单次推理浮点运算量约3.8GFLOPs,在手机SoC或MCU上直接运行既不现实也不经济。模型量化压缩与轻量化部署,正是为了解决这一核心矛盾而诞生的系统工程学科。本章作为整个课程的开篇,将为你勾勒出完整的学习地图——明确学完本课程后你将具备的能力、课程内容的组织逻辑、适合的学习者画像、需要提前储备的知识基础,以及一条从理论到实战的渐进式学习路径。
1.1 学习目标:从“能跑通”到“跑得快、跑得省”
本课程的学习目标不是简单地教会你调用某个量化工具,而是帮助你建立一套完整的模型压缩与部署工程思维。学完本课程后,你将具备以下核心能力:
- 理论层面:深入理解量化(Quantization)的数学原理,包括对称/非对称量化、逐层/逐通道量化、动态/静态量化的适用场景;掌握剪枝(Pruning)、知识蒸馏(Knowledge Distillation)、低秩分解(Low-rank Factorization)的基本原理与数学表达。
- 工程层面:熟练使用PyTorch、TensorFlow等框架完成模型的量化感知训练(QAT)和训练后量化(PTQ);掌握ONNX Runtime、TensorRT、OpenVINO、TFLite、NCNN等主流推理引擎的模型转换与部署流程。
- 实战层面:能够针对具体硬件(如NVIDIA Jetson、高通骁龙、RK3588、Intel x86)制定量化与压缩方案,完成从模型训练到端侧部署的全链路开发,并具备性能调优(延迟、吞吐、内存占用)和精度恢复的能力。
- 评估层面:掌握模型压缩后的评估方法论,包括精度-速度权衡(Accuracy-Speed Trade-off)、模型体积-内存占用分析、能耗评估等,能够用数据驱动的方式做出工程决策。
核心目标拆解:本课程最终希望你达到“三个一”——一套方法论(面对任何模型和硬件都能快速制定压缩方案)、一套工具链(熟练使用至少2种推理引擎完成部署)、一个完整项目(独立完成从FP32到INT8的压缩部署并输出性能报告)。
1.2 课程大纲:六大模块、三十章递进式学习
整个课程共30章,划分为六个递进式模块,每个模块解决一个核心工程问题。下表展示了完整的课程结构:
| 模块 | 章节范围 | 核心主题 | 关键产出 |
|---|---|---|---|
| 模块一:量化基础 | 第1-6章 | 量化原理、PTQ、QAT、混合精度量化 | 完成一个分类模型的INT8量化,精度损失<1% |
| 模块二:结构压缩 | 第7-12章 | 结构化剪枝、非结构化稀疏、低秩分解 | 将ResNet-50剪枝至40%FLOPs,精度保持90%以上 |
| 模块三:知识蒸馏 | 第13-16章 | Logit蒸馏、特征蒸馏、多教师蒸馏 | 用蒸馏训练MobileNetV3达到ResNet-50的精度 |
| 模块四:轻量化架构 | 第17-20章 | MobileNet系列、ShuffleNet、EfficientNet-Lite | 根据硬件约束选择或设计轻量化骨干网络 |
| 模块五:推理引擎 | 第21-26章 | ONNX Runtime、TensorRT、OpenVINO、TFLite、NCNN | 完成模型转换、图优化、算子融合、INT8校准 |
| 模块六:端侧部署 | 第27-30章 | Android/iOS部署、嵌入式Linux、性能基准测试 | 在指定硬件上完成YOLOv8的INT8部署,FPS≥30 |
每个章节都遵循“理论讲解→代码演示→实验对比→排障复盘”的闭环设计。例如在第5章“量化感知训练”中,你不仅会学习QAT的数学原理,还会动手实现一个完整的QAT训练循环,对比PTQ与QAT在不同模型上的精度差异,并分析导致差异的层间敏感度分布。
1.3 适用人群与前置知识要求
本课程面向有一定深度学习基础、希望向模型部署方向发展的工程师和研究人员。具体来说,以下三类人群最适合本课程:
- 算法工程师:已经训练过深度学习模型,但模型体积大、推理速度慢,需要掌握压缩与加速技术以支撑业务上线。
- 部署/系统工程师:负责将模型部署到实际硬件(如手机、摄像头、机器人),需要深入了解量化原理和推理引擎的底层优化机制。
- 研究人员/学生:研究方向为高效AI、边缘计算,需要系统掌握模型压缩的理论框架和实验方法。
前置知识要求如下表所示,建议在开课前自查:
| 知识领域 | 具体要求 | 推荐自查方式 |
|---|---|---|
| Python编程 | 熟练使用NumPy、PyTorch基础API,能阅读和修改模型定义代码 | 独立完成一个MNIST分类器的训练与推理 |
| 深度学习基础 | 理解CNN/Transformer的基本结构、反向传播、损失函数、优化器 | 能解释ResNet的残差连接和BatchNorm的作用 |
| 线性代数 | 矩阵乘法、特征值分解、奇异值分解(SVD)的基本概念 | 能手动计算2×2矩阵的SVD分解 |
| Linux基础 | 熟悉命令行操作、conda环境管理、pip包安装 | 能在Ubuntu上配置PyTorch GPU环境 |
重要提醒:如果你对上述前置知识尚不熟练,建议先花1-2周时间补齐基础。特别是PyTorch的torch.nn.Module机制、torch.onnx.export流程以及TensorBoard的使用,这些将在后续章节中频繁出现。本课程默认你已具备这些能力,不会花篇幅讲解Python语法或基础反向传播。
1.4 整体学习路径:理论-工具-实战三线并行
本课程的学习路径设计遵循“三线并行”的原则:理论线(理解为什么)、工具线(掌握怎么做)、实战线(解决真实问题)。三条线在每一章中交织推进,避免出现“理论听懂了但不会写代码”或“代码跑通了但不懂原理”的脱节现象。
具体的学习路径分为四个阶段:
- 阶段一(第1-6章):量化入门与PTQ实战。从最基础的量化概念入手,理解FP32到INT8的映射关系,掌握PyTorch中
torch.quantization工具包的使用。完成第一个实战任务:将ResNet-18量化到INT8,在ImageNet验证集上对比精度变化。 - 阶段二(第7-16章):结构压缩与蒸馏。在量化基础上引入剪枝和蒸馏技术。这一阶段需要你动手实现通道剪枝算法,并利用知识蒸馏恢复压缩后的精度损失。建议每周完成一个实验对比,记录不同压缩组合(量化+剪枝+蒸馏)的效果。
- 阶段三(第17-26章):推理引擎与硬件加速。将训练好的压缩模型转换为ONNX格式,再分别部署到TensorRT(NVIDIA GPU)和OpenVINO(Intel CPU)上。重点学习INT8校准(Calibration)的两种方法——最小化KL散度和最小化MSE,并理解不同硬件对量化算子的支持差异。
- 阶段四(第27-30章):端侧部署与综合项目。以YOLOv8目标检测模型为最终项目,完成从PyTorch训练到Android端NCNN部署的全流程。项目要求:模型体积≤10MB,在骁龙8 Gen2上推理延迟≤30ms,mAP@0.5损失≤2%。
学习建议:每章学习后,建议用“三个问题”进行复盘——①本章解决了什么工程问题?②如果不用本章技术,替代方案是什么?③本章技术在不同硬件上的适用边界是什么?带着这三个问题进入下一章,你会发现自己对模型压缩的理解会从“会操作”上升到“会设计”。
1.5 常见误区与学习心态建设
根据过往教学经验,初学者在模型压缩与部署学习中容易陷入以下几个误区,需要特别警惕:
- 误区一:追求极致的压缩率而忽视精度。例如将模型从FP32直接量化到INT4,虽然体积减少了75%,但精度可能下降超过5%。正确的做法是建立“精度-体积-速度”三角评估体系,根据业务需求确定最优压缩点。
- 误区二:只关注训练端而忽视推理端。很多同学在PyTorch中完成了量化模拟,但部署到TensorRT时发现算子不支持或性能反而变差。这是因为训练框架的量化模拟与推理引擎的实际实现存在差异,必须两端同时验证。
- 误区三:盲目套用开源代码而不理解参数含义。比如在QAT中,
observer的选择(MinMaxObserver vs MovingAverageMinMaxObserver)、qconfig的配置(per-tensor vs per-channel)都会显著影响结果。建议每跑通一个实验后,手动修改关键参数观察效果变化。 - 误区四:忽略硬件特性。不同硬件对量化推理的支持差异巨大——NVIDIA GPU支持INT8 Tensor Core加速,但INT4支持有限;高通Hexagon DSP对INT8有深度优化,但对INT16支持不佳。部署前必须查阅目标硬件的算子支持列表。
最后,关于学习心态,建议你保持“工程思维”而非“学术思维”。模型压缩不是一个追求理论最优解的问题,而是在给定硬件约束、时间成本、精度要求下的多目标优化问题。本课程中你会遇到大量“看起来差不多但实际效果差异很大”的配置选择,这正是工程经验的积累过程。建议准备一个实验记录本,详细记录每次实验的配置、结果、问题与解决思路,这将是你课程结束后最宝贵的财富。