前阵子帮一个做边缘盒子产品的朋友踩坑,他信誓旦旦说要在RK3588上跑7B模型,配8GB内存就够,理由是“网上不都说量化之后7B只要4GB吗”。结果模型是塞进去了,但每秒就吐两三个字,系统日志里swap刷得飞起,机器烤得能煎鸡蛋。这事让我特别想聊一聊端侧部署大模型时最容易被低估的东西——不是算力,而是内存带宽和整机配置的匹配。很多人一上来就问“NPU多少TOPS”,但真正决定端侧AI硬件部署能不能流畅跑大模型,往往是一套组合拳:芯片算力、内存容量、内存带宽、量化精度、散热和供电。这篇文章我拿瑞迅科技RK3588、RK3576、RK3568三档方案为主线,把1B、3B、7B模型从内存占用到推理速度,从框架选型到避坑经验,一次说清楚。
1. 端侧跑大模型,真正卡脖子的不是算力而是内存带宽
1.1 一个反直觉的实测现场
先说那次实测。平台是瑞迅科技的RK3588核心板加评估底板,LPDDR5 16GB,系统Ubuntu 22.04,用Ollama跑Qwen2.5-7B-Instruct的Q4_K_M量化版。从任务管理器看,8个CPU核心负载只有一半左右,NPU基本没动,因为Ollama走的是llama.cpp的CPU后端,可系统就是快不起来。top一下发现,内存占用稳定在13GB以上,硬要往里塞更多请求就触发swap,一触发swap,token生成速度从每秒4个左右直接掉到每秒1个,这个体感基本就是“能跑但没法用”。
这里面的问题完全不在“算力够不够”,而在推理任务的访存特性。大模型生成token是一个典型的memory-bound过程——每生成一个token,推理引擎都要把模型权重从头到尾读一遍。拿7B Q4_K_M来说,权重文件约4GB,哪怕你只生成一个token,也要把这4GB从内存里过一遍。如果内存带宽只有34GB/s,那理论上限就是每秒过8.5次权重,也就是8.5 token/s;再算上读取KV Cache、中间激活值的开销和实际存取效率损耗,能跑出5到6 token/s就算优化得不错了。
1.2 为什么大模型推理是“内存饥饿型”任务
这就能解释很多怪现象:为什么CPU推理在低参数量模型上有时比NPU更稳,为什么内存频率高的板子跑模型体感更快,为什么同样一个模型在16GB和8GB内存的机器上速度天差地别——因为8GB机器在swap边缘反复横跳,系统光顾着换页了,根本没心思给你算token。
可以这么理解:把大模型比作一本巨厚的说明书,模型权重就是书页内容,推理引擎每次要“翻一遍整本书”才能回答一个问题。这时候制约速度的不是“翻书的手速”算力,而是“从书架上取书的速度”内存带宽。NPU算得再快,书取不过来也是白搭。这也是为什么端侧部署里“TOPS高不高”不等于“跑得快不快”,头一次做选型的人特别容易在这儿栽跟头。
1.3 算力、内存容量、带宽三者怎么匹配
我习惯把这三者的关系压缩成一句话:算力决定你能跑多复杂的模型,内存容量决定模型能不能装下,内存带宽决定跑起来能不能接受。
如果模型太大装不下,那就降量化精度或者换小模型;如果模型装下了但跑起来慢,多半不是算力不足,而是带宽被吃满了;如果你发现NPU占用率不高速度却上不去,八成也是在等内存。选型的时候先问清楚这三个问题,比直接比较各家的TOPS数字靠谱得多。
提示:一定要先确认“部署形态”,再谈选型。同一个RK3588,做成无风扇密闭盒子、做成长方形散热片加风扇的工控机、做成带主动散热的开发板,跑同一个7B模型的持续性能能差出30%以上,这还不算降频导致的token速度衰减。
2. RK3588、RK3576、RK3568三款方案的真实能力差异
2.1 三款SoC的硬件参数横向对比
瑞迅科技的这几块板子,核心分别是瑞芯微的RK3588、RK3576和RK3568。先上一张参数表,把差异摆清楚。
| 项目 | RK3588 | RK3576 | RK3568 |
|---|---|---|---|
| CPU | 4×Cortex-A76 + 4×Cortex-A55 | 4×Cortex-A72 + 4×Cortex-A53 | 4×Cortex-A55 |
| NPU算力 | 6 TOPS(INT8) | 6 TOPS(INT8) | 1 TOPS(INT8) |
| GPU | Mali-G610 MP4 | Mali-G52 MC3 | Mali-G52 1EE |
| 内存支持 | LPDDR4x / LPDDR5,最高32GB | LPDDR4x / LPDDR5,常见8/16GB | LPDDR4x,常见2/4/8GB |
| 内存位宽 | 64bit | 64bit | 受封装限制,带宽明显低于前两者 |
| 视频编解码 | 8K解码,8K/4K编码 | 4K解码,4K编码 | 4K解码,1080P编码 |
| 典型接口 | PCIe 3.0、双千兆网口、多路显示 | PCIe、双千兆网口 | PCIe 3.0、千兆网口 |
| 定位 | 旗舰边缘算力平台 | 中高端能效比平台 | 入门级低功耗平台 |
只看规格可能觉得RK3576和RK3588的NPU都是6 TOPS,好像差距不大,但实际跑大模型时,RK3588的优势主要在CPU大核、GPU、内存频率上限和多任务并行能力上。A76大核在跑llama.cpp这类CPU推理任务时,单核性能和缓存效率都比A72好一截;而RK3568的NPU只有1 TOPS,A55小核也撑不起复杂模型,属于“轻量级选手”。
2.2 瑞迅科技方案的常见配置形态
瑞迅的板子一般以核心板加底板的形式出货,也有整机和半成品套件。核心板的好处是内存、eMMC都在核心板上,用户按需求选好容量,底板按自己的接口需求来画,开发周期能压得很短。
我接触到的几个典型配置大概是这样的:
- RK3588核心板,内存8GB/16GB/32GB,eMMC 32GB/64GB/128GB,对应高性能网关、AI盒子、工业视觉主机;
- RK3576核心板,内存8GB/16GB,对应中端边缘计算盒子和带屏交互设备;
- RK3568核心板,内存2GB/4GB/8GB,对应低成本语音助手、DTU、轻量工业控制面板。
内存颗粒是焊在核心板上的还是走插槽,决定了现场能不能扩容。瑞迅这种核心板方案基本是贴片内存,选型时就要把未来两三年的内存需求想清楚,后期想换大内存往往意味着换核心板,成本反而不划算。
2.3 从“能不能跑”到“跑得痛不痛苦”
这三款芯片都能跑大模型,差别在于体感。RK3568硬塞一个3B模型也能出结果,但速度慢到让人怀疑人生,而且内存只有4GB的话连装都装不下;RK3576跑3B模型很舒服,但要上7B就有点吃力;RK3588跑7B能接受,但也不是所有部署方式都好用。
我一直跟朋友强调一个观点:端侧部署大模型的关键不是“能不能加载”,而是“在什么延迟、什么功耗、什么成本下跑”。如果把模型硬塞进内存就算成功,那树莓派也能跑Llama 3 8B,只是没人愿意等而已。选型选的是体验分界线,不是运行分界线。
3. 1B/3B/7B模型到底吃掉多少内存和带宽
3.1 模型大小与内存占用的基础计算公式
模型在内存里的占用,主要由三部分组成:权重、KV Cache、运行时开销。
权重部分很好算:参数量乘以每个参数的字节数。FP16是2字节,INT8是1字节,INT4量化后约0.5字节。所以1B参数模型在FP16下约2GB,3B约6GB,7B约14GB;换成INT8分别是1GB、3GB、7GB;换成INT4则大约是0.5GB、1.5GB、3.5GB。
KV Cache是Transformer推理时缓存历史token中间状态的内存,大小和层数、注意力头数、上下文长度直接相关。粗略估算时,7B模型在4K上下文下,KV Cache通常在0.5GB到1GB之间;上下文拉到8K,基本翻倍。
运行时开销包括推理框架本身、系统进程、输入输出缓冲区等,一般按总内存的10%到20%预留。把这些加起来,才是你真正需要的内存容量。
3.2 不同量化位宽下的实际内存占用估算
| 模型规模 | FP16 | INT8 | INT4(Q4_K_M近似) |
|---|---|---|---|
| 1B | 约2.1GB | 约1.1GB | 约0.7GB |
| 3B | 约6.2GB | 约3.2GB | 约2.0GB |
| 7B | 约14.5GB | 约7.5GB | 约4.3GB |
上面这些数字已经包含了常用的KV Cache和运行时余量,可以直接作为选型时的“最低内存建议”参考。但要注意,这只是单路推理的情况。如果你的应用要同时处理多路并发请求,内存占用会线性增长;还要考虑系统本身要留足缓冲,否则一旦触发swap,性能会断崖式下跌。
注意:很多厂商标称“8GB内存”,实际可用内存并没有8GB。图形显存保留、VPU/ISP专用内存、系统底层占用,七减八扣下来,8GB的板子实际能自由支配的往往只有6GB多。选型建议在这个基础上再留20%的余量。
3.3 带宽限制下的Token生成速度预估
内存带宽和token速度的关系可以简化成一句话:每秒能过几次权重,就大约等于每秒能生成几个token。我们用这个公式估算一下三档模型在一颗LPDDR4x 4266、64bit、理论带宽约34GB/s的芯片上的表现:
- 1B INT4,权重约0.6GB,理论上限约56 token/s,实际受系统和框架损耗影响,约25到35 token/s;
- 3B INT4,权重约1.7GB,理论上限约20 token/s,实际约10到15 token/s;
- 7B INT4,权重约4GB,理论上限约8.5 token/s,实际约4到6 token/s。
如果是LPDDR5平台,带宽能到51GB/s左右,对应速度还能再往上提一些。但如果你打算用FP16精度跑7B,权重一下子变成14GB,理论上限就只剩不到2.5 token/s了,这就是为什么端侧部署基本都盯着量化模型。
3.4 三档模型和芯片怎么配对
按照容量和带宽两把尺子,我给这三款瑞迅方案的建议配置组合如下:
| 模型规模 | 推荐芯片 | 推荐内存 | 典型场景 |
|---|---|---|---|
| 1B | RK3568 / RK3576 | 2GB以上,建议4GB | 离线语音助手、简单问答 |
| 3B | RK3576 | 8GB,建议16GB | 知识库盒子、文档摘要 |
| 7B | RK3588 | 16GB,建议32GB | 工业视觉加自然语言混合任务 |
这套组合的核心思路是“内存扛得住,带宽跑得起”。1B模型给RK3568就够了,没必要多花钱上3588;3B模型放RK3576上正好是甜点区;7B模型基本锁定RK3588,而且内存直接上16GB起步,32GB更从容。
4. 按场景选型:从语音助手到工业网关的配置清单
4.1 场景一:离线语音助手和轻量终端设备
如果你的产品是离线语音助手、智能家居中控面板、小型翻译机这类交互轻、延迟敏感的设备,1B模型基本能满足意图识别和简单对话。这个档位功耗和成本是第一优先,RK3568加2GB或4GB内存就够跑,整板功耗能控制在几瓦,被动散热就能压住,不需要风扇。
这类设备通常还要兼顾唤醒词检测、降噪、音频编解码,所以选型时除了关注NPU和内存,还要看音频接口、麦克风阵列支持、GPIO数量这些容易被忽略的细节。瑞迅的RK3568方案在这些点上比较成熟,底板资源丰富,适合量产。
4.2 场景二:知识库问答盒子和边缘网关
如果是文档问答、私有知识库、门店客服助手中等任务,3B模型是性价比最高的选择。这个规模能在保证回答质量的同时,把延迟控制在可接受范围。RK3576加8GB内存跑Q4量化的3B模型,实测能到10到15 token/s,单路对话体验尚可,多路并发时把内存升到16GB会更稳。
这里有个取舍要提前想清楚:3B模型在8GB内存上能跑,但可用内存已经吃掉大半,系统升级、日志增长、未来加功能都会撞内存墙。做产品不是跑通一个demo就结束,我见过太多项目死在“后期想加个功能发现内存满了”。
4.3 场景三:工业视觉加自然语言混合任务
如果你既要跑目标检测、OCR,又要上大模型做语义理解,那就别纠结了,直接RK3588加上16GB或32GB内存。7B模型加视觉模型同时驻留内存,16GB只是门槛,真要做多路视频分析加对话,32GB才不慌张。
这个场景下,内存带宽的重要性会更突出。建议优先选LPDDR5版本的RK3588核心板,带宽接近LPDDR4x的一点五倍,跑7B模型能明显感觉到token速度提升。同时要考虑PCIe接口,因为视觉任务往往需要挂载加速卡或高速存储,PCIe 3.0的扩展能力是这个档位不可或缺的。
4.4 多路并发与未来升级空间
很多产品上线后会面临并发请求,而大模型推理的并发不是“多线程同时算”那么简单。内存不是一个token按一份权重分配,而是每个并发请求都要占用一份KV Cache和推理缓冲区,权重共享但中间状态各自独立。
所以在评估并发路数时,把“单路内存占用”乘以并发数就是硬需求。8GB内存跑3B模型单路没问题,三路并发就紧张了。选型时我会建议客户把未来一年预期的并发路数打个对折再往上加一档,宁可前期多花两三百块内存钱,也不想后期重新换核心板。
5. 部署实操:模型量化、框架调优与实测跑分
5.1 端侧推理框架怎么选:Ollama、llama.cpp还是RKNN
部署时最先要决定的就是推理框架。很多新手直接用Ollama,因为它一条命令就能把模型拉下来跑,最适合快速验证。但Ollama对底层参数的控制比较少,在瑞迅板子上想榨干性能,我一般还是建议直接用llama.cpp,或者基于llama.cpp二次开发。
如果一定要用NPU,路径是瑞芯微的RKNN。RKNN需要先把模型转换并量化成.rknn格式,好处是能释放CPU,让NPU承担算力,但代价是算子支持有限,遇到不支持的算子就得改图或者裁剪,开发成本不低。对大多数文本生成类任务,llama.cpp的CPU后端反而更通用,也更省事。
我的习惯是分两步走:先在llama.cpp上跑通流程、确认性能和内存占用,再用RKNN做NPU加速,看收益是否值得。不要一上来就投入NPU移植,先解决“能不能用”再谈“跑得更快”。
5.2 模型下载与GGUF量化流程
以llama.cpp跑Qwen2.5-7B为例,完整流程是这样的:
- 从Hugging Face下载原版模型;
- 用llama.cpp的转换脚本把模型转成FP16的GGUF格式;
- 用量化工具把FP16的GGUF压成Q4_K_M;
- 用llama-cli或llama-bench加载量化后的GGUF实测。
转换命令大致是:
python convert_hf_to_gguf.py /path/to/qwen2.5-7b-instruct --outfile qwen2.5-7b-fp16.gguf ./llama-quantize qwen2.5-7b-fp16.gguf qwen2.5-7b-q4_k_m.gguf q4_k_m量化位型的选择上,Q4_K_M是社区验证过的“甜点”——质量损失小、文件大小约等于权重字节数。想要更小体积可以用Q4_0,但质量会明显下降;想要更好效果就用Q5_K_M或Q6_K,前提是内存放得下。端侧部署我不建议用FP16原图硬扛,除非你的内存大到不心疼。
5.3 启动参数调出平稳性能
llama.cpp启动时的参数对性能影响非常大,最关键的几个:
-t:线程数,建议在RK3588上填6到8,给系统留一两个线程别全占满;--mlock:锁内存,防止被swap出去,内存够的时候一定要开;-c:上下文长度,按你的实际需要设,别贪大,4096起步即可;--no-mmap:禁用mmap,有时能减少页缓存抖动,但加载时间会变长;-b:batch size,影响预填充阶段的速度,通常设512或1024。
我实测下来,同样一个7B Q4模型,不开mlock、线程数乱设的情况下token速度只有2到3;调好参数后能到5到6。差距这么大不是因为芯片变了,纯粹是软件参数没吃透。调优顺序建议是:先开mlock,再试线程数,最后调上下文长度。
5.4 性能验证与散热实测
性能验证不要靠“体感”,直接用llama-bench跑一个标准化测试:
./llama-bench -m qwen2.5-7b-q4_k_m.gguf -t 6 -p 128 -n 128记录两个指标:预填充阶段的prompt processing速度和生成阶段的token速度。后者才是对话机器人交互时真正能感知到的速度。
跑测试的同时盯一下温度。瑞迅RK3588方案一般会带散热器和风扇接口,可以用/sys/class/thermal/thermal_zone0/temp读取芯片温度,用pwm接口控制风扇转速。满载状态下如果温度长期超过75摄氏度,就要检查散热片是不是没贴紧、风扇策略是不是太保守,否则会触发降频,token速度稳定下滑,排查半天最后发现是被热死的。
6. 避坑实录:端侧大模型部署最容易翻车的五个细节
6.1 标称内存不等于实际可用内存
这是最基础也最容易犯的错。很多时候我们看规格说8GB、16GB,拿到板子一跑,可用内存少了一大截。RK3588这类SoC,GPU、VPU、ISP、显示控制器都要保留一部分内存,再加上内核和系统服务,8GB实际可用经常在6GB上下。我建议选型时把系统保留这部分直接算进成本,而不是把它当“意外惊喜”。
如果产品要求在线升级、日志持久化、容器化部署,内存占用还会更高。当年信誓旦旦说“8GB够跑7B”的朋友,后来乖乖换成了16GB核心板,多花的钱远比他以为的要多。
6.2 NPU算子支持不全,模型转换失败
RKNN转换的坑主要集中在算子不兼容上。7B模型里常见的某些注意力算子、归一化算子转换到.rknn时可能报不支持,这时候要么换量化策略,要么改图重训,要么放弃NPU退回CPU。我第一次转一个对话模型时,卡在一个Flatten算子上,折腾了两天最后还是用llama.cpp跑通了。
所以再次强调:先跑通,再加速。不要在产品预研阶段就押注NPU万能,结果到量产前发现算子问题解决不了,整个项目延期。
6.3 一开swap,速度直接雪崩
swap是Linux在内存不足时的兜底机制,但对大模型推理来说,swap就是性能杀手。模型权重一旦被换到磁盘上,每次读取都要经过存储IO,速度会从每秒几个token掉到每秒零点几个token,基本不可用。
排查方法很简单:跑推理时盯住free -h和vmstat,如果看到si和so持续不为零,说明swap在剧烈换页。预防手段是内存给足、推理时开mlock、把swap优先级调低。如果是带NVMe或者eMMC的板子,也别指望swap能救你——存储带宽和内存带宽差着数量级,换页过程中推理线程只能干等。
6.4 散热不处理,性能先快后慢
RK3588跑到高负载时功耗能到10瓦以上,发热非常可观。如果产品外壳是密闭塑料壳,又没有合理的散热风道,芯片很快会撞上温度墙降频。这时候的表现很迷惑:刚启动时token速度正常,跑一会儿越来越慢,重启后又好了。
解决方案在结构设计阶段就要定:金属外壳加导热垫、主动风扇、PWM温控策略,三者最好都上。瑞迅的底板一般预留了风扇供电和调速接口,软件里读温度、调PWM也不复杂。别觉得“嵌入式板子功耗低不需要散热”,跑大模型和跑普通应用不是一个量级。
6.5 供电余量不足导致随机重启
大模型推理不是恒定功耗,而是脉冲式负载:token生成时算力突然拉满,电流瞬间升高。如果电源适配器余量不足,或者供电线路压降太大,板子会在高负载瞬间掉电重启,而且不固定复现,排查起来非常痛苦。
经验值是:按“整板峰值功耗x1.5”来选电源。RK3588方案配12V/3A甚至5A的适配器会更稳,别拿标称“12V/2A”的杂牌电源凑合。另外注意电源线材质和长度,线损在大电流下会造成压降,同样是随机重启的隐性原因。测试时用示波器抓一下12V和核心电压的跌落,比肉眼排查快得多。
写在最后的选型心得
如果让我给一个通用答案,端侧部署大模型的选型顺序应该倒过来:先定模型规模和量化精度,再算内存容量和带宽需求,最后才看芯片算力和具体板卡。瑞迅科技这套RK3588、RK3576、RK3568的产品梯度,正好覆盖了7B、3B、1B三档典型需求,选型逻辑其实是清晰的——RK3568做轻量交互,RK3576做中端知识库,RK3588做复杂多模态,内存按我前面说的容量表往上靠一档,基本不会出大问题。
我自己经历过好几轮“内存不够、带宽不够、散热不够”的返工之后,最大的体会就是:端侧AI部署没有一步到位的配置,只有想清楚场景和余量的配置。下次再有人问“我这板子能不能跑大模型”,我会反问他一句:“能跑,但你打算让它跑多久、跑多稳、跑多少路?”把这个问题回答清楚了,型号自然就选出来了。