一、推理优化概述
什么是推理优化
推理优化,说白了就是让训练好的模型在推理时跑得更快、更省资源。
我经常跟团队新人说:训练是造一把好刀,推理才是真正上战场。你模型再强,推理时卡成PPT,用户早跑了。
具体来说,推理优化要做三件事:
- 降低延迟 —— 用户点一下,模型要秒回
- 提升吞吐量 —— 同样的硬件,服务更多人
- 控制显存 —— 别动不动就OOM(内存溢出)
嗯,这里要注意:推理优化不是简单的「加速」,而是在精度、速度、资源三者之间找平衡。
核心观点:推理优化 = 在不显著损失模型精度的前提下,最大化推理效率。
为什么需要推理优化
你可能觉得:模型能跑就行,干嘛费劲优化?
我举个例子。之前有个项目,BERT模型在A100上推理,单条延迟200ms。看起来还行对吧?但线上QPS(每秒查询数)要求1000,一算发现需要200张卡。老板看到预算直接摇头。
后来做了量化+剪枝+算子融合,延迟降到40ms,卡数降到40张。省下的钱够团队吃一年火锅。
所以,推理优化的必要性体现在:
- 成本 —— 硬件贵啊,一张A100好几万
- 用户体验 —— 延迟超过500ms,用户流失率飙升
- 业务规模 —— 日活百万和日活千万,推理成本差一个数量级
- 端侧部署 —— 手机、IoT设备,资源极其有限
个人经验:我建议在项目初期就把推理优化纳入规划。等上线后再优化,往往要重构,成本翻倍。
推理优化的核心指标
做优化,先得知道怎么衡量。我习惯看三个核心指标:
| 指标 | 定义 | 典型目标 | 我的踩坑记录 |
|---|---|---|---|
| 延迟 | 单个请求从输入到输出的时间 | P99 < 200ms | 曾经只看平均延迟,结果P99飙到2s,用户投诉炸了 |
| 吞吐量 | 单位时间处理的请求数 | QPS > 1000 | 吞吐量上去了,但显存爆了,OOM频繁 |
| 显存 | 模型推理占用的GPU显存 | < 80% 显存上限 | 量化后显存降了4倍,但精度掉了2个点,被老板骂 |
三个指标的关系
你想想看,这三个指标其实是互相拉扯的:
- 想降低延迟?可以加大batch size,但显存占用会涨
- 想提升吞吐量?可以开动态batch,但延迟可能波动
- 想省显存?可以量化,但精度可能下降
为什么会这样?因为推理优化本质上是在做「资源调度」——计算资源、存储资源、带宽资源,就那么多,怎么分都不完美。
避坑指南:我曾经在一个项目中,为了追求极致延迟,把batch size设为1。结果吞吐量惨不忍睹,线上服务被打爆。后来改成动态batch,延迟只涨了10%,吞吐量翻了5倍。记住:别只看单一指标。
推理优化的知识体系
下面这张图是我自己整理的推理优化知识框架,你可以对照着看:
我的优化原则
做了这么多年推理优化,我总结了几条原则:
- 先测量,再优化 —— 别凭感觉,用profiler看瓶颈在哪
- 从大头开始 —— 80%的收益来自20%的优化点
- 精度不能丢 —— 优化后一定要做精度对齐测试
- 考虑生产环境 —— 实验室的完美方案,线上可能水土不服
小技巧:我习惯在优化前先跑一次完整的profiling,把算子耗时、显存分配、数据传输都记录下来。优化后再跑一次,对比看效果。这样跟老板汇报时,数据说话,有理有据。
本章小结
推理优化不是锦上添花,而是雪中送炭。它直接决定了你的模型能不能真正落地、能不能规模化。
记住三个核心指标:延迟、吞吐量、显存。它们互相制约,优化时要全局考虑。
后面的章节,我会逐一展开每个优化技术的细节和实战经验。你准备好了吗?
一句话总结:推理优化 = 用最少的资源,在可接受的延迟内,处理最多的请求。