把手机当外挂显存跑本地 AI?我试了一下
最近看到一个挺有意思的玩法,像把一部三星 Galaxy S23 变成了本地 AI 的“外置内存条”。不是远程云,不是把任务甩给别的机器,是让电脑直接读取手机里的高带宽 LPDDR5X 内存,拿它当模型权重的临时仓库。12B 的 Gemma 4 模型,CPU 直接从手机内存里取数据跑推理,Prefill 16.29 tok/s,生成速度 4.2 tok/s。这个数字不算飞天遁地,放在纯 CPU 场景里,已经算是眼前一亮。
这件事的妙处,不在“黑科技”三个字有多唬人,而在它很接地气。很多人想折腾本地大模型,手里没有大显卡,钱包也没那么厚,动不动就被显存卡脖子,像一口气跑到半山腰,突然脚下没路了。12B 模型一上来,FP16 权重动辄二十多 GB,量化到 Q4_0 也要七八 GB,普通笔记本的集显看着都发愁,SSD 速度又慢得像老牛拉车。模型能不能跑,常常不取决于算力有多强,先看内存能不能装下,权重能不能喂得动。手机恰好补了这个窟窿。
Galaxy S23 这类手机用的是 LPDDR5X,带宽能到 85.3 GB/s。这个数一摆出来,很多桌面设备都得眨眨眼。手机本身不参与计算,干的是“仓管”的活儿,把大模型权重放在一个足够快的地方,电脑 CPU 负责算,手机负责供货。像开了一家小馆子,后厨不大,食材周转得飞快,出菜的速度自然就比堆在仓库角落里翻箱倒柜强得多。llama.cpp 里的 DGGML_RPC 就是做这件事的,推理后端通过 RPC 去远端设备读张量数据,把手机的内存接进来,变成一块“外挂显存”。
这套方案看着新鲜,思路却不拧巴。你不需要再去买一张新显卡,不需要把整台电脑推倒重来,手边那部平时拿来刷消息、拍照、点外卖的手机,忽然也能派上用场。旧物新用,往往最有味道。很多技术方案最打动人的地方,不是性能参数能冲到多高,而是它让人感觉“原来我手里就有一把钥匙”。
落地操作并不算轻松,折腾味儿很足。Termux 得装上,llama.cpp 源码得改,DGGML_RPC 要打开,ADB 端口转发要配好,USB 3.2 的线得插稳。整个过程像在缝一件手工衣裳,每一针都要对上。模型我选的是 Hugging Face 上的 gemma-4-12b-it-GGUF,Q4_0 量化,文件大约 7.7GB。这个尺寸很关键,太小浪费带宽,太大又塞不进手机内存。Q4_0 像一条刚刚好的裤子,不松不紧,能穿得住,跑起来也不至于喘不上气。
编译 llama.cpp 的那一步最容易碰到坑。Termux 里装依赖、拉仓库、跑 CMake,路上总会有几块小石头。我第一次折腾时就卡在依赖上,少了 python,配置直接翻车。那种感觉很像满怀期待把锅烧热了,结果发现没放油。把 pkg upgrade 走一遍,把缺的东西补齐,重新来,事情就顺了。技术折腾这件事,本来就少不了磕磕碰碰,谁没被报错教育过,谁都谈不上真正上过手。
手机端服务跑起来以后,主机和手机之间的通信才算接上了电。DGGML_RPC 默认监听 50052 端口,手机和电脑不在同一个网络里,最稳妥的办法就是用 ADB 做 USB 端口转发。开发者选项里打开 USB 调试,手机插线,主机端把本地端口映射过去,llama-cli 就能直接访问手机上的 RPC 服务。这个过程听起来像在搭桥,其实更像借一根细绳把两只杯子拴住,让声音能顺着线传过去。无线也不是不行,ADB over WiFi 可以玩,延迟和稳定性就没那么踏实。真要认真测,线连着最省心。
RPC 服务启动后,手机会弹出提示,提醒不要把服务暴露在开放网络里。这个提醒挺朴素,也挺必要。很多技术一旦从实验桌走到现实世界,安全边界就开始变得重要。端口转发只在 USB 连接下使用,不拿去乱暴露,问题就小得多。技术不是法术,服务也不是灯一开就万事大吉,底层的约束永远在那里。
开始推理以后,结果比我想的要实在。主机端加上 --rpc,告诉 llama.cpp 去远端读张量,-ngl 0 则是纯 CPU 路线,不靠 GPU。测试下来,Prefill 16.29 tok/s,Token 生成 4.2 tok/s。对照纯 CPU 直跑,大概只有 2 到 3 tok/s。这个提升不算夸张到让人拍大腿,却足够让人点头。像原本骑着一辆有点掉链子的自行车,突然给轮子抹了点油,还是那辆车,脚感顺了不少。
真正有意思的地方,在于它的边界也很清楚。RPC 不是白送的,张量每读一次都要经历协议开销,序列化、反序列化、端口转发,这些成本都躲不开。Prefill 阶段受益更明显,生成阶段的提升就没那么大,因为生成时的数据访问更零碎,延迟被放大,像河里撒网,网眼再密,也架不住鱼游得太散。手机的持续性能也受温度限制,S23 的芯片一热就会降频,长时间跑下来,速度从 4.2 tok/s 掉到 3 tok/s 甚至更低并不稀奇。小风扇对着后盖吹一吹,效果倒挺直接,像给发烫的铁锅撒了把凉水,立刻精神不少。
USB 3.2 的带宽和手机本身的 LPDDR5X 带宽放在一起看,也挺有意思。手机内存很快,USB 线没那么快,最后整个系统像是拿着跑鞋去走泥路,真正的瓶颈往往不是你想象中的那个。换句话说,手机内存确实有价值,可它的价值不是无上限的,系统整体还是要受接口拖拽。两部手机串联做 RPC 中继的点子也有人提过,听上去像把两桶水接起来,容量翻了一倍,管道也更长了,漏水和阻力自然也会跟着来,值不值得干,得看具体场景。
市面上的替代方案也不少。eGPU 最猛,外置显卡盒加桌面显卡,性能漂亮,价格也漂亮,钱包会先沉默。纯 CPU 加 SSD 方案最朴素,很多人都在这么过日子,7B 模型还能勉强转,12B 往上就很容易卡成幻灯片。云平台 API 最省事,想用 GPT-4、Claude 之类,直接付费调用,省了折腾,数据却离开了自己手边,隐私和持续成本总归绕不过去。手机内存扩展夹在中间,成本几乎为零,性能比纯 SSD 强一截,离真正的 GPU 还差得远,胜在手边就有,拿来就用,适合爱尝鲜、又不想大出血的人。
这套方案最适合的场景,不是追求极致生产力,而是给本地 AI 开一扇门。想学习大模型推理的人,用手机做内存扩展,门槛会低很多;离线环境里没网可用的时候,本地 CPU 加手机内存,至少能把事情跑起来,哪怕慢一点,也比干等强;边缘部署里,手机也能当个临时节点,帮着分担一点内存压力。它不适合长上下文,不适合重负载长时间硬扛,8GB 手机内存本来就卡得紧,模型文件一塞,系统余量就不多了。真要更长上下文,还是得更大内存的手机,或者多机串联。
把手机当外挂显存跑本地 AI,这个想法听起来像玩笑,跑通以后才知道,它确实有点东西。Galaxy S23、llama.cpp、DGGML_RPC、ADB 端口转发,这一套组合在一起,12B 模型能在纯 CPU 上跑出 4.2 tok/s 的生成速度。距离流畅聊天还有距离,离“能用”已经不远。技术这件事最迷人的地方,常常不是谁造出了一台多豪华的机器,而是谁把手边最普通的东西,拧成了一个新入口。口袋里的手机,很多时候不只是通讯工具,它也能是一块被低估的算力拼图。这个时代最值钱的,往往不是你手里有没有新设备,而是你能不能把旧设备重新叫醒。