AI 纪元 追踪人工智能最新进展,深度解读前沿技术

chacun.cpp 开源一周,旧 iPhone 先撞上内存和温控

chacun.cpp 开源一周,Star 数突破 8500。我们把它装进 4GB 内存的 iPhone 11,复现读取 3.2MB CSV、三次工具调用和摘要生成:首次运行峰值占用 3.8GB,量化后常驻内存降到约 1.2GB,随后又撞上五分钟后的温控降频。

0 次阅读 约 2054 字 4 分钟 AI 生成
An iPhone resting on a metal surface with faint heat shimmer rising from it, sparse editorial still life
An iPhone resting on a metal surface with faint heat shimmer rising from it, sparse editorial still life

2026年7月5日,chacun.cpp 在 GitHub 发布第一个正式 tag。项目没有官方通稿,开源一周后,Star 数已经突破 8500。

这套开源Agent框架去掉了重型容器依赖,用纯 C++ 接管线程池和显存映射,再让包含多轮反思、工具调用的 Agent 链路直接在老旧设备上运行。

问题也随之变得具体。上下文越长,KV Cache 占用越高;任务持续越久,SoC 温控越早介入。模型给出答案之前,应用得先在 4GB 内存里活下来。

推理还没开始,先卡在编译

我们用一台 iPhone 11 复现项目,设备搭载 A13 仿生芯片、4GB 运行内存,系统版本为 iOS 17.4。

测试任务不算刁钻:让 Agent 自行规划执行路径,读取一个 3.2MB 的本地 CSV 文件,通过三次工具调用完成数据清洗并生成摘要。这是一条典型的中等复杂度多步推理链路。

模型还没开始加载,编译先给了个下马威。chacun.cpp 依赖较新的 C++ 标准库和 Metal 私有 API,使用 Xcode 15 的常规 Clang 编译时,一共遇到 23 个弃用 API 报错。最后只能手工配置 toolchain,绕开这些错误。

端侧 C++ 工程的成本从这里就开始了。没有云端环境和容器替你兜底,编译器、系统接口和硬件适配都得逐项处理。

3.8GB 峰值,系统直接重启

原生脚本第一次跑起来时,Agent 刚加载完基础模型权重,还没进入推理轮次,手机就灰屏重启了。

日志显示,应用峰值内存占用达到 3.8GB。对只有 4GB 运行内存的 iPhone 11 来说,这已经逼近系统红线,后台驱逐和 OOM 随即出现。

接下来的两整天都花在减内存上。先做 W4A16 量化:把原生 FP16 权重压到 4-bit,累加仍使用 16-bit 浮点。此前的《权重大小量化提速:臃肿依赖让Agent体重居高不下怎么瘦身》里,同类方案被用于处理超过 2GB 镜像的冷启动问题。放到 iPhone 11 上,目标更直接——让进程先活下来。

量化后,基础模型占用从 3.1GB 降到 960MB。不过,多步推理还会不断追加历史信息,KV Cache 仍在持续吃内存。

A13 使用统一内存架构,模型、KV Cache、GPU 和系统进程都要从同一块内存里分配空间,所谓“显存拌饭”就是这个局面。我们把 KV Cache 页表控制在动态 256MB 区间,同时降低滑动窗口的更新频率,用来保存决策树历史。

调整后,单实例常驻内存压到约 1.2GB。任务终于可以完整运行,不再在加载阶段被系统强杀。

五分钟后,14 tokens/s 掉到 3 以下

内存稳定后,温度开始接管测试。

iPhone 11 没有均热板。在这次连续负载中,A13 以最高频率运行不到 5 分钟,背板温度便升到 41°C。系统触发 throttling 后,CPU 和 GPU 频率被压到接近原来的一半,Token 生成速度也从最初的 14 tokens/s 跌到不足 3 tokens/s。

Agent 执行到第三步时,屏幕光标停顿了近 8 秒。对一条需要连续规划、调用工具并写回结果的任务链来说,这段空档会继续拖慢后面的每一步。

我们随后做了三项调整:

  • 把推理线程从实时抢占队列降到普通队列,并让工具调用相关的等待走异步系统调用路径。
  • 每完成两轮本地工具调用,插入 500 毫秒的非阻塞 sleep,给系统留出短暂的降温时间。
  • 使用 chacun.cpp 的组块预处理接口,把 CSV 解析交给 CPU 的 SIMD 通道,只在最终生成摘要时唤醒 GPU/神经引擎计算路径。

调整后,单次任务的端到端耗时从 165 秒降到 142 秒。少掉的 23 秒算不上大跃进,后续任务至少没有再因过热被系统中断。端侧性能优化往往得先保证任务能结束,再继续追求速度。

跑通以后,电量这笔账还没算

chacun.cpp 没有发明新的多步推理算法。它做得更实在:拆开封装层,让线程调度、统一内存、工具调用和温控同时暴露在一条任务链里。

像 OpenClaw 这类强调多步任务推演的系统,进入手机后也会遇到唤醒、保活和温控问题。Agent 需要持续感知、推理并写回结果,这种长时间负载无法用一次 NPU 峰值跑分解释。

这轮复现没有记录完整续航,因此还不能给出具体耗电结论。能够确认的是,持续推理已经触发明显降频。如果这类任务要变成日常功能,电量和系统调度还需要单独验证。

最终,我们在 4GB 内存的 iPhone 11 上跑通了多步反思和三次工具调用。代价也很清楚:手工配置 toolchain、压缩模型、限制 KV Cache、调整线程优先级,以及几分钟后开始发热的机身。

项目开源一周拿到 8500 个 Star。手机端留下的则是另一串数字:3.8GB 峰值、41°C、不到 3 tokens/s。端侧 Agent 能不能走出演示,得先把这串数字压下去。

相关阅读