
真正促使我开始认真研究大模型边缘部署的是一款体量不大但思路很新的模型也就是题目里的 DeepSeek Model 1。那段时间我正在跟一批小型设备打交道内存不到 8GBCPU 不算强还要跑本地推理。按照以往经验大模型和这种设备基本是两个世界的事。但当我第一次在那台设备上看到完整模型跑起来并且吐字稳定、速度可接受的时候我才意识到“效率革命”这四个字不是论文标题而是实打实已经走到应用层的事。这篇文章不打算只聊某款模型本身的参数也不会给你一堆云端跑分的截图。我想写的是围绕“效率”这个词大模型从设计到压缩、再到边缘硬件落地的整个思考链条为什么大模型显存、内存消耗这么大为什么参数变小了速度却没有变快边缘部署到底卡在哪几个环节在模型压缩和推理引擎之间我们应该优先优化哪一头所有内容都基于我实际做过的部署实验和踩过的坑对刚接触模型部署的人应该能省下不少试错时间。1. 效率革命的核心先把“推理成本”算明白1.1 大模型的烧钱点不在训练而在每一次推理很多人一想到大模型第一反应是训练阶段烧卡、烧电、烧时间。但到了实际应用阶段真正决定你能不能长期运行起来的瓶颈往往是推理成本尤其是边缘场景下的推理成本。推理成本从哪里来最直观的来源是权重文件的体积。假设一个 70 亿参数的模型用 FP16 精度保存光权重就要大概 14GB。跑推理时还要额外准备 KV cache、激活值、临时缓冲区把这些都算上一台 24GB 显存的卡才能转得比较从容。放在云端服务器上这个资源需求也许还可以接受可一旦放到手机、开发板、嵌入式工控机上14GB 内存本身就已经是灾难了。更关键的是自回归式大模型在解码阶段有一个非常反直觉的特征它每一步生成新的 token几乎都要把全部权重读一遍而且这个操作是串行依赖的。上一轮生成的 token 会作为输入进入下一轮中间没法并行。这个特性决定了推理速度被“内存带宽”狠狠卡住。我们可以用一个很粗暴的公式来估算单机推理的每秒 token 数内存带宽除以单次需要读取的模型权重体积。假如一个量化后模型大小是 4GB而设备内存带宽只有 50GB/s那理想情况下生成速度也就是 10 到 15 token/s 左右。所以大模型效率革命的第一个目标并不是让模型更聪明而是让单次推理需要搬动的数据量更小。1.2 稀疏激活与混合专家只有一部分参数在“上班”既然权重读取量决定了推理速度那最直接的思路就已经出现了能不能在推理时不把全部参数都读取一遍这个思路在大模型领域落地成了稀疏激活和混合专家架构。传统的密集模型里无论输入是什么样几乎每个神经元都会被激活整个人工神经网络都全量参与计算。而混合专家模型把网络拆成若干“专家”模块每次计算只让一部分专家参与同时用一个很小的门控网络去决定当前输入应该分配给哪些专家。我用一个通俗的比喻来解释一家大医院有很多科室医生过去的模型是每次看病都把所有医生都叫到诊室里一起会诊效率极低。混合专家模型则是门口有个分诊台先判断患者症状再只叫对应的两三个科室进来干活。整体医院的规模仍然可以很大但一次门诊的实际参与人数少很多。在推理的时候模型总参数数量依然会影响加载和内存占用但每一步实际参与计算的参数是“激活参数”激活参数少了计算量和读写量就都少了。这也是为什么如今的效率革命会反复提到“稀疏性”。它等于从模型自身结构层面改变了“参数越多速度越慢”的宿命。我对这类模型一向持乐观态度不是因为它们总参数少而是它们把算力集中到了关键路径上。1.3 知识蒸馏把大模型的经验“压缩”到小模型除了架构层面的改造另一个绕不开的效率手段是知识蒸馏。简单说就是用一个大模型当“老师”让一个小模型去模仿它的输出和行为。这套办法早年间在视觉模型里很常见但在大模型时代有了新的玩法。过去蒸馏更多是让小模型模仿老师的“答案”比如老师给出一段文本小模型学这段文本。现在则会让老师模型同时给出很多候选答案的概率分布小模型要学的不是标准答案而是大模型对答案的“犹豫程度”和“选择倾向”。这种信息比单一答案丰富得多。不过我必须提醒一点蒸馏不是万能的。小模型的学习上限在很大程度上取决于训练数据质量。如果训练数据本身杂乱蒸馏出来的小模型可能在流畅度上接近老师但事实性错误和幻觉问题反而会继承甚至放大。边缘部署要用的模型不是越傻越稳而是在能力被压缩之后仍然保住核心任务的效果。所以模型压缩的第一优先级永远是业务需求本身。2. 边缘部署的三道坎内存、带宽、功耗2.1 先看内存再看速度最后谈效果我在很多次分享里都说过一句话边缘部署的第一道坎不是算力而是内存。现代边缘设备通常分成几类手机、平板这类消费终端内存 6GB 到 16GB 不等树莓派、开发板、工控机这类半嵌入式设备内存从 1GB 到 16GB 都有还有更低端的 MCU 级设备内存通常只有几百 KB 到几 MB。MCU 那类设备暂时别指望直接跑完整的大模型本文讨论的“边缘”主要是前两类。我们可以用一张表来感受一下不同硬件的容量边界设备类型典型内存能承载的量化模型规模实际可用性中低端手机6~8GB4~7B 参数的 INT4 量化模型可运行但需要严格控制上下文长度旗舰手机12~16GB7~13B 参数的 INT4/INT8 模型体验较好发热仍需关注高性能开发板8~16GB7B 参数量化模型仓库级、工业级场景较合适低端开发板1~2GB1B 参数以下小模型可用但效果非常有限这里说的“模型规模”只是权重体积还没算 KV cache。很多人第一次部署时只盯着模型文件大小结果跑起来发现内存爆了就是因为忽略了推理过程中动态分配的那部分内存。2.2 内存带宽决定推理速度而不是算力内存容量决定“装得下装不下”内存带宽决定“跑得快不快”。这两个概念经常被混为一谈但边缘硬件上它们往往是不同的短板。举个实际例子某开发板标称算力 4TOPS听起来做点神经网络推理足够了但它的内存带宽只有 25GB/s 左右。如果跑一个 4GB 的量化模型按刚才那个粗略公式算生成速度大概就是每秒 6 到 7 个 token。这个速度做简单问答勉强能用但对话稍微长一点就会让人着急。反观一些高端手机内存带宽能到 50GB/s 以上同样 4GB 模型跑起来能到 15 token/s。差距就在带宽哪怕算力单位看起来很接近。这个道理反过来也成立你花大力气把模型从 7B 压到 3B如果设备内存带宽没有提升速度提升只是线性跟着模型体积走并不会像想象中那样翻倍。所以我通常会先看设备的数据手册里有没有标明“内存带宽”再决定用多大的模型和什么量化等级。2.3 功耗与发热边缘设备最后一块硬骨头内存和速度之外最容易被忽略的是功耗。大语言模型的推理不像物体检测那样瞬间完成它可能连续工作几十秒甚至几分钟持续的高负载会把设备温度推向临界点。我在某次部署过程中测过一台开发板连续跑 200 个 token 以后CPU 温度从 45 度升到 85 度为了不损坏硬件系统自动降频结果生成速度直接腰斩。这就形成了一个恶性循环越热越慢越慢越显得卡顿用户就越觉得模型难用。针对这个问题我后来养成了几个习惯部署前先做长时间压力测试只测 1 分钟不能算数主动给模型设置温度阈值和降频策略在允许的条件下加装小型散热片。工业场景里功耗预算甚至比性能预算更严苛边缘部署的选型要从一开始就把“持续运行一小时”作为评估基线。3. 模型压缩全流程实操蒸馏、剪枝、量化、算子优化3.1 我的压缩顺序能蒸馏就先蒸馏接着剪枝最后量化虽然市面上有各种各样的模型压缩工具但大部分团队在实际工程中遵循一套比较成熟的顺序先做知识蒸馏再做结构化剪枝最后做量化。这个顺序不能乱换。知识蒸馏解决“模型变小之后能力下降太多”的问题。剪枝解决“模型里有大量冗余结构”的问题。量化解决“权重占用的内存和带宽过高”的问题。如果先量化再蒸馏量化过程中损失的信息会被小模型错误地“学习”过去后期很难弥补。如果先剪枝再蒸馏噪声太多小模型会学得一头雾水。我知道很多人可能没有重新训练小模型的资源和数据那一步蒸馏和剪枝只能跳过直接用现成的小模型。这种情况下量化就成了唯一的救命稻草。量化本身的收益有大的反应权重体积减小之后内存占用降低内存带宽压力减少推理速度也跟着上升。而且量化到 INT8 时很多现代 CPU 有相应的指令集加速比单纯体积减半带来的收益还要明显。3.2 INT8 与 INT4 的取舍效果不只是“掉一点”量化等级直接决定了模型能缩到多小。拿一个 7B 参数的模型举例精度权重体积相对 FP16推理速度变化效果风险FP16约 14GB基准基准效果最稳INT8约 7GB减半明显提升通常每小概率INT4约 3.5~4GB约四分之一进一步提升效果下降开始可感知这里有一点必须说透量化不只要看“体积变小了多少”还要看“模型效果保住了多少”。 INT8 量化通常比较安全因为它的动态范围足够覆盖权重分布的大部分信息INT4 量化则要小心。模型的上的权重分布如果不均匀某些层对量化异常敏感直接一刀切 INT4可能会出现回答质量骤降、逻辑崩坏的情况。我见过一个比较可靠的工程方案先做逐层敏感性分析就是逐层单独量化并观察输出质量变化找到敏感层后保留为 INT8 或更高精度其余层才压到 INT4。这种“混合精度量化”在实际部署中很常用。做量化时还有一个关键步骤是准备校准数据集。校准集不用太大几百到一千条但要尽量贴近真实业务场景。你让模型做法律问答就拿法律文本去校准拿一堆通用对话去校准量化的损失就可能集中在你没覆盖到的那部分任务上。3.3 量化之后还不快试试算子级优化做完量化之后很多人会遇到一个奇怪的现象模型文件已经小了很多内存也够用但推理速度提升非常有限。甚至是模型小了速度还是慢。这通常意味着你跑模型用的引擎没有针对算子做优化。大模型里有大量矩阵乘法、注意力计算、归一化操作。每种操作在不同硬件上都有不同的最优实现。比如有的 CPU 支持 VNNI 指令专门加速 INT8 计算有的移动芯片有专门针对矩阵运算的单元但如果你用的推理框架没有适配算子就只会落到性能低得多的基线实现上。这就好比给了一条高速公路却让车走辅路油烧了不少车还是快不起来。我在边缘部署时一般会做一件看起来很笨的事用性能分析工具把模型里每个算子的耗时拉出来排个序。你总是会发现排在前面的往往就那三四个算子把这几个算子换成优化过的融合实现整体推理速度立刻上一个台阶。大模型的效率革命从来都不是某一层的革命而是从模型结构到推理内核的整体重组。4. 推理引擎的选型别在确认速度和瓶颈之前“站队”4.1 为什么原生运行时应是默认选项前面讲的所有压缩最终要落到一个具体推理程序里去跑。过去大家喜欢在云端用 Python 框架推理因为写起来顺手迭代快。但边缘部署的设备资源太紧张Python 解释器和各类运行时本身就要吃掉大量内存而且动态类型的调度开销在自回归生成场景里会被数百次循环放大。所以我现在做边缘项目基本默认优先选择原生语言实现的推理运行时。这类引擎直接用 C 或 C 写核心逻辑内存管理精细能直接把权重映射到文件不需要把整个模型预先加载到内存里对低内存设备非常友好。更重要的是原生引擎可以非常容易地屏蔽各类操作系统的细节部署时打一个包就能跑不需要维护复杂的 Python 环境。当然原生运行时的问题也很明显生态相对碎片化不同引擎的命令行参数、量化格式可能不通用。所以在动手之前先确定好目标硬件和操作系统选型就不会太纠结。4.2 常见推理引擎的定位和取舍我把几个常接触的引擎放在一个表格里引擎类型典型场景优势需要注意的点通用 ONNX Runtime需要跨平台、多框架转换的模型支持模型格式多、硬件加速插件丰富定制操作有时麻烦批量文件略重LLM 专有原生引擎类“llama.cpp”风格的通用 CPU/GPU 软件内存利用率高量化格式统一部署极简单与特定模型架构绑定较深适配新架构有延迟移动端框架手机、平板、嵌入式 NPU能利用专用加速单元功耗低只支持定义的算子集合复杂模型迁移困难我不提具体商业产品名称是因为选型的核心原则不是哪个出名用哪个而是看两个维度模型转换方不方便目标硬件上算子齐不齐。之前有个项目为了在开发板上跑同一款模型前前后后折腾了两个星期就是因为大家一开始都默认用通用移动框架结果模型里一个稀疏算子不被支持整个推理就崩了。换了原生专用引擎以后一个晚上就把主流程跑通了。4.3 CPU、GPU 与 NPU 的异构计算陷阱边缘设备里的计算单元越来越多CPU、GPU、NPU 各有分工。一个看似基础的判断是“能上 NPU 就上 NPU”但在大模型场景里不一定成立。NPU 加速大模型的优势主要在算力密度也就是单位功耗下能算更多的操作。但它有一个明显短板内存容量通常很小而且和主内存之间需要处理器调度的拷贝。大模型权重本来就大如果模型放不进 NPU 自带的内存就必须反复搬运搬运本身比推理还慢。CPU 虽然没有 NPU 那么强的峰值算力但它可以直接用大容量内存权重就放在那里不用搬来搬去实际体验反而稳定。所以我对异构加速的实测体会是2GB 以内的模型可以考虑交给 NPU 或 GPU4GB 以上的模型先把 CPU 上的原生优化做好不要一上来就搞异构分配那样只会让 CPU、GPU 两边各存一份权重内存浪费不说调试成本还高。边缘部署追求的是确定性和可持续性而不是峰值性能。5. 离线部署完整复盘一个模拟项目的实操记录5.1 项目背景与选型始末为了让前面的方法论落到地上我拿一个近期做的模拟项目来复盘整个过程。背景是一台面向老旧小区的智能门禁一体机内置一块 8GB 内存、算力中等的国产语音处理板需要在离线环境下提供简单的语音问答和来访留言整理功能。云端大模型无法进入这种场景因为断网、隐私和数据出境合规问题都绕不过去。项目开始时方案里写的是“使用 7B 规模通用模型”理由是精度高、能力全面。结果一算FP16 权重 14GB直接超过内存容量方案第一轮就被否掉了。后来我又试了一个 3B 左右的小模型但它的常识问答能力偏弱用户如果问点稍微复杂的问题就答得牛头不对马嘴。最终拍板的是 7B 模型加 INT4 量化权重压到 4GB 左右留下约 3GB 给系统、KV cache 和运行缓冲。这个方案在纸面上可行实际跑起来却碰到了很多没预料到的麻烦。5.2 最隐蔽的坑KV cache 才是内存杀手第一轮跑的时候模型成功加载了前几个 token 出得也很快。但刚聊到第二轮程序就报内存分配失败。排查半天发现问题不在模型权重而在 KV cache。大模型在生成过程中每处理一个 token都要把历史 token 的键值缓存下来以便计算注意力。这个缓存的体积会随上下文长度线性增长。通俗理解就是模型一边说话一边记笔记记下来的笔记必须随时摊开在桌面上不能放进抽屉。对于 7B 模型如果上下文长度为 2048KV cache 可能就要占用 1GB 以上如果把上下文拉到 4096那就要奔着 2GB 或更多去了。我一开始没算这笔账导致总内存超限。最终的处理是把上下文长度限制在 2048并且实现了一套“对话轮次改进”的策略超过历史长度就主动丢弃最旧的对话记录。这不算最优解但对门禁这种短问答场景完全够用。如果你也遇到类似问题可以先算一笔账KV cache 大小约等于层数、注意力头数、每一层的维度、 token 数的乘积再乘上每个缓存元素占用的字节数。算完之后再决定上下文长度远比事后盲目调参有效。5.3 跑通之后的三项性能调优模型在设备上能稳定跑起来以后我又做了三轮调优这些经验我觉得比翻文档更值钱。第一把预热机制加进启动流程。第一次推理时模型要完成各种初始化速度会特别慢。我在设备启动后先静默喂一条简单输入让模型生成几个 token把缓存、内存分配都准备好。之后真正对话时首 token 耗时从几秒降到接近一秒。第二关闭多余的后台服务。设备本身还有不少其他进程它们会参与内存带宽的竞争。我把非必要的服务全部禁用再用性能剖析工具确认内存带宽利用率那个阶段生成的每秒 token 数提升非常明显有接近 20%。第三不要贪婪地追求最大 batch。边缘场景基本都是单用户交互说直白点你只需要一次生成一个 token。把批处理大小设为 1配合流式输出用户反而觉得响应更快。堆大 batch 在这种场景没有意义只会在内存和功耗上徒增压力。6. 最后想提醒的几个“反常识”细节6.1 别把云端指标直接搬过来当标准很多团队做边缘部署时习惯把云端模型的预期指标直接搬到本地上比如“首 token 响应必须低于 300 毫秒”“生成速度必须达到每秒 30 token”。这种比较没有意义。边缘设备本身的定位就是有限资源下的平衡判断部署成功与否的标准应当是业务场景里用户是否愿意接受这样的交互节奏。门禁系统多等两秒没问题客服机器人可能多等一秒就流失用户。指标要按场景来定不要按云端标准来定。6.2 模型压缩的收益要在“整机”上验证模型从 7B 压到 4GB你会很开心但在整机跑起来之前先别急着庆祝。整连锁的反应是内存占用、内存带宽竞争、发热降频、外壳设计是否允许散热。这些因素和模型本身的体积一样重要。我见过不少项目在开发板上测试数据很漂亮一旦装进产品外壳因为散热不行性能直接掉了一半。边缘部署的最终载体永远是整机不是开发板。6.3 什么时候应该放弃边缘部署最后说点可能被很多人忽视的边缘部署并不永远是正确答案。如果你的业务必须有很强的生成内容、需要海量事实性知识或者要支持极长的多轮对话那即使通过压缩和优化把它塞进边缘设备用户也不会觉得好用。这时候最合理的架构是“云边协同”轻量模型在本地做意图识别和格式化复杂生成放到远程服务两边分工。我个人在实际操作中的体会是大模型的效率革命并不是要把所有模型塞进所有设备而是给部署方式多留一条路。DeepSeek Model 1 这类模型带给我的真正启发是当模型不再是必须依赖数据中心的庞然大物很多以往想都不敢想的场景就开始变得可做、可试、可落地。有了这条路边缘部署的新可能就永远不止一种。