过去半年我一直在折腾一件事:在内网的国产化边缘算力终端上,把7B到30B量级的LLM/VLM推理跑顺。起因是一个客户的数据不能出园区,预算只够买几台边缘盒子,又非要跑私有化大模型做知识库问答和智能体。一开始我也以为这活儿很简单——找一台算力高点的国产盒子,装个推理框架,把模型塞进去就完事。结果从显存估算、量化选型到多卡互联,每一步都有坑,最离谱的是有些盒子标称几十TOPS,实测跑7B模型的速度连手机都不如。
这篇内容不是论文,也不是厂商彩页。我把这一段时间做过的选型对比、实测数据和踩坑记录整理出来,核心围绕三件事:不同量级的模型在国产化边缘终端上到底能跑多快、显存究竟要多少、怎么从业务需求反推硬件配置。适合正在做私有化部署、边缘AI落地的工程师和项目负责人参考。当然,涉及具体设备和固件的性能因批次差异很大,我给的是我在真实项目里反复验证过的典型区间。
1. 国产化边缘终端到底能跑到哪一步:7B-30B的算力天花板
1.1 一张表看懂不同量级模型的端侧表现区间
决定边缘终端能否承载某个模型,不需要看一堆复杂benchmark,先看两个硬指标:端到端生成速度(token/s)和首token延迟。我把近半年接触到的几类设备数据整理成了一个粗粒度表格,适用于带NPU/GPU的国产边缘终端(比如带昇腾、寒武纪、算能芯片的盒子,或者飞腾/兆芯CPU配NPU卡的一体机),也包括部分异构算力设备。
| 模型量级 | 典型量化 | 单卡实测速度 | 双卡实测速度 | 适合场景 |
|---|---|---|---|---|
| 7B | INT4 | 15-30 token/s | 25-45 token/s | 轻量问答、RAG、意图识别 |
| 13B | INT4 | 6-15 token/s | 12-20 token/s | 工具调用、复杂指令、代码补全 |
| 30B | INT4 | 2-5 token/s | 8-15 token/s | 长文档摘要、复杂Agent、高理解力场景 |
| 30B | INT8 | 1-3 token/s | 5-10 token/s | 离线批量处理 |
这里的数据是"能稳定跑满"的持续性能,不是厂商宣传的峰值。很多设备一开始跑得飞快,两分钟后触发功耗墙或温度墙,速度直接腰斩,后面我会专门讲这个坑。直观结论是:7B-13B是边缘终端真正可用的甜点区间,30B属于"能跑但要忍受等待"的范畴,必须在模型能力和延迟之间做取舍。
1.2 为什么厂商标的TOPS很高,实际token/s却上不去
这是选型时最容易踩的第一个认知误区。国产边缘终端都喜欢标INT8/INT4峰值算力,数字看着很吓人,动辄几十甚至上百TOPS,但LLM推理的真实吞吐并不完全由算力决定。
LLM解码过程是典型的memory-bound任务。生成每个token时,模型要从显存里把全部权重读一遍,权重读取速度往往远小于计算速度。用一个生活化类比:算力是后厨炒菜的速度,显存带宽是传菜员端盘子的速度,LLM推理的瓶颈通常是传菜员端不过来,而不是厨师炒不过来。所以你会发现,同样是7B模型,显存带宽高一点的设备,哪怕TOPS低一半,生成速度反而更快。
还有一个隐性瓶颈是prefill阶段。用户输入的一段长文本要在一次前向中并行处理,这个阶段是compute-bound,对算力的需求骤然上升。表现为首token延迟很高:7B模型生成一个token只要30ms,但用户发来一段800字的问题,盒子可能要卡2-5秒才开始返回。这也是为什么选型不能只盯生成速度,还要实测长prompt下的首token延迟。
另外一个现实问题是算子生态。GQA(分组查询注意力)、FlashAttention、RoPE这些优化在NVIDIA生态里已经非常成熟,但在部分国产芯片的SDK里适配滞后或者效果打折。我遇到过同一台设备,官方适配的模型能跑出不错的速度,换成我从HuggingFace直接导出的量化模型,速度直接掉一半,有时甚至编译失败。因此判断一个边缘终端能不能用,不能只看芯片规格,要看它配套的推理框架支持哪些模型、哪些量化格式、哪些新算子。
2. 显存占用算清楚:30B模型不是30GB显存那么简单
2.1 显存构成的四个大头
很多人选边缘终端只看"模型多大",比如听到30B就以为需要30GB显存,这个理解差了十万八千里。模型部署后的显存占用由四部分组成:
第一是权重,参数总量乘以每个参数占用的字节数。7B模型FP16约14GB,INT4量化后约3.5-4GB;13B的INT4约7-8GB;30B的INT4约16-18GB。这是最大的一块,但也只是起点。
第二是KV Cache,随着上下文长度线性增长。每生成一个token,模型都要缓存当前所有层的Key和Value,后续token计算时复用。一个经验公式是:每个token的KV占用约等于2 × 层数 × 每层KV头数 × 头维度 × 字节数。具体参数要看模型config,但你可以用更粗的估算:7B模型在8K上下文下KV Cache大约0.5-1.5GB,13B约1.5-3GB,30B约4-8GB。一份8K的对话历史,KV Cache就有这么多。
第三是激活值,也就是前向计算中中间层的临时输出。边缘终端通常batch=1,激活值占比不大,但在长序列或多batch并发时膨胀得很快,不能完全忽略。
第四是运行时缓冲,包括算子临时缓冲区、上下文context、框架自身占用等,一般要预留2-4GB。这部分最容易被低估,尤其是一些国产SDK的运行时比较臃肿,启动后什么都不干就吃掉1GB多。
所以一块16GB显存的设备跑7B INT4很舒服,跑13B INT4就比较勉强;跑30B INT4,20GB以下的显存基本不用考虑,勉强塞进去也会因为KV Cache扩展而迅速OOM。
2.2 量化位宽和上下文长度如何叠加影响最终显存
选量化位宽时,很多人只盯着权重省了多少,忽略了量化对KV Cache和激活值精度的影响。如果你的推理框架支持KV Cache也做INT8/INT4量化,长上下文场景能省下很多显存;如果框架只量化权重、KV Cache仍然保持FP16,那么4K上下文和8K上下文的显存差距会被明显放大。
我习惯在部署前做一张清单,按最终负担来估算:
| 模型 | 权重格式 | 权重占用 | KV Cache(4K) | KV Cache(8K) | 运行缓冲 | 推荐显存 |
|---|---|---|---|---|---|---|
| Qwen2.5-7B | INT4 | ~4GB | ~0.5GB | ~1GB | 2GB | 8-12GB |
| Qwen2.5-14B | INT4 | ~8GB | ~1.5GB | ~3GB | 3GB | 16-24GB |
| 30B量级 | INT4 | ~17GB | ~4GB | ~8GB | 4GB | 32-48GB |
| 30B量级 | INT8 | ~31GB | 同上 | 同上 | 4GB | 48-64GB |
这张表很现实地说明了为什么边缘终端跑30B这么难:即使做了INT4量化,只要你想保留一定的上下文窗口,显存需求就会冲到32GB以上。而市面上边缘终端的显存配置通常集中在8GB、16GB、32GB三档,32GB以上的设备价格和算力往往不成正比。所以我的建议是:边缘终端的主力阵容锁定7B-13B,30B除非是高端双卡设备,否则不要轻易挑战。
3. 7B-13B实测体验:问答、RAG与工具调用场景下的真实硬指标
3.1 7B量化模型的端侧可用度
我在一台32TOPS级别的国产边缘盒子上跑过7B INT4量化的Qwen2.5系列,数据是验收阶段反复测出来的:单卡流式输出稳定在18-24 token/s,首token延迟在prompt较短时约300-600ms,prompt超过1000字时首token延迟拉到3秒左右。这个速度什么概念呢?做流式问答完全够用,文字像正常打字速度一样往外蹦,用户不会觉得卡;但如果是代码生成或长文本续写,预期的等待感会明显增强,毕竟代码单行输出通常超过20个token,相当于每写一行都要等1秒。
真实部署中还要注意解码参数的影响。采样温度、top_p、repetition_penalty这些参数不只是影响质量,也会影响速度。我实测发现repetition_penalty开得过高时,部分国产推理框架会多出额外的后处理步骤,整体速度下降5%-10%。在边缘算力有限的情况下,建议把重复惩罚控制在1.0-1.05之间,不要照搬NVIDIA服务器上的那套激进参数。
另外一个经常被忽略的指标是"并发能力"。单用户对话时7B速度不错,但如果是三个用户同时提问,单卡边缘终端的显存和算力会被分摊,每个人拿到的速度会掉到原来的1/3左右,而且频繁抢占会导致部分请求排队,延迟波动很厉害。如果业务要求多人并发,答案很简单:要么上一台更高端的设备,要么做多节点负载均衡,不要指望一块板卡扛下所有。
3.2 工具调用、智能体与VLM场景下的性能真相
最近大家热衷于把模型做成智能体,让LLM自主决定调用什么工具、以什么参数调用。这个场景在边缘终端上有两重压力。
第一重压力来自于格式约束。工具调用通常要求模型输出严格遵循JSON Schema,常见的做法是在采样阶段做约束解码。NVIDIA生态的vLLM、LMDeploy等框架原生支持guided decoding,直接在解码时屏蔽不合法的token;但部分国产边缘设备只适配到llama.cpp或Ollama这个层面,这俩工具对约束解码的支持比较弱,更多是靠系统提示词把模型"哄"到正确格式上。我做过对比:同一台设备上,用支持约束解码的框架跑工具调用,一小时内的格式失败率能控制在2%以内;用纯提示词方案,失败率有时会到10%以上,而且模型越小人越容易顶不住复杂指令。
第二重压力来自于上下文累积。智能体一轮问答往往要经历"用户问题—模型思考—调用工具—返回结果—模型总结"这么个链路,多轮跑下来之后,前面的工具结果和对话历史全部塞进KV Cache。我做RAG+Agent测试时,经常跑到第8-10轮就OOM。解决办法很粗暴但有效:设置历史轮数上限,超了就把最早的历史摘要后截断;或者干脆用短期记忆机制,每隔几轮把关键信息压缩成固定长度的摘要。
至于VLM,视觉模型的显存和延迟压力比同尺寸纯文本模型更大。一张图被视觉编码器切成几百个visual token,这些token会全部进入LLM的prefill阶段,首token延迟比纯文本输入高一个数量级。7B的VLM实际负载通常比同尺寸文本模型多占1.5-2GB显存,算上视觉token的KV Cache,16GB设备跑起来会非常紧张。我的建议是:如果业务确实需要VLM,优先保证显存余量,不要为了省预算选刚好卡线的设备。
4. 20B-30B的实战边界:多卡互联、VLM额外成本与决策拐点
4.1 三条路把30B塞进边缘终端
如果业务强需求逼着你必须在边缘终端跑30B,现实中有三条路可以走。
第一条路是单卡大显存。找一块64GB甚至更大显存的板卡,一次把INT4权重和KV Cache全放进去。这条路最稳,部署简单、不用考虑跨卡通信,但在边缘终端市场里这种卡的数量少、价格高,而且单卡的算力通常不足以让30B跑得流畅。我实测的大多数单卡场景下,30B INT4的速度勉强到3-5 token/s,只适合对延迟不敏感的后台处理。
第二条路是双卡Tensor Parallel。用llama.cpp或LMDeploy的并行模式把模型按层拆分到两张卡上,推导速度能比单卡提升2-3倍。命令形式大概是这样的(以llama.cpp为例):
llama-server -m /models/Qwen2.5-30B-Instruct-Q4_K_M.gguf \ -c 8192 \ --n-gpu-layers 99 \ --split-mode layer \ --main-gpu 0 \ --tensor-split 1,1 \ --host 0.0.0.0 --port 8080要注意,Tensor Parallel不是说加一张卡就线性翻倍。每生成一个token,各卡之间都要同步梯度级的数据,通信延迟是硬开销。两张PCIe卡互联时,速度提升通常只有1.5-2.5倍,达不到2倍,更别提3倍。如果两张卡的互联带宽只有PCIe 3.0 x8甚至更低,并行通信开销可能占掉整体时间的30%以上,这时加卡的意义就大打折扣。
第三条路是CPU+NPU异构/内存复用。把权重驻留在系统大内存里,推理时按层搬到计算单元,或者干脆用高主频CPU跑纯CPU推理。这条路在边缘终端上一般不推荐作为主力方案,因为CPU推理30B INT4的速度常年在1-3 token/s徘徊,比等待还痛苦。它真正的价值在于验证阶段:如果你手头只有一台大内存的测试机,可以先用CPU把30B的模型能力和业务效果验证清楚,再决定要不要采购高端边缘终端。
4.2 双卡互联的算力收益与通信损耗
我踩过最深的一个坑,就是以为两张卡一定能跑出1+1>1.5的效果。实际项目中,某国产盒子配备两张通过PCIe互联的算力卡,跑30B INT4时单卡速度约4 token/s,双卡并行理论上限是8 token/s,实测只有6.5 token/s。损失主要出在每步的权重同步上,30B模型每层权重量很大,每生成一个token都要把中间结果跨卡传一遍。
优化手段是有的。一是尽量让两个卡通过同一PCIe控制器下的高带宽通道互联,避免跨CPU的PCIe拓扑;二是加载模型时把整层权重分片,不要让一张卡持有多份冗余;三是把KV Cache也跟着分片,让每张卡的显存压力更均匀。这几条做下来,双卡的效率能从1.5倍拉到接近1.9倍,但也就到此为止了,拓扑结构决定了上限。
所以20B-30B在边缘终端的决策拐点,其实取决于你愿不愿意接受"7B的流畅度换来30B的理解力"。我在多个业务场景里做过主观测试:当30B只有3-5 token/s,而7B能跑出20+ token/s时,绝大多数非技术用户反而觉得7B更好用,因为响应快、交互感强;只有当任务本身就是长文档分析、复杂规则推理、工具调用可靠性这些硬核场景,30B的能力优势才能覆盖延迟带来的体验损失。这里的建议很明确:先跑通7B-13B验证业务闭环,如果算法效果确实不够,再上双卡30B;一上来就追求最大的模型,大概率会得到一个"能跑但没法用"的系统。
5. 选型决策表与防坑清单:从需求反推边缘终端配置
5.1 四个典型业务场景的选型速查
很多团队采购时从硬件出发,先买设备再想跑什么,这是本末倒置。正确逻辑是从业务场景反推模型量级,再反推显存和算力需求。我整理了一个速查表,基本覆盖边缘侧最常见的四类需求:
| 场景 | 推荐模型量级 | 显存底线 | 算力参考(持续性能) | 关键选型指标 |
|---|---|---|---|---|
| 内网知识库RAG问答 | 7B INT4 | 8GB,建议16GB | 8K上下文稳定20 token/s | 框架对RAG长上下文的KV Cache优化 |
| 工具调用/智能体 | 13B INT4 | 16GB,建议24GB | 支持约束解码的框架生态成熟 | 多轮上下文稳定性、工具格式成功率 |
| 长文档分析/VLM | 13B-30B | 24GB起,建议双卡 | 视觉编码器额外显存预留 | 首token延迟、视觉token的内存开销 |
| 高并发线上服务 | 7B-13B多节点 | 每节点16GB | 每卡并发会话数≥4 | 负载均衡、显存预分配策略 |
RAG场景里,大部分团队的问题是没做好chunk分块。把单次上下文控制在4K-8K以内,7B模型可以在16GB设备上跑得游刃有余。如果文档很长就做检索分段,不要一次性把全文塞进上下文,否则KV Cache翻倍、首token延迟爆炸,最后谁都跑不快。
工具调用场景,多花点时间考察框架的约束解码能力,比单纯加大显存更值。我在实际项目中对比过,支持guided decoding的框架下13B模型的工具调用成功率,已经能逼近30B模型在提示词方案下的表现。也就是说,在边缘端你完全可以用更小的模型获得接近更大模型的Agent能力,前提是框架生态选对了。
VLM场景则要单独算账,因为视觉编码器的显存开销和视觉token对prefill的冲击,不能简单套用同尺寸文本模型的经验。我建议至少留出20%-30%的显存余量,同时把图像预处理尺寸控制在模型推荐范围,不要随意放大分辨率,否则每张图多出来的视觉token会让首token延迟翻倍。
5.2 我在真实项目里踩过的坑与规避方法
最后分享几个反复踩过、价值很高的坑,希望能帮你省下至少两个星期的调试时间。
第一个坑是只看峰值算力不看持续性能。某款设备标称64TOPS INT8,实际满负载跑模型三分钟后触发功耗墙,速度掉到峰值的60%左右。原因是边缘终端的散热设计跟不上芯片上限。采购前一定要问清楚"持续性能"而不是峰值,最好让厂商提供实际跑7B/13B模型一小时的速度曲线。我后来每一次选型都把"持续性能测试"写进验收标准。
第二个坑是框架算子适配不全。部分国产NPU的SDK对llama.cpp的适配停留在特定版本,新模型的GQA、RoPE、FlashAttention优化没跟上,同一个模型在软件更新前后的速度差能到一倍以上。规避方法是:先确认该设备官方支持列表里有没有你想要的模型架构,然后锁死框架版本,不要在项目中途随意升级。
第三个坑是上下文长度带来的显存雪崩。我见过有人把8G显存的设备硬跑7B模型,小窗口测试一切正常,一上生产环境就OOM。原因很简单,8G设备在模型权重之外只剩不到4GB给KV Cache,用户多聊几轮就爆。规避方法是在部署前按峰值上下文长度和最大并发数做压力测试,不能只跑一个几百字的demo就上线。
第四个坑是VLM的隐性开销。视觉模型除了权重比同尺寸文本模型大之外,图像转成的视觉token会长期占据KV Cache。一张图几百个token,十张图就是几千个token,显存消耗远超预期。规避方法是在应用层限制单次对话的图片数量,并主动清理历史视觉token。
第五个坑是多卡互联带宽不足导致并行效率低。这不是靠软件能解决的,硬件拓扑决定了上限。采购多卡设备时,务必确认卡间互联走的是高带宽专用通道还是PCIe,如果只是PCIe 3.0 x8,那双卡跑大模型的意义真的不大。我后来在采购清单里加了一条:必须在现场实测双卡并行跑30B的吞吐,达不到预期可退货。
第六个坑是跨框架数值偏差。同样一个模型,在NVIDIA卡上跑FP16和国产卡上跑FP16,个别层的结果会有细微差异。大多数任务无所谓,但像JSON输出、代码生成这种对格式敏感的任务,可能在国产卡上出现莫名其妙的丢标点或括号不闭合。我在交付前会做一轮针对性的回归测试,用固定prompt集跑三遍,确保输出格式和关键内容一致,再放心交给业务方。
这些坑看起来琐碎,但每一个都真实地耗掉过我大量时间。边缘终端不是服务器,它更像是一个精打细算的容器,任何一点资源浪费都会被放大。现在回头想想,国产化边缘算力终端跑大模型这件事,最大的门槛从来不是芯片够不够强,而是你能不能把模型量级、显存规划、框架生态和业务场景对齐。我目前的默认方案是:7B打底做轻量服务,13B做Agent和工具调用,30B只在长文档高理解力场景且预算充足时启用双卡方案。这套组合帮我在多个项目里实现了平衡,也希望这篇经验能让你少走些弯路。