跳到主内容
快讯直播
AI智模界
教程

破解 PS5 原生跑 llama.cpp:GGUF 导入与吞吐实测

这篇文章要做的,是把一台已经完成破解的 PS5 当成一台 x86 主机来用:交叉编译一份静态链接的 llama.cpp,把量化好的 GGUF 模型传进主机,在它自带的 Zen 2 CPU 上原生跑推理,最后用 llama-bench 和一段日志脚本量出 prefill / decode 吞吐,并观察持续满载下的温度与稳定性。

做完之后你会得到三个东西:一个能在 PS5 上直接执行的 llama-cli / llama-server 二进制;一份可复现的模型导入流程(U 盘或 FTP 都行);一张属于你自己机器的性能表——包括不同线程数下的 tok/s、上下文长度对内存的占用、以及连续跑十几分钟后的温度与降频表现。

需要提前说明的是:这条路只能走 CPU 后端。破解环境下的用户态没有可用的 GPU 计算驱动,Vulkan / CUDA 都不必考虑,所有算力都来自那 8 个 Zen 2 核心和共享内存。所以期望值要放对位置:它适合跑 7B 级别的 4-bit 量化模型做实验,不适合当生产推理服务。

前置条件清单

开始之前,逐条对一遍,缺哪条都会卡在半路:

  • 一台已完成破解、能加载自制 payload 的 PS5。具体哪些固件版本可破、用哪个入口(网页 / 蓝光 / 其他),以社区当前公开的支持情况为准,这里不写死版本号。
  • 一个能提供文件传输和命令执行的 payload 组合,常见的是 FTP 服务 + 一个能起 shell 或直接执行 ELF 的加载器。端口和挂载点在 payload 的屏幕输出里会打印,记下来。
  • 一台 Linux 宿主机(x86_64),用于交叉编译。原生在 PS5 上编译不现实——没有包管理器,也没有完整工具链。
  • 社区维护的 PS5 payload 开发 SDK(含 FreeBSD 系 sysroot 与交叉工具链)。目录结构和 CMake 文件名随 SDK 版本变化,以该项目当前文档为准。
  • 一个 GGUF 格式的量化模型,建议先从 3B~8B 的 Q4_K_M 起步。
  • 一个 exFAT 格式的 U 盘(可选,FTP 慢的时候很有用)。
  • 外置红外测温枪或至少能测出风口温度的温度计。用户态通常读不到 APU 内部传感器,别指望软件读数。

风险提示放这里:破解会影响保修、可能导致主机不可用、联网登录账号存在被封的风险。整个流程建议全程离线,不要登录 PSN。

第一步:准备交叉编译环境

先确认 SDK 能用。解压后找工具链前缀,通常形如 $PS5_SDK/bin/x86_64-*-gcc,再确认 SDK 里有没有现成的 CMake toolchain 文件:

```bash

ls "$PS5_SDK"/bin | head

find "$PS5_SDK" -name '*toolchain*.cmake'

```

把 SDK 路径写进环境变量,后面所有命令都依赖它:

```bash

export PS5_SDK=/opt/ps5-payload-sdk

export PATH="$PS5_SDK/bin:$PATH"

```

如果 SDK 没有提供 toolchain 文件,就自己写一个最小的,关键是 CMAKE_SYSTEM_NAME 和 CMAKE_SYSROOT 两行,让 CMake 走交叉编译分支:

```cmake

ps5-toolchain.cmake

set(CMAKE_SYSTEM_NAME Generic)

set(CMAKE_SYSTEM_PROCESSOR x86_64)

set(CMAKE_SYSROOT "$ENV{PS5_SDK}/sysroot")

set(CMAKE_C_COMPILER "$ENV{PS5_SDK}/bin/x86_64-unknown-freebsd13-clang")

set(CMAKE_CXX_COMPILER "$ENV{PS5_SDK}/bin/x86_64-unknown-freebsd13-clang++")

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)

set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

```

编译器名字按你 SDK 里实际存在的改,不要照抄。

第二步:编译 llama.cpp(CPU 后端、静态链接)

拉源码,然后关掉一切 GPU 后端和网络依赖。这一步最容易踩的坑是默认配置会去拉 curl、编译动态库,到了 PS5 上直接跑不起来。

```bash

git clone https://github.com/ggml-org/llama.cpp

cd llama.cpp

cmake -B build-ps5 \

-DCMAKE_TOOLCHAIN_FILE="$PS5_SDK/cmake/ps5-toolchain.cmake" \

-DCMAKE_BUILD_TYPE=Release \

-DBUILD_SHARED_LIBS=OFF \

-DGGML_NATIVE=OFF \

-DGGML_VULKAN=OFF \

-DGGML_CUDA=OFF \

-DGGML_METAL=OFF \

-DLLAMA_CURL=OFF \

-DLLAMA_BUILD_TESTS=OFF \

-DCMAKE_C_FLAGS="-march=znver2 -mtune=znver2" \

-DCMAKE_CXX_FLAGS="-march=znver2 -mtune=znver2"

cmake --build build-ps5 --target llama-cli llama-bench llama-server -j"$(nproc)"

```

几个参数值得解释:

  • GGML_NATIVE=OFF 必须关。交叉编译时它会把宿主机的 CPU 特性写进二进制。
  • -march=znver2 对应 Zen 2 微架构。不要加 AVX-512 相关选项,Zen 2 不支持 AVX-512,编译出来会直接 illegal instruction。
  • BUILD_SHARED_LIBS=OFF 保证产出单个静态 ELF,避免在 PS5 上找不到 .so。

编译完检查一下产物:

```bash

file build-ps5/bin/llama-cli

```

理想输出是静态链接的 x86-64 ELF。如果显示 dynamically linked,回头把 -DBUILD_SHARED_LIBS=OFF 和 -DLLAMA_CURL=OFF 再确认一遍。

第三步:选模型并做量化准备

模型选择直接决定体验。给一个粗略的估算方法:CPU 推理的 decode 速度上限大致等于「有效内存带宽 ÷ 每生成一个 token 需要读取的字节数」,而后者约等于模型文件的体积。也就是说,模型越大,每秒 token 数越低,而且是近似反比关系。

举个例子:一个 4 GB 的 Q4 文件,如果可用带宽按 40~50 GB/s 量级估,理论上限就在 10 tok/s 上下,实际还要打折。这只是一个心算上限,不是实测结论,实际数字以你自己跑出来的为准。

建议路径:先用 1B~3B 的 Q4_K_M 把流程跑通,再换 7B~8B 的 Q4_K_M 做正经测试。Q5、Q6 在 PS5 上意义不大——内存吃紧,速度掉得明显。

宿主机上先校验文件完整性,避免传到一半断掉:

```bash

sha256sum model.Q4_K_M.gguf | tee model.sha256

```

第四步:把二进制和模型传进 PS5

两条路,选一条。

FTP 方式,适合小文件、改代码后快速迭代。端口以 payload 屏幕提示为准:

```bash

PS5_IP=192.168.1.50

PS5_FTP_PORT=2121 # 以 payload 实际输出为准

curl -T build-ps5/bin/llama-cli "ftp://$PS5_IP:$PS5_FTP_PORT/data/llama/llama-cli"

curl -T build-ps5/bin/llama-bench "ftp://$PS5_IP:$PS5_FTP_PORT/data/llama/llama-bench"

```

U 盘方式,适合传模型。exFAT 格式,插上后挂载点常见为 /mnt/usb0,同样以 payload 输出为准:

```bash

ls /mnt/usb0

df -h | grep usb

```

传完在 PS5 上再校验一次哈希,能排掉绝大多数「文件传输损坏导致加载失败」的问题:

```bash

sha256sum /mnt/usb0/models/model.Q4_K_M.gguf

chmod +x /data/llama/llama-cli

```

第五步:冒烟测试

先别急着上大模型。用最小上下文、最小生成长度确认二进制能跑:

```bash

/data/llama/llama-cli \

-m /mnt/usb0/models/model.Q4_K_M.gguf \

-p "你好,请用一句话介绍你自己。" \

-n 32 \

-c 512 \

-t 6 \

--no-warmup

```

参数含义:-n 生成 token 数,-c AI 词典:上下文窗口">上下文窗口,-t 线程数。这里故意用 6 而不是 8——留一两个核给系统和 payload,很多时候反而更快,后面实测会验证这一点。

如果这一步能出字,说明工具链、静态链接、模型格式三关都过了。

第六步:起 HTTP 服务(可选)

想从局域网里用浏览器或任意 OpenAI 兼容客户端访问,用 llama-server:

```bash

/data/llama/llama-server \

-m /mnt/usb0/models/model.Q4_K_M.gguf \

-c 2048 \

-t 6 \

--host 0.0.0.0 \

--port 8080

```

然后在同网段电脑上访问 http://<PS5_IP>:8080。注意这是纯内网实验,别把端口暴露到公网。

第七步:吞吐实测

用 llama-bench 分别测 prefill(-p)和 decode(-n),并对比不同线程数。把结果重定向到文件,方便后面做表。

```bash

cd /data/llama

for T in 4 5 6 7 8; do

./llama-bench \

-m /mnt/usb0/models/model.Q4_K_M.gguf \

-p 128 -n 64 -t "$T" -r 3 \

>> bench_t${T}.txt 2>&1

done

```

-r 3 是重复三次取平均,减少噪声。跑完把每个文件里的 pp(prefill,tokens/s)和 tg(text generation,tokens/s)抄出来做对比。

再单独测一下 mmap 开关的影响,这在内存受限环境里差别可能不小:

```bash

./llama-bench -m /mnt/usb0/models/model.Q4_K_M.gguf -p 128 -n 64 -t 6 -r 3

./llama-bench -m /mnt/usb0/models/model.Q4_K_M.gguf -p 128 -n 64 -t 6 -r 3 --no-mmap

```

温度与稳定性观察。持续满载 15 分钟以上,用测温枪每隔两分钟记录一次出风口温度和机身顶部温度,同时记录 tok/s 是否随时间下滑——下滑是降频的直接信号。

```bash

在 PS5 上跑一个长任务,边跑边记时间戳

date +%s > stress.log

./llama-cli -m /mnt/usb0/models/model.Q4_K_M.gguf \

-p "写一段 800 字的产品说明。" -n 512 -c 2048 -t 6 >> stress.log 2>&1

date +%s >> stress.log

```

如果你用的 payload 恰好暴露了传感器节点(不同 payload 差异很大,以实际为准),可以直接读;读不到就用外置测温,别在软件读数上纠结。

常见坑与排错

一执行就 illegal instruction。 十有八九是编译时开了 CPU 不支持的指令集。确认 -march=znver2,确认没有任何 AVX-512 选项,确认 GGML_NATIVE=OFF。

报找不到共享库。 说明没静态链接。回头检查 BUILD_SHARED_LIBS=OFF,并用 file 命令确认产物。

加载模型时直接崩或被杀。 模型体积超过了用户态可用内存。破解环境能拿到的内存远小于标称值,而且被 payload 本身占用一部分。换更小的量化、把 -c 从 2048 降到 512 先跑通。

速度比预期低很多。 依次查:线程数是否为 6~7 而非 8;是否在跑之前刚传完大文件(缓存未稳定);--no-mmap 是否有改善;上下文是否设得过大导致 KV cache 挤占。

FTP 传输后哈希对不上。 大文件用 FTP 容易断,改用 U 盘。传完必校验。

跑几分钟后变慢。 散热问题。PS5 的风扇曲线是固定的,长时间纯 CPU 满载会让 APU 持续高温。确保四周留出空间,别塞在电视柜里测。

llama-server 起来了但局域网访问不通。 检查 --host 0.0.0.0、检查两台设备是否同网段,以及 PS5 的网络配置是否走的有线/无线同一出口。

下一步建议

流程跑通之后,建议按这个顺序继续:

1. 建自己的性能表。把模型尺寸、量化等级、线程数、上下文长度、pp/tg 吞吐、出风口温度记成 CSV。做过一次就知道这台机器的能力边界在哪,后面换模型不用重新摸索。

2. 做量化梯度对比。同一个模型分别跑 Q4_0、Q4_K_M、Q5_K_M,看速度掉了多少、输出质量提升多少,找出性价比拐点。

3. 接一个本地前端。llama-server 兼容 OpenAI 接口格式,局域网里用任意支持自定义 base URL 的客户端都能接,把它变成一个离线可用的内网小助手。

4. 试更小的专用模型。在 CPU-only 场景下,参数小、词表合理的模型往往比「大而慢」的体验更好。

5. 保持离线。这套环境只适合做技术验证,别登录账号、别挂公网端口。想长期跑服务,还是回到普通 PC 或服务器上更省心。

整个过程的核心不是「能不能跑」,而是「能不能量出可信的数字」。把交叉编译的坑填平、把模型完整送进去、把线程数和温度这两个变量控制住,你就得到了一份属于自己的、而非别人截图里的实测结果。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。