AI Know · 技术研究笔记
端侧部署要权衡精度、显存和延迟
量化减少显存占用,低价换来精度损失;蒸馏减少参数量,代价是知识表达更窄;调度决定峰值显存和尾延迟能否达标
三分钟读懂
先看结论,再决定是否深读
- 端侧部署要权衡精度、显存和延迟
- 量化减少显存占用,低价换来精度损失
- 蒸馏减少参数量,代价是知识表达更窄
- 调度决定峰值显存和尾延迟能否达标
- 评测应看真实设备上的长尾表现
核心原理
把大模型放到手机、笔记本、车机和边缘盒子上,问题的性质就变了。云端推理可以靠堆 GPU、扩 batch、做弹性扩容来吸收波动;端侧只有一张固定的预算表:可用内存、可用算力、可用电量、可接受的首 token 延迟。量化、蒸馏和调度是这张表上最常被同时动用的三个杠杆,但它们并不是可以随意叠加的优化项,而是三种彼此牵制的取舍。
量化回答“用多少位表示权重和激活”,蒸馏回答“用多小的模型承载多少能力”,调度回答“在给定硬件上如何把一次请求切分、排布和回收”。三者共同决定端侧体验,任何一项单独调优都可能被另外两项抵消。
技术细节
输入侧。端侧输入的第一道约束是上下文长度与内存的乘积关系。KV Cache 随序列长度线性增长,长上下文在端侧往往比权重更早触发 OOM。工程上常见做法是限制最大上下文、对历史做摘要压缩、把系统提示词做成可复用的前缀缓存。分词器也值得注意:多语言或代码场景下 token 效率差异会直接放大序列长度,同等字数下 token 数可能相差三成以上。输入侧还应做长度预检和截断策略,避免超长请求进入推理队列后才发现放不下。
推理/执行侧。量化分两条线:权重量化(如 4bit、8bit 分组量化)主要省显存和带宽,激活量化则进一步省算力,但对异常值敏感,往往需要保留部分高精度通道。实践中 4bit 权重量化在多数对话任务上损失可控,但数学、代码和结构化抽取任务对量化更敏感,需要单独评测。蒸馏分 logit 蒸馏与序列蒸馏:前者依赖教师模型的分布输出,迁移效率高但需要教师接口;后者只用教师生成的文本,工程简单但信息量少。端侧更现实的是“蒸馏出结构 + 量化压缩”的组合,先得到一个参数更少、层数更浅的骨架,再对其做低比特量化。调度层面要区分预填充与解码两个阶段:预填充是算力密集型,解码是访存密集型,端侧常采用分块预填充避免瞬时内存峰值,用连续批处理提升吞吐,用优先级队列保障交互请求的首 token 延迟。
输出/评测侧。端侧评测不能只看困惑度或通用榜单。应分三层:任务层看准确率与格式合规率;系统层看首 token 延迟、每 token 延迟、峰值内存、能耗与温升;体验层看长尾输入下的失败模式。特别要单独统计量化后出现退化的一类样本,例如长数字、罕见实体、多步推理和否定句。评测应在目标真机上跑,模拟器上的内存与热行为往往过于乐观。
| 手段 | 主要收益 | 主要代价 | 适用边界 |
|---|---|---|---|
| 4bit 权重量化 | 显存降约六成,带宽压力下降 | 数值与推理类任务精度损失 | 对话、摘要、分类 |
| 8bit 量化 | 精度损失小 | 显存收益有限 | 对精度敏感的抽取任务 |
| 蒸馏小模型 | 参数量与延迟同步下降 | 知识覆盖面变窄 | 垂直域、固定任务 |
| 分块预填充 | 压低瞬时内存峰值 | 首 token 延迟略增 | 内存紧张的手机端 |
| 前缀缓存 | 降低重复系统提示开销 | 占用常驻内存 | 多轮固定人设场景 |
工程实践
- 先定预算再选技术。明确目标机型的可用内存上限、首 token 延迟上限和可接受的任务准确率下限,把三项写成验收指标,再决定量化位宽与是否蒸馏,避免先做压缩再回头补评测。
- 建立分层回归集。按任务类型(对话、抽取、代码、数学)和输入长度(短、中、长尾)各留一批样本,量化或换模型后必须全量回归,重点盯住格式合规率和长尾失败率,而不是只看平均值。
- 把调度参数当一等配置。分块大小、批处理上限、KV Cache 回收策略、上下文截断阈值都应可配置并可观测,线上采集首 token 延迟与峰值内存的分位数,按机型下发不同配置,而不是一套参数打天下。
风险边界
成本。端侧省下的是推理调用费,付出的是研发与评测成本。量化与蒸馏都需要多轮回归和真机验证,机型碎片化会让适配成本随覆盖机型数量近似线性上升。若业务调用量不大,端侧方案的总体成本未必低于云端。
幻觉。小模型加低比特量化会放大幻觉概率,尤其在需要外部事实的任务上。蒸馏会让学生模型继承教师的自信错误,却缺少教师的宽度来自我纠正。端侧应默认接入检索或规则校验,对高风险字段做二次确认。
越权调用。本地模型常被赋予工具调用能力,一旦提示注入得手,可能触发文件读写、剪贴板访问或本地网络请求。必须在调度层做能力白名单与参数校验,工具调用不经过模型自由生成,而是走受约束的 schema。
长尾输入与延迟。超长输入、连续多轮、异常字符和混合语言是最容易击穿预算的场景。分块预填充会拉长首 token 延迟,连续批处理在高负载下会推高尾延迟。应设置请求准入与降级策略,例如超长请求转云端、繁忙时降低批处理上限,并对延迟分位数设置告警阈值,而不是只监控均值。