直接回答
内存映射描述的是进程通过虚拟内存访问文件区域的一种方式;它不等于模型不占 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。
设备兼容结论须绑定具体设备、系统、模型、运行时、后端和工作负载,不能靠参数量推测。
实施流程
- 确认映射是否有文档或观察依据. 检查准确运行时版本和受支持诊断是否说明加载策略。运行时不暴露时标 mmap 未知,不能从加载耗时、文件大小或没有应用 byte[] 推断。
- 锁定制品与执行身份. 记录制品来源/版本/格式、运行时及应用构建、设备与系统、后端请求/证据、任务夹具和冷/热状态。不同制品或后端要另建测量行。
- 给每种内存指标命名. 只有可直接观察时才记录虚拟映射长度;另行标注 PSS、RSS、Java/Kotlin heap、native heap 或 profiler allocation。保留工具、采样点和单位,不能把虚拟字节称作驻留 RAM。
- 测量生命周期和页访问. 在访问前、初始化后、固定任务后、重复任务、取消及关闭后采样。输入保持不变,并记录可能触及额外模型区域或创建 cache/输入缓冲的任务阶段。
- 报告清理观察与限制. 用同一工具和等待流程观察释放后的内存。没有运行时契约就不要承诺立即解除映射;引用、分配器保留、共享页和系统回收都会改变读数。
让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。
验收标准
- 报告分别区分文件长度、虚拟映射、驻留/进程指标和推理工作内存。
- 只有准确运行时证据支持时才称观察到 mmap,否则明确写实现未知。
- 记录冷/热状态、制品、运行时、后端、任务、指标定义、单位和清理检查点。
- 不能从映射长度或文件大小推导最低 RAM、加载速度或设备兼容结论。
决策对照表
| 维度 | 选择或证据 | 解读方式 |
|---|---|---|
| 模型文件长度 | 按字节盘点存储内容 | 说明磁盘文件,不等于驻留映射页或运行时工作集。 |
| 虚拟映射长度 | 仅记录可直接观察的地址空间区域 | 说明映射范围,不等于当前驻留的物理 RAM 页。 |
| 进程/任务峰值指标 | 在命名生命周期点用 profiler 或系统工具测量 | 适用于该设备任务,但包含映射之外分配,结论仍受范围限制。 |
需要避免的失败模式
- 将虚拟映射长度或模型磁盘大小当作驻留 RAM。
- 仅凭文件很大、加载快或应用没有 byte[] 副本就声称运行时使用 mmap。
还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。
最小复现记录
| 层级 | 记录内容 |
|---|---|
| 设备 | 厂商、型号、芯片、内存档位、操作系统版本 |
| 软件 | 应用版本和 Git 提交号 |
| 模型 | 系列、变体、版本、格式、文件长度、摘要、量化方式 |
| 运行时 | 名称、版本、请求后端及实际后端证据 |
| 工作负载 | 样例版本、输入摘要、提示词摘要、输出策略 |
| 结果 | 完成、失败、取消、回退及保护隐私的诊断信息 |
发布检查表
- ☐ 主要搜索问题已回答,且没有未经支持的数字。
- ☐ 所有模型文件和运行时版本均已固定。
- ☐ 代表性任务和失败处理策略均有说明。
- ☐ 生命周期、取消、清理和回退均已测试。
- ☐ 用户内容与网络边界均有说明。
- ☐ 结论只适用于被记录的配置。
- ☐ 新增测试结果时链接到原始方法或证据。
来源与相关证据
中文部署与排错专题见。奇连 AI 端侧专题。
常见问题
mmap 是否表示模型不使用 RAM?
不是。映射让进程通过虚拟内存访问文件,触碰过的页可能驻留;推理还需要运行时缓冲、cache、张量和其他分配,应另测进程驻留指标。
模型文件大于 Java heap 是否证明使用 mmap?
不能。原生运行时可能用其他方式加载或流式读取。应核对具体实现或标未知;托管堆大小不能揭示加载机制,还需查运行时文档。
关闭引擎后映射页会立即消失吗?
没有文档契约时不要假设如此。引用、原生分配器、共享页和系统回收都会影响关闭后的内存;应使用明确工具和等待流程测量。