news 2026/10/25 2:38:01

2GB 设备的小模型容量账:哪些页共享,哪些随上下文增长

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2GB 设备的小模型容量账:哪些页共享,哪些随上下文增长

“量化权重只有1GB,所以2GB设备还能再开一个会话。”这个判断漏掉的通常不是某个神奇内核参数,而是所有权和计量口径。

同一份文件页可能被多个进程共享,KV缓存常随上下文和并发增加,工作区又不一定按会话线性增长。把两个进程的RSS相加,会重复计算部分共享页;只看权重文件大小,又会漏掉运行时和系统开销。

先统一单位,再讨论装不装得下

2GB按十进制是2,000,000,000字节;2GiB是2,147,483,648字节。实际可供用户态使用的量还受固件、内核、设备预留等影响。采购单、/proc/meminfo和测试脚本必须注明自己采用哪个口径。

内存对象主要变化来源怎样核查
文件映射权重文件版本、触页与后端复制文件大小、映射、PSS
匿名区解码、量化转换、运行时分配smaps_rollup与分配记录
KV缓存层数、KV头、上下文、数据类型、并发模型配置与运行时统计
工作区后端、批大小、算子与并行策略峰值与阶段采样
系统及其他业务驱动、服务、页缓存和负载整机与cgroup指标交叉检查

mmap建立映射,不是给模型开一条直达计算单元的专用通道。同一文件的干净页可被共享,后端转换、写时复制和设备缓冲区却可能另占内存。mmap(2)

图中的两个进程共享权重,是一种条件成立时的布局。KV和工作区在图中画成私有块,用来提醒我们别把权重共享推成“全部内存都共享”;具体运行时仍可能有自己的共享或复用策略。

给KV缓存写一个可检查的算式

对使用常规K、V缓存、各层维度相同且缓存完整上下文的注意力模型,可以先估算:

KV字节 ≈ 2 × 层数 × KV头数 × 每头维度 × 缓存token数 × 每元素字节数。

这里用KV头数,而不是笼统代入查询头数。量化缓存、滑动窗口、混合架构、块元数据、对齐和分配策略都会让实际值偏离这个简式。它不是所有模型的通用内存公式。

下面脚本保存成capacity.py,只做整数预算,不加载模型:

def kv_bytes(layers, kv_heads, head_dim, context, bytes_per_value): values = (layers, kv_heads, head_dim, context, bytes_per_value) if not all(type(x) is int and x > 0 for x in values): raise ValueError("positive integer dimensions required") return 2 * layers * kv_heads * head_dim * context * bytes_per_value def capacity(total, system, weights, kv, workspace): if min(total, system, weights, kv, workspace) < 0 or kv + workspace == 0: raise ValueError("invalid budget") return max(0, (total - system - weights) // (kv + workspace)) if __name__ == "__main__": # Hypothetical standard attention cache. Not a model benchmark. kv = kv_bytes(24, 4, 64, 1024, 2) print("hypothetical KV bytes:", kv) print("hypothetical KV MiB:", kv / 2**20) print("contexts under assumed budget:", capacity(2048, 384, 1024, kv // 2**20, 96))

示例在Python 3.9.6上运行python3 capacity.py,假设24层、4个KV头、每头64维、1024 token和每元素2字节,得到25,165,824字节,也就是24MiB。再假定总量2048MiB、系统保留384MiB、共享权重1024MiB、每会话工作区96MiB,算式给出5份上下文。

这些都是脚本里公开写出的假设输入。“5”不是某块2GB板卡的实测并发,24MiB也不是某个已命名模型的实际缓存占用。该预算还把工作区按会话计入,是简化的保守口径;运行时若共享工作区或有额外固定开销,必须重新建账。

容量验证只回答容量问题

后续上板先固定模型哈希、量化、运行时commit、上下文和并发。单请求运行后,再逐步增加并发,保留启动失败、分配失败和退出码,不能只展示成功的一次。

测量至少保留进程PSS、memory.current、memory.stat和整机MemAvailable。这些指标的归属与层级不同,应解释差异,不能互相替代。Free与MemAvailable也不应直接相加当成额外可用量。cgroup v2文档

若预算不够,先拒绝启动或减少并发。zram使用真实内存存放压缩数据,它的逻辑容量不是凭空增加的RAM;量化权重也不能预设固定压缩比。zram文档

本文没有2GB设备、模型吞吐或长稳测试结果。容量账算清以后,延迟、温升、持续运行与恢复能力仍需另验;不能用“能装进去”代替“能交付”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/25 2:36:55

数据处理中的change_domain与reduce_domain操作详解

1. 理解change_domain与reduce_domain的核心概念在数据处理和计算领域&#xff0c;change_domain和reduce_domain是两个经常被提及但容易混淆的操作。我第一次接触这两个概念是在处理大规模地理空间数据集时&#xff0c;当时需要将高分辨率气象数据适配到不同分析尺度。change_…

作者头像 李华
网站建设 2026/10/25 2:21:19

企业知识管理工具进化:从IMA到Pandawiki的实践指南

1. 为什么说"ima已死"&#xff1f;企业知识管理工具的迭代逻辑2015年前后&#xff0c;ima作为早期企业知识库解决方案的代表&#xff0c;确实解决了不少企业的文档集中管理需求。但站在2024年的视角回看&#xff0c;这套系统存在三个致命伤&#xff1a;首先是架构层面…

作者头像 李华
网站建设 2026/10/25 1:56:57

轨道交通视觉检测实战:从车轮踏面到受电弓滑板的完整方案设计

轨道交通视觉检测实战&#xff1a;从车轮踏面到受电弓滑板的完整方案设计 机器视觉选型笔记 行业应用实战第 10 篇 **阅读提示&#xff1a;**本文约 6200 字&#xff0c;预计阅读 16 分钟。如果你正在做车辆段、动车所的轮对/车底在线检测&#xff0c;或者车载弓网监测的方案…

作者头像 李华
网站建设 2026/10/25 1:55:03

从代码到四十年:用 GEE 亲手“播放”深圳的城市生长速度

从代码到四十年:用 GEE 亲手“播放”深圳的城市生长 如果你在 Google Earth Engine 的代码编辑器里运行过那段看似平淡的代码,几秒之后,浏览器会下载一个 GIF。画面里是一片灰绿色的土地,几道浅色的线条从中间向四周蔓延、加密、膨胀,最终被密集的灰色斑块覆盖。没有配乐…

作者头像 李华