基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
  • 知识卡片碎片时间过考点
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
    • AI 热点每日 AI 资讯与动向
AI 工作台
简历
旧版
AIHT
内容
精选全部 AI 动态热点榜AI 日报收藏
分类
模型行业编程产品技术观点开源
更多
Agent 接入
返回首页开发者导航
AIHT
精选 / 资讯详情
8.0
热点
AI SCORE
技术实践2026-11-10 20:20

边缘模型内存预算要看长请求与峰值并发

dev.to · AI#边缘推理#内存优化#容量规划
Editor brief · 编辑速览

文章指出,模型文件大小不能直接用于推算设备剩余推理内存,还需考虑驻留权重、KV 缓存、计算缓冲区及系统服务。建议先计算模型文件字节数和理论 KV 开销,再在目标设备测试长请求、峰值并发及峰值后的恢复情况。

文章思维导图
Knowledge map
拖拽缩放
AI deep read

AI 深度解读

8 GB 内存的设备,能不能跑一个 2 GB 的模型?作者的结论是:光看这两个数字,答不了。模型文件只占存储账本的一项,推理时还要容纳驻留权重、KV cache、计算缓冲区,以及操作系统和配套服务。

这篇文章的价值在于给出一套容量验收方法:先算理论下限,再测最长请求和真实并发。文中的 3B 模型、512 MiB 缓存和 2 GB/8 GB 都是假设算例,没有具体开发板的实测成绩。

为什么 8 减 2,算不出剩余推理内存

「模型需要 4 GB」可能指文件大小、驻留权重、进程峰值、GPU 显存,也可能指整机需求。口径没对齐,减法就没有意义。GGUF 文件能放进磁盘,只能说明存储过关。

以三十亿参数的假想模型为例,每个参数恰好占四位,裸权重下限是:

3,000,000,000 × 4 ÷ 8 = 1,500,000,000 bytes

约为 1.40 GiB;八位约 2.79 GiB,十六位约 5.59 GiB。这里必须区分十进制 GB 和二进制 GiB。实际文件还有量化比例因子、零点、较高精度张量、文件头和对齐等开销,Q4 与 INT4 也不是跨格式通用的字节承诺。

因此,作者要求固定模型文件的哈希,记录准确字节数,再检查运行时加载了什么。权重量化不会让操作系统、计算图和 KV cache 按相同比例缩小。llama.cpp server 把加载方式、上下文、设备卸载和 K/V 类型分开配置,正说明它们需要分别记账。

内存映射(memory mapping)也没有绕过物理内存:推理访问的文件页仍可能驻留,而且可能被多个进程共享。RSS 会包含共享页,PSS 按比例分摊共享页,但两者都不能独自回答整机是否够用。

容量验收要看同一配置、同一时刻的内存占用,不能把文件大小和不同监控口径直接相加减。

512 MiB 的 KV cache,到底怎么算出来

自回归生成会复用此前 token 的键和值,避免每一步重新计算历史内容。保存这些中间结果的 KV cache,是长上下文和并发请求需要单独预算的部分。

下面的公式用来估算标准注意力结构下的缓存数据量:

KV bytes ≈ 2 × attention layers
         × KV heads × dimensions per head
         × allocated tokens per session
         × bytes per K/V element
         × simultaneous independent sessions

要看准 KV heads 这一行:它不是 query heads。Grouped-query attention 和 multi-query attention 的 KV 头数可能更少;K、V 类型不同时应分别计算。滑动窗口、混合架构或跨层共享状态,也不能直接套这个统一公式。

假设有 32 层注意力、8 个 KV 头,每头 128 维,K/V 元素各占 2 bytes,单会话分配 4,096 tokens:

2 × 32 × 8 × 128 × 4,096 × 2 = 536,870,912 bytes ≈ 512 MiB

要留意其中的 4,096:它表示假定的分配长度,不是用户实际输入的字符数,更不是开发板测量值。

两个独立会话各分配 4,096 tokens,理论 KV 基线为 1,024 MiB;单会话改为 8,192 tokens,在其他假设不变时也会翻倍。如果两个会话分别分配 4,096 和 2,048 tokens,则是 512 MiB 加 256 MiB,共 768 MiB。

但运行时若提前预留两个完整的 4,096-token 槽位,就不能按 768 MiB 算。共享模型权重,也不代表不同对话历史能共享 KV。

缓存量化还要另算。降低 K/V 精度可以减少名义数据量,但比例因子、残余存储、转换缓冲区和延迟会影响实际收益。把缓存从 GPU 卸载到 CPU,则是改变内存位置并增加传输工作。llama.cpp server 可以分别选择 K、V 类型,所以一句「用了四位量化」,未必说清缓存精度。

怎样把一次短聊,变成可复现的容量验收

业务输入与模型配置之间,还差一次完整的 token 核算。

作者举的例子是:最长输入 3,000 tokens,回答额度 800,指令和模板再占 200,合计已经达到 4,000。对于 4,096-token 上下文,再多 150 tokens 就可能触发截断,甚至还没走到内存不足。改成 8,192 可以缓解上下文限制,也可能增加运行时预留的 KV。

所以,100-token 演示无法证明产品可用。验收至少要把四个阶段并排记录:静态估算、加载后空闲、最长单请求、最大预期并发。静态阶段可以填文件字节数和理论 KV;计算工作区、系统占用没有测过,就留空或写「待测」,不要随手加一个安全百分比。

测试应从正常系统镜像启动,保留检索、音频、显示等日常服务。固定文件哈希、tokenizer、架构、运行时与后端版本、上下文限制和 K/V 类型,再运行最长请求、真实重叠请求,并重复几轮观察恢复情况。

并发必须有明确形状,例如两个最长输入在提示词处理阶段重叠。线程数和在线人数都不能代替这个定义,因为运行时可能排队、复用缓存或提前预留。如果产品选择串行处理长请求,等待时间和超时也要一起验收。

Linux 可以记录 /proc/meminfo 中的 MemAvailable,以及推理进程 smaps_rollup 的 RSS/PSS;容器还要记当前用量与上限,有设备内存计数器也应保留。每个值都带采集时间,同时记录 swap、OOM 和失败请求。运行时没报告的字段,就写「未报告」。

进程 RSS/PSS 可能已经包含权重映射、KV 和缓冲区,不能把这些明细再加一遍。统一内存上的 GPU 计数与 RSS 可能重叠;独立显存则可能先耗尽,而系统 RAM 仍有余量。

我的判断

我赞同作者把「能跑」改成一个有条件的结论:固定模型、配置和业务负载之后,最长请求及目标并发都完成,峰值、失败记录和恢复行为才有验收意义。对需要检索长手册、同时驱动显示或音频服务的设备,这比模型文件大小更接近真实需求。

但这是一套测试设计,不是硬件选型榜单。作者没有目标板运行记录,也没有 3B 与 7B、不同量化格式的成对测试。它不能证明某种格式更省内存,也不能支持「8 GB 足够」或「至少需要 16 GB」这样的采购结论。

相比按参数量估算或给文件大小乘倍数,这套方法更可追溯,代价是必须拿到目标设备实测。静态估算仍适合初筛,只是不能越级成为验收结果。

故障阶段也需要分清:长输入被截断,应先检查 tokenizer 和输出额度;仅并发 OOM,应检查独立 KV、重叠时段和容器或设备限制;首轮成功、后续恶化,则检查缓存释放与排队。改一个变量,再复跑原负载,才知道改动是否解决原问题。

压缩权重、缩短上下文或串行化请求,都可能换来容量空间,也可能损害答案和响应时间。容量筛选之后,还要用业务题集验证答案,并单独检查首 token 延迟 TTFT、每输出 token 耗时 TPOT、内存与功耗。原文没有这些对照结果,不能替它补结论。

能拿来做什么

  • 给本地推理或 Node 接入的边缘模型整理一份可复现记录,写明模型哈希、运行时与后端版本、tokenizer、上下文、K/V 类型和卸载设置,避免只留下「四位模型」。
  • 从业务允许的最长输入出发,合并系统指令、检索文本和输出额度计算 token 预算,再验证是否截断,以及扩大上下文后的内存变化。
  • 按真实请求时序压测,让最长请求实际重叠,并保留配套服务;如果采用串行策略,同时记录等待和超时。
  • 为每个候选配置保留四阶段记录和原始日志。遇到 OOM,先定位加载、输入处理、生成还是并发阶段,再决定调整配置或更换设备。
Original source

本文由 AI 通读原文后重新编写,观点部分为站内判断,细节以原文为准,来源 dev.to · AI,原文版权归原作者所有。

阅读原文
上一篇
多个编程助手会话共享 MCP 服务进程
下一篇
Claude Code 默认模型迁移至 Fable 5.2

资讯速览

dev.to · AI · 2026-11-10 20:20

AI 评分 8.0 / 10

相关标签

#边缘推理#内存优化#容量规划

继续阅读

  • 用校验闭环提高大模型输出可靠性
  • 多个编程助手会话共享 MCP 服务进程
  • Claude Code 默认模型迁移至 Fable 5.2
  • AlphaProof Code 用 Lean 验证 Signal 加密核心
  • n8n 显示成功,业务却已停摆