跳到主要内容

内存管理

Edge Kit 会自动管理模型和生成内存,但 App 层选择仍然重要。

为什么 iOS 内存不同​

iOS 可能在物理 RAM 耗尽前终止 app。请把进程 footprint 和真实设备行为作为事实来源。

对于较大的模型,请启用 Increased Memory Limit entitlement。

Edge Kit 管理什么​

区域行为
模型加载加载前根据当前设备检查模型。
KV cache为文本生成应用自动 KV cache 管理。
提示缓存跨轮次复用对话上下文。
内存压力响应系统内存警告。
单次任务在 STT 和 TTS 类工作负载后释放临时 buffer。

选择 memory intent​

对话型 agent 应声明产品级 intent,并让 Edge Kit 规划底层 cache policy:

Intent使用场景
.balanced大多数聊天会话的默认选择。
.longSession希望在设备预算允许时保留更多 resident context。
.exactRecall会话经常涉及金额、日期、计数或可审计事实。精确数据仍应配合 App 拥有 tool 或 fact-store recall。
.batteryFriendly面向热状态或电量敏感流程,降低 resident-state 压力。
let options = NativeRuntimeLoadOptions(memoryIntent: .longSession)
try await engine.loadLocal(directory: modelURL, options: options)

不要把 DSR window 或 memory env 当作产品 API 调参。它们只适合诊断和实验。对精确事实,应让 tool 或 fact store 作为事实来源,而不是只依赖对话记忆。

对话缓存​

为一次对话保留提示缓存:

for try await chunk in engine.generate(messages: history) {
print(chunk.text, terminator: "")
}

新对话开始时清理缓存:

engine.clearPromptCache()

卸载未使用的 engine​

engine.unload()

对于 TTS,如果流式生成可能仍在运行,请使用 unloadAsync():

await ttsEngine.unloadAsync()

App 最佳实践​

  • 在你支持的最低内存设备上测试。
  • 使用 Release 构建 验证内存。
  • 避免同时加载多个大型 engine。
  • 当不需要全分辨率时,在发送到 VLM 前缩小图像。
  • 保持长时间生成可取消。
  • 使用进程物理 footprint 调试。

常见症状​

症状检查项
app 在加载时退出模型对目标设备过大,或缺少 entitlement。
第一轮很慢冷启动模型加载或长 prompt prefill。
后续轮次变慢对话历史正在增长;适当时总结或清理。
VLM 在图像上失败尝试更小图像并验证设备内存。