PS5LM 拆解:越狱 PS5 上的 llama.cpp,21 token/秒跑 27B 模型

2026 年 10 月 16 日,Hacker News 首页出现一个让极客社区集体怀旧的项目:开发者 cobanov 发布的 PS5LM,在越狱后的 PS5 上原生运行 llama.cpp,把这台游戏主机变成客厅里的本地大模型服务器。项目上线一天拿下 290 分,仓库 10 月 1 日创建,Star 数已过 400。

PS5LM 主界面:Qwen3.8 27B 以 20.7 token/秒生成,网络设备通过 OpenAI/Anthropic 兼容 API 调用

这个项目解决的实际问题很具体:一台二手 PS5 只要几百元,CPU 是 8 核 Zen 2,GPU 是 RDNA 2 架构,16GB GDDR6 统一内存提供 448GB/s 带宽(Pro 版 576GB/s),这组规格在同等价位很难找到对手。PS3 时代曾有大学买整机建集群做分布式计算教学,索尼当年甚至为 PS3 提供过官方 Linux 安装途径;PS5 世代索尼封死了这条路,系统里没有公开的图形或计算 API,GPU 只能通过索尼私有的 AGC 接口编程。PS5LM 的全部工程量,就是把这两扇门重新撬开。

从浏览器漏洞到内核权限

PS5LM 的前提是越狱。当前可用的利用链叫 Relapse,2026 年 9 月 29 日公开,覆盖 PS5 和 PS5 Pro 的 7.00 到 13.60 固件。它的攻击路径是两段式:先在主机浏览器里触发 JavaScriptCore 信息泄露加结构化克隆对象池的类型混淆,损坏一个 typed array;再利用 aio_multi_wait 函数中的一次释放后使用竞态,拿到内核读写权限。整个利用链不持久,每次重启后都要重新执行。9 月 16 日发布的 14.00 固件已经封堵了这条链。

内核权限之上是工具链。kstuff 提供伪造签名的可执行文件加载,etaHEN 补齐自制软件运行所需的越狱环境,elfldr 在 9021 端口运行 ELF payload,配套的 ftpsrv、shsrv、klogsrv 分别负责文件传输、命令执行和日志。编译侧用的是 ps5-payload-dev/sdk(Clang 的 x86_64-sie-ps5 目标,macOS 装 Homebrew 的 LLVM 即可交叉编译)。PS5LM 作为原生应用(PPSA99575)通过 ShadowMountPlus 挂到主屏幕上,运行时还需要 kstuff-lite、etaHEN、elfldr 三个 payload 配合。

越狱之后的真正门槛:内存

越狱只是入场券。PS5LM 开发者用 memprobe 探针实测的内存数据,揭示了索尼系统设计的分层限制,这部分是项目文档里最有价值的原创内容。

在 payload 进程里,flexible memory 可配置上限 8GiB,malloc 实际能摸到的天花板是 6.25GiB,单个 posix_memalign 最大块 6GiB,direct memory 分配直接失败(错误码 0x80020023)。原因藏在 elfldr 的实现里:它启动每个 payload 前都会调用 sys_budget_set(0),把进程预算设成系统应用级别。etaHEN 的越狱请求只改变进程的 uid、沙箱和 authid 权限,不碰预算;所以所有需要 6GiB 以上内存的自制软件都必须做成原生应用。

原生应用的待遇完全不同。通过 ggml-vulkan 跑在 PS5_Vulkan 的 RADV 驱动上,RADV 报告的设备堆是 11.44GiB(radv_enable_unified_heap_on_apu 开关,不开则只有 8GiB)。11.44GiB 就是 PS5LM 给模型加上下文的总预算,主界面进度条上「11.1 of 11.4 GB」的数字就是它。

Models 页面:按 PS5 实测速度分级的推荐列表,从 27B 语言模型到 600M 决策模型

CPU 侧同样有限制。16 个逻辑 CPU 里,payload 进程的亲和掩码是 0xea00,即只能用第 9、11、13、14、15 号 CPU,且与系统服务共享。开发者实测 llama.cpp 默认的每物理核一线程加忙等轮询(--poll 50)会饿死系统服务,导致主机两次自动关机,最终打补丁把默认线程数降到可用 CPU 数减二并关闭轮询。SMT 兄弟线程的排布也有讲究:14、15 号 CPU 是同一个物理核的两半,9、11、13 号则与 payload 之外的线程共享物理核,绑核策略必须避开这些坑。

性能实测:21 token/秒的代价与上限

官方文档给出的实测数据如下表:

模型量化体积生成速度
Qwen 3.5 0.8BQ4_K_M0.5 GB207 token/秒
Qwen 3.5 9BQ4_K_M5.3 GB55 token/秒
Qwen 3.8 27BUD-Q2_K_XL9.2 GB21 token/秒(短提示词),9 token/秒(371 token 长提示词后)

27B 模型加载需要 82 秒,提示词处理 35-50 token/秒。这个成绩对应的是 2bit 级别量化,token 生成速度近似等于内存带宽除以每 token 激活字节数,稠密 27B 模型在 2-3bit 下每 token 要读 7-9GB 权重,MoE 模型(如 3B 激活的 35B-A3B)每 token 只读约 1GB,同一硬件上会快数倍。

2bit 量化的质量代价在 Hacker News 讨论区被反复提及:Qwen3.8-27B 本身能力约在 Opus 4.6 量级,但 2bit 会带来明显劣化,且这个模型需要大量推理时计算(中高难度问题常要烧掉数万 token 思考),在每秒 20 token 的速度下等待时间会拉得很长。讨论区也有人算过另一笔账:一台 PS5 满载功率约 86W,每天 0.7 美元电费可以产出约 200 万 token,按 API 价格折合约 3.5 美元,对于闲置主机来说是笔划算的常驻服务。经济性争论同样存在:600 美元的 PS5 与 385 美元的 16GB 迷你 PC 相比后者更便宜,但 RDNA 2 GPU 的算力高出迷你 PC 集显一个数量级,跑 LLM 时 GPU 和内存带宽才是瓶颈,内存容量相等并不意味着推理体验相当。

工程细节:换模型要自杀重启

PS5LM 有一批只可能在这种边缘平台上踩到的坑,官方 CONSOLE.md 文档逐一记录了根因。

换模型时应用会整个重启自己:写一个选择文件到 /data/PS5LM/model.txt,然后调用 sceSystemServiceLoadExec 让系统替换当前进程。原因是在运行中的应用里卸载模型后,GPU 内存池不会完全归还(实测 27B 模型卸载后 11.01GiB 空闲只剩 5.77GiB),下一个模型的 KV cache 就放不下了,重启进程是最干净的恢复方式。

后台 payload 的内存会被系统换出到磁盘:浏览器在前台时,一个 600MB 模型被换到只剩 6MB 常驻,下次请求以 0.3 token/秒的速度慢慢换回来。解法是 mlock 锁页,Qwen3.5 2B 从 0.9 提速到 8.5-9.2 token/秒;但锁 2.7GB(Qwen3.5 4B)直接把主机冻死,因为锁定的页面挤占了主屏幕系统进程的内存池,所以 PS5LM 锁所有模型但拒绝超过 1.6GB 的文件。

下载也有 PS5 特有的坑:索尼的 libSceHttp2 库在 payload 里无法发请求,PS5LM 改用 cpp-httplib 加 mbedTLS;内核把 SO_RCVBUF 上限压到 64KB,HF CDN 延迟 150ms 时单连接只有 0.9MB/s,应用改用 16 连接并行拉 8MiB 分片,达到 12.5MB/s。

原生应用的兼容层更琐碎:SDK stub 里只存在于 libScePosixForWebKit 的符号(isatty、fork、readlink 等)在 title 里解析为空指针,llama.cpp 的日志初始化会直接跳到地址 0,PS5LM 在 compat_app.c 里逐个补实现;SDK fork 的 getaddrinfo 永远失败,需要手写数字解析版本;没有 HOME 环境变量,llama.cpp 找缓存目录会抛异常;C++ 异常和 RTTI 默认关闭,为 llama.cpp 必须显式打开。电视上的仪表盘界面用 ps5-homebrew-ui 通过 ps5-opengl 绘制,与 RADV 共存于同一个 title 里时,4399 个符号名冲突,解决方案是把 GL 栈链接成单对象只暴露 GL/EGL API 全局,sceAgcInit 只跑一次(--wrap)。屏幕本身吃掉约 0.35GiB 内存池。

生态位:站在三个前身项目肩上

PS5LM 不是从零开始。README 致谢里列出了技术血缘:ProsperoAI(2026 年 9 月,GPL-3.0)率先在 PS5 GPU 上跑 LLM,手写 AGC 内核跑 Qwen3.5 9B 到 30 token/秒,但每个模型、每个量化都要重写内核,只支持 Q4_0;PS5_Vulkan(Mihawk-99)给 PS5 移植了两套 Vulkan 驱动,现在主力是 RADV(Mesa 26.2 的 AMD 驱动加 PS5 winsys),报告 Vulkan 1.4,shader 用 ACO 在主机上即时编译;ps5-homebrew-ui 提供电视 UI 框架。PS5LM 的增量在于把这套栈接到 llama.cpp 的 ggml-vulkan 后端,从而继承整个 GGUF 生态:任意架构、任意量化、HuggingFace 直下、OpenAI 与 Anthropic 双 API 兼容(Claude Code 可以直连),加上为电视场景做的手柄操作和温度功耗监控。

RADV on PS5 当前缺 cooperative matrix 和加速整数点积,矩阵乘法走 fp16 shader,推理性能还有后续挖掘空间。社区对这类项目的可持续性也有清醒认识:利用链不持久、每个固件版本都要重新适配、索尼随时可能收紧,作为 400 美元档 448GB/s 带宽的实验平台,它已经让「客厅 AI 服务器」成为可复现的现实。

上手门槛与适用边界

想复现需要:7.00-13.60 固件的 PS5(已越狱或愿意越狱),FTP 拷入应用目录,加载 kstuff-lite、etaHEN、ShadowMountPlus 三个必备 payload,elfldr(温度功耗数据)和 ftpsrv(传输)为推荐项。模型放入 /data/PS5LM/models 或 USB 盘,应用内可直接从 HuggingFace 下载。使用侧把它当作局域网 API 服务器:笔记本、手机、编码工具指向 http://主机IP:8081 即可,已加载的模型响应任何模型名的请求。

需要明确的是这件事的定位:越狱主机不违反刑法,但会失去官方在线服务与保修,14.00 固件用户当前无从下手;2bit 量化下 27B 模型的输出质量有可见折损,把它当作主力生产模型并不现实。这个项目当下最实际的价值,是给本地推理爱好者提供了一台价格敏感、带宽规格极高的玩具,以及一份如何在一台没有公开 GPU API 的封闭主机上把开源推理栈完整落地的工程档案。