内存与设备证据

Android 模型 mmap 加载:区分映射、驻留页与推理内存

用准确运行时证据确认映射机制,并分别记录虚拟长度、驻留指标与任务峰值。

审核状态: 内容已校验;中文稿供用户审核 · 2026-10-04 · Fact IDs: MEMORY-01, MEMORY-02

直接回答

内存映射描述的是进程通过虚拟内存访问文件区域的一种方式;它不等于模型不占 RAM,也不能证明某个推理运行时一定采用 mmap。Android 内存管理文档解释,文件映射、对象堆、共享页和物理驻留内存是不同观察维度。未修改的映射页可能在系统需要内存时被回收,而已访问或修改的页可能留在驻留集中。因此,模型文件大小、虚拟映射长度、驻留集和推理峰值工作集是不同测量值。 首先从所选运行时官方文档、源码或受支持诊断确认真实加载机制。不能从大文件、加载很快或应用代码看不到完整 byte[] 副本就推断 mmap;加载也可能由原生依赖负责。如果运行时没有暴露是否或如何映射制品,就把实现标为未知,只测可观察的进程行为。记录模型制品版本、运行时包/版本、应用构建、设备、系统、后端和准确任务。 采用分阶段测量时间线:访问模型前、引擎初始化后、代表任务触碰模型数据后、重复任务后、取消后和引擎关闭后。用 Android Studio Memory Profiler 或有文档的系统工具记录命名指标,并明确是 Java/Kotlin 堆、native heap、PSS、RSS、虚拟大小还是其他数值。不同指标不能直接相加,虚拟地址空间也不能称为驻留 RAM。映射缓冲的生命周期可能延长到引用释放及对象回收之后;除非运行时有说明,关闭高层引擎不证明所有映射立即消失。 设计对照以区分文件映射与模型工作内存:将文件盘点与进程测量分开,记录任务访问了哪些区域,区分冷进程和热进程,并重复同一输入。映射页可能逐渐载入,因此初始读数较低、跑过任务后升高并不矛盾。运行时缓冲、KV cache、输入张量、解码媒体和分配器行为也会影响内存。仅凭下载大小无法预测推理峰值。 结论只回答实际测到的内容:是否直接观察到映射、哪项内存指标发生变化、发生在任务哪个阶段、清理后进程怎样变化。没有官方或运行时证据时,不能将结果标题写成“LiteRT-LM 使用 mmap”。项目没有完整设备基准集,因此本文给的是方法,不发布 RAM 要求、启动成绩或设备兼容结论。要区分实现事实与测量结果:前者需要实现证据,后者需要命名指标与可复现运行。 报告工具、单位、采样点、制品/运行时身份、设备状态和任务夹具。Android 进程指标可能包括共享页和非模型工作,所以不能把整个数值归因于模型权重。如果运行时隐藏内部分配器或映射策略,应明确保留该限制。最有价值的结果是显示每个任务阶段之后发生什么、哪些仍未知的可审计时间线,而不是一个没有限定的数字。 重复测量还应保持系统条件一致并保留失败结果。若取消、加载错误或内存压力发生,记录其准确阶段,不要只报告成功的热运行。模型格式、运行时版本、提示上下文和媒体输入变化后,测量边界可能改变,应为新配置另建记录。不能把通过某次文件映射观察外推到其他制品,也不能据此推荐最低设备 RAM。

模型文件很大,但 Java 堆小于文件大小

Android 工程师看到磁盘上的模型文件很大,而进程 Java heap 却小于文件长度。团队怀疑运行时采用内存映射,但没有实现证据,还需解释为什么推理期间内存可能继续上升。

决策

尽可能用权威运行时证据确认映射;之后把映射、进程指标和任务分配作为不同数值测量。

预期结果

报告说明 profiler 实际观察到什么及哪些仍未知,不把文件长度或虚拟映射当作 RAM 要求。

需要收集的证据

只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:

  • MEMORY-01:峰值推理内存还受权重、运行时缓冲、KV cache、输入张量、系统余量和分配器影响。
  • MEMORY-02:权重存储下界不能代替真实制品大小,更不能直接推导进程 RAM。

设备兼容结论须绑定具体设备、系统、模型、运行时、后端和工作负载,不能靠参数量推测。

实施流程

  1. 确认映射是否有文档或观察依据. 检查准确运行时版本和受支持诊断是否说明加载策略。运行时不暴露时标 mmap 未知,不能从加载耗时、文件大小或没有应用 byte[] 推断。
  2. 锁定制品与执行身份. 记录制品来源/版本/格式、运行时及应用构建、设备与系统、后端请求/证据、任务夹具和冷/热状态。不同制品或后端要另建测量行。
  3. 给每种内存指标命名. 只有可直接观察时才记录虚拟映射长度;另行标注 PSS、RSS、Java/Kotlin heap、native heap 或 profiler allocation。保留工具、采样点和单位,不能把虚拟字节称作驻留 RAM。
  4. 测量生命周期和页访问. 在访问前、初始化后、固定任务后、重复任务、取消及关闭后采样。输入保持不变,并记录可能触及额外模型区域或创建 cache/输入缓冲的任务阶段。
  5. 报告清理观察与限制. 用同一工具和等待流程观察释放后的内存。没有运行时契约就不要承诺立即解除映射;引用、分配器保留、共享页和系统回收都会改变读数。

让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。

验收标准

  • 报告分别区分文件长度、虚拟映射、驻留/进程指标和推理工作内存。
  • 只有准确运行时证据支持时才称观察到 mmap,否则明确写实现未知。
  • 记录冷/热状态、制品、运行时、后端、任务、指标定义、单位和清理检查点。
  • 不能从映射长度或文件大小推导最低 RAM、加载速度或设备兼容结论。

决策对照表

维度选择或证据解读方式
模型文件长度按字节盘点存储内容说明磁盘文件,不等于驻留映射页或运行时工作集。
虚拟映射长度仅记录可直接观察的地址空间区域说明映射范围,不等于当前驻留的物理 RAM 页。
进程/任务峰值指标在命名生命周期点用 profiler 或系统工具测量适用于该设备任务,但包含映射之外分配,结论仍受范围限制。

需要避免的失败模式

  • 将虚拟映射长度或模型磁盘大小当作驻留 RAM。
  • 仅凭文件很大、加载快或应用没有 byte[] 副本就声称运行时使用 mmap。

还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。

最小复现记录

层级记录内容
设备厂商、型号、芯片、内存档位、操作系统版本
软件应用版本和 Git 提交号
模型系列、变体、版本、格式、文件长度、摘要、量化方式
运行时名称、版本、请求后端及实际后端证据
工作负载样例版本、输入摘要、提示词摘要、输出策略
结果完成、失败、取消、回退及保护隐私的诊断信息

发布检查表

  • ☐ 主要搜索问题已回答,且没有未经支持的数字。
  • ☐ 所有模型文件和运行时版本均已固定。
  • ☐ 代表性任务和失败处理策略均有说明。
  • ☐ 生命周期、取消、清理和回退均已测试。
  • ☐ 用户内容与网络边界均有说明。
  • ☐ 结论只适用于被记录的配置。
  • ☐ 新增测试结果时链接到原始方法或证据。

来源与相关证据

中文部署与排错专题见。奇连 AI 端侧专题。

常见问题

mmap 是否表示模型不使用 RAM?

不是。映射让进程通过虚拟内存访问文件,触碰过的页可能驻留;推理还需要运行时缓冲、cache、张量和其他分配,应另测进程驻留指标。

模型文件大于 Java heap 是否证明使用 mmap?

不能。原生运行时可能用其他方式加载或流式读取。应核对具体实现或标未知;托管堆大小不能揭示加载机制,还需查运行时文档。

关闭引擎后映射页会立即消失吗?

没有文档契约时不要假设如此。引用、原生分配器、共享页和系统回收都会影响关闭后的内存;应使用明确工具和等待流程测量。