@no_stp_on_snek: Gated delta net prefill 之前还在逐个 token 处理。现在 RDNA3 用 WMMA 一次处理 16 个 token 的分块。状态保留在……
摘要
ROCmFPX 的 gated delta net prefill 内核已优化为通过 RDNA3 WMMA 处理 16 个 token 的分块,而非逐个 token 处理,将每次 512-token 调用的延迟从 772µs 降至 610µs,各配置下 prompt 处理吞吐量提升约 2-4%,Strix Halo 的测试仍在进行中。
查看缓存全文
缓存时间: 2026/10/10 16:53
🚨 Gated delta net 的 prefill 仍然在逐个 token 处理。RDNA3 现在支持在 WMMA 上进行 16-token 分块处理。状态保留在 F32 累加器中。标量门控,head dim 128,单序列。KDA 和其他 head dims 回退到旧路径。快照尾部仍使用旧内核。⚡ 772 μs → 610 μs 每 512-token 调用 ⚡ pp4096 on main, ub 1024:850 → 882–884 (+3.7%)。ub 512:645–662 → 664–665。⚡ 结合其他已打开的 HIP PR,pp8192 ub 2048 +3.5%,ub 8192 +2–4% ✅ KL 0.016301 / 95.99% → 0.016307 / 95.96%。https://github.com/ROCmFPX/ROCmFPX/pull/45… @Italianclownz @AIatAMD Strix Halo 的测试仍在继续…
ROCmFPX/ROCmFPX
来源: https://github.com/ROCmFPX/ROCmFPX
ROCmFPX — 极致性能。开放之力。
ROCmFPX llama.cpp
这个公共下游仓库在跟踪上游 llama.cpp 当前进展的同时,开发面向 AMD GPU 的 ROCmFPX 权重格式系列。Vulkan 支持保持正常启用;HIP 和 CPU 同样是受支持的构建目标。现有的 NVFP4 GGUF 张量可以原生加载,在使用 NVFP4 量化预设完成 NVFP4 模型后仍保持位精确。
Carlo Pasquale (Charlie12345) 是 ROCmFPX 格式系列的创建者和创始人,也是 ROCmFP3、ROCmFP4、ROCmFP6 和 ROCmFP8 的创始人。参见 ROCmFPX 文档、NOTICE,以及带有 ROCmFPX 版权声明的相同上游 MIT 许可证条款。
贡献者与历史
ROCmFPX 保留了上游 llama.cpp 谱系和公共遗留 ROCmFPX 谱系。原始提交作者和提交 ID 仍然可追溯。遗留谱系通过仅含祖先关系的合并连接,其源树与当前 ROCmFPX 树完全相同,因此遗留代码不会替换当前实现。
- 当前 ROCmFPX 贡献者 (https://github.com/ROCmFPX/ROCmFPX/graphs/contributors)
- 遗留 ROCmFPX 贡献者 (https://github.com/charlie12345/ROCmFPX/graphs/contributors)
- 上游 llama.cpp 贡献者 (https://github.com/ggml-org/llama.cpp/graphs/contributors)
GitHub 贡献者显示可能会滞后于仓库历史。完整的提交级别作者记录也可以通过 git shortlog -sne main 获取。
当前已验证的格式为实验性。ROCmFP2/3/4/6/8 的磁盘布局已冻结以保证兼容性;新的内核和量化器工作必须保持其编码大小和语义不变。
ROCmFP2 张量类型标识
规范双尺度 S40 ROCmFP2 使用 GGUF 张量类型 111。其负载仍然精确为每 32 个权重 10 字节(2.5 bpw);只有张量类型标签发生了变化。遗留类型 107 被保留为歧义类型,因为双尺度 S40 和仿射 code * scale - offset 布局都曾以相同的 ID 和块大小输出。ROCmFPX 拒绝类型 107,而不是猜测并静默损坏模型。新的量化会自动写入类型 111。
要审核较旧的文件,请运行:
scripts/rocmfpx/retag-legacy-rocmfp2.py MODEL.gguf
只有在文件来源确认其使用双尺度 S40 时,才制作备份并就地重标记其张量头:
scripts/rocmfpx/retag-legacy-rocmfp2.py MODEL.gguf \
--layout s40-dual-scale-v1 --apply
该工具不会检查或推断布局,因为从字节数据上无法区分这两种解释。不要将其用于仿射 ROCmFP2 文件。
可选的 Charlie Vulkan 插件
可选的 ROCmFPXVulkan 扩展 将经典的 Charlie 时代 ROCmFP4 Vulkan 路径保留为独立后端。它不会替换或补丁 llama.cpp 的常规 Vulkan0 后端。该扩展默认禁用,仅在构建并显式加载后才以 ROCmFPXVulkan0 出现。
在 Linux 上同时构建常规 Vulkan 后端和可选扩展:
cmake -S . -B build-rocmfpx-vulkan -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DGGML_VULKAN=ON \
-DROCMFPX_VULKAN_PLUGIN=ON
cmake --build build-rocmfpx-vulkan \
--target llama-cli rocmfpx-vulkan-plugin -j
加载插件并选择其设备:
export ROCMFPX_PLUGIN_PATH="$PWD/build-rocmfpx-vulkan/bin/rocmfpx-vulkan-plugin.so"
build-rocmfpx-vulkan/bin/llama-cli --list-devices
build-rocmfpx-vulkan/bin/llama-cli \
-m /absolute/path/to/model.gguf \
-dev ROCmFPXVulkan0 -ngl 999
保持 rocmfpx-vulkan-plugin.so 和其同级文件 libggml-rocmfpx-vulkan.so 在一起。两个文件必须来自同一构建和 ROCmFPX 提交。--list-devices 应显示 Vulkan0 和 ROCmFPXVulkan0;移除 ROCMFPX_PLUGIN_PATH 可返回常规后端。
参见 扩展指南 获取匹配的 ROCmFP4 基准测试和验证限制。
插件系统
ROCmFPX 插件 ABI v1 允许受信任的原生共享库注册标准 ggml 后端,或接收模型打开和模型关闭通知,用于 PLE、KV 检查点、重打包缓存和专家流式传输附属文件。
在启动 ROCmFPX 工具之前,将 ROCMFPX_PLUGIN_PATH 设置为插件文件或目录。在 Linux 和 macOS 上使用 : 分隔条目,在 Windows 上使用 ;。目录仅扫描一次,非递归,按排序顺序;工作目录永远不会被自动搜索。
一个最小的 C 插件如下所示:
#define ROCMFPX_PLUGIN_BUILD
#include "rocmfpx-plugin.h"
static int on_load(void) { return 0; }
static const struct rocmfpx_plugin_v1 plugin = {
ROCMFPX_PLUGIN_ABI_VERSION,
sizeof(struct rocmfpx_plugin_v1),
"example-sidecar",
"0.1.0",
ROCMFPX_PLUGIN_CAP_SIDECAR,
on_load,
0,
0,
0,
};
ROCMFPX_PLUGIN_EXPORT const struct rocmfpx_plugin_v1 *
rocmfpx_plugin_query(
uint32_t host_abi_version,
const struct rocmfpx_plugin_host_v1 * host)
{
if (host_abi_version != ROCMFPX_PLUGIN_ABI_VERSION ||
!host ||
host->abi_version != ROCMFPX_PLUGIN_ABI_VERSION) {
return 0;
}
return &plugin;
}
在 Linux 上构建并加载:
cc -shared -fPIC -I/path/to/ROCmFPX/include \
example-sidecar.c -o example-sidecar.so
ROCMFPX_PLUGIN_PATH="$PWD/example-sidecar.so" \
/path/to/ROCmFPX/build/bin/llama-cli --list-devices
每个插件必须导出 rocmfpx_plugin_query,验证 ABI,返回静态的、带版本的描述符,并保持该描述符及其字符串在卸载前有效。后端插件在查询期间复制 backend_load 和 plugin_path,然后从 on_load 注册其对应的 ggml 后端。附属文件使用 on_model_open 和 on_model_close,并按 model_id 标识其状态。ABI v1 提供发现、后端注册和生命周期通知;仅靠能力标志无法拦截张量或 token 生成。
插件以原生代码运行,拥有与 ROCmFPX 相同的权限,因此仅加载您信任的库。
参见完整的 插件和附属文件 ABI 指南 以及已测试的 rocmfpx-test-plugin 示例。
Windows AMD 多 GPU 桥接
拥有两块 AMD GPU 的 Windows 用户可以评估 Charlie12345 的外部 Windows AMD Multi-GPU Bridge (https://github.com/charlie12345/windows-amd-vllm-multigpu)。
对于 ROCmFPX 和 llama.cpp,请使用其专用的 Windows 安装指南 (https://github.com/charlie12345/windows-amd-vllm-multigpu/blob/main/docs/install-llama-rocmfpx.md),而非单独的 vLLM 适配器说明。
该桥接保持 ROCmFPX 源树不变。它为现有的 HIP 集合通信接口提供外部 roc::rccl CMake 包,因此请使用 GGML_HIP_RCCL=ON 构建 ROCmFPX,将 rccl_DIR 指向已安装的桥接,并使用桥接的 run-with-llama-plugin.ps1 启动器。
已测试的 Windows 路径还要求 GGML_CUDA_NO_PEER_COPY=ON;请按照外部指南匹配相应的 ROCm 版本、GPU target、DLL 布局、健康探针和模型特定的启动标志。
尽管启动器名称如此,此传输层不通过 ROCMFPX_PLUGIN_PATH 加载,也不是 ROCmFPX ABI v1 插件。ABI v1 可以注册 ggml 后端或接收模型生命周期通知,但无法注入链接时 RCCL 提供者或拦截集合通信。因此将 ROCMFPX_PLUGIN_PATH 指向 rccl.dll 不会有任何效果。
当前的外部包设计是上游安全的集成方式:正常更新 ROCmFPX,然后针对桥接包配置全新的 HIP 构建。
该桥接为实验性、仅源码形式,目前仅在其维护者列出的硬件和修订版本上验证。在加载大型模型之前请验证其小型对等性和传输探针;可选择的 GPU target 不等同于运行时已验证的配置。
llama.cpp
llama
C/C++ 中的 LLM 推理
License: MIT (https://opensource.org/licenses/MIT)
Release (https://github.com/ggml-org/llama.cpp/releases?q=tag:v0)
Nightly (https://github.com/ggml-org/llama.cpp/releases?q=b)
Server (https://github.com/ggml-org/llama.cpp/actions/workflows/server.yml)
Docker (https://github.com/ggml-org/llama.cpp/actions/workflows/docker.yml)
Winget (https://github.com/ggml-org/llama.cpp/actions/workflows/winget.yml)
ggml (https://github.com/ggml-org/ggml) / ops (https://github.com/ggml-org/llama.cpp/blob/master/docs/ops.md) / 维护者 PR (https://github.com/ggml-org/llama.cpp/issues?q=is%3Apr%20is%3Aopen%20draft%3AFalse%20(author%3Argerganov%20OR%20author%3AKitaitiMakoto%20OR%20author%3Adanbev%20OR%20author%3Aaldehir%20OR%20author%3Amax-krasnyansky%20OR%20author%3ACISC%20OR%20author%3Aggerganov%20OR%20author%3Aam17an%20OR%20author%3Ajhen0409%20OR%20author%3Abartowski1182%20OR%20author%3Anikwen%20OR%20author%3Ahipudding%20OR%20author%3Aravi9%20OR%20author%3AServeurpersoCom%20OR%20author%3Apwilkin%20OR%20author%3Areeselevine%20OR%20author%3Angxson%20OR%20author%3Ajeffbolznv%20OR%20author%3Amarty1885%20OR%20author%3A0cc4m%20OR%20author%3ATitaniumtown%20OR%20author%3Aangt%20OR%20author%3AIMbackK%20OR%20author%3Aarthw%20OR%20author%3AJohannesGaessler%20OR%20author%3AORippler%20OR%20author%3Aruixiang63%20OR%20author%3Axctan%20OR%20author%3Aallozaur%20OR%20author%3Ayomaytk%20OR%20author%3Aaendk%20OR%20author%3Awine99%20OR%20author%3Agaugarg-nv%20OR%20author%3Ataronaeo%20OR%20author%3Aforforever73%20OR%20author%3Alhez%20OR%20author%3Anetrunnereve%20OR%20author%3Afairydreaming)%20sort%3Aupdated-desc) / 开发统计 (https://github.com/ggml-org/llama.cpp-dev) / llama API (https://github.com/ggml-org/llama.cpp/issues/9289) / llama-server REST API (https://github.com/ggml-org/llama.cpp/issues/9291)
快速开始
以下几种方式可以在您的机器上安装 llama.cpp:
- 访问 https://llama.app 并按照说明操作
- 使用 Docker 运行 - 参见我们的 Docker 文档
- 从发布页面下载预构建二进制文件 (https://github.com/ggml-org/llama.cpp/releases)
- 克隆本仓库从源码构建 - 参见 构建指南
安装完成后:
# 直接从 Hugging Face 下载并运行模型
llama cli -hf ggml-org/Qwen3.5-0.8B-GGUF
# 启动 OpenAI 兼容 API 服务器
llama serve -hf ggml-org/Qwen3.5-0.8B-GGUF
在 llama cli 中进行 VLM 会话
在 llama serve 上使用内置 Web UI
描述
llama.cpp 的主要目标是在各种硬件上(本地和云端)以最少的设置和最先进的性能实现 LLM(和 VLM)推理。
- 纯 C/C++ 实现,无任何依赖
- Apple Silicon 是一等公民
- 通过 ARM NEON、Accelerate 和 Metal 框架优化
- x86 架构支持 AVX、AVX2、AVX512 和 AMX
- RISC-V 架构支持 RVV、ZVFH、ZFH、ZICBOP 和 ZIHINTPAUSE
- 支持 1.5-bit、2-bit、3-bit、4-bit、5-bit、6-bit 和 8-bit 整数量化,实现更快推理和更少内存使用
- 自定义 CUDA 内核用于在 NVIDIA GPU 上运行 LLM(通过 HIP 支持 AMD GPU,通过 MUSA 支持 Moore Threads GPU)
- Vulkan 和 SYCL 后端支持
- CPU+GPU 混合推理,可部分加速超出总显存容量的模型
llama.cpp 项目构建在 ggml (https://github.com/ggml-org/ggml) 库之上。
支持的后端
| 后端 | 目标设备 |
|---|---|
| BLAS | 全部 |
| BLIS | 全部 |
| CANN | Ascend NPU |
| CUDA | Nvidia GPU |
| HIP | AMD GPU |
| Hexagon | Snapdragon |
| IBM zDNN | IBM Z & LinuxONE |
| MUSA | Moore Threads GPU |
| Metal | Apple Silicon |
| OpenCL | Adreno GPU |
| OpenVINO [进行中] | Intel CPU、GPU 和 NPU |
| RPC (https://github.com/ggml-org/llama.cpp/tree/master/tools/rpc) | 全部 |
| SYCL | Intel GPU |
| VirtGPU | VirtGPU APIR |
| Vulkan | GPU |
| WebGPU | 全部 |
| ZenDNN | AMD CPU |
文档
工具
开发
- 如何构建
- 在 Docker 上运行
- 在 Android 上构建
- 多 GPU 使用
- 性能故障排除
- GGML 技巧与诀窍 (https://github.com/ggml-org/llama.cpp/wiki/GGML-Tips-&-Tricks)
- XCFramework
- 补全
- 模型
- 发布流程
贡献
- 贡献者可以提交 PR
- 根据贡献情况邀请协作者
- 维护者可以向
llama.cpp仓库的分支推送并将 PR 合并到master分支 - 非常感谢任何关于管理 issue、PR 和项目方面的帮助!
- 阅读 CONTRIBUTING.md 了解更多信息
致谢
- yhirose/cpp-httplib (https://github.com/yhirose/cpp-httplib)
- 单头文件 HTTP 服务器,被
llama-server使用 - MIT 许可证
- 单头文件 HTTP 服务器,被
- nothings/stb (https://github.com/nothings/stb)
- 单头文件图片格式解码器,被多模态子系统使用
- 公有领域
- nlohmann/json (https://github.com/nlohmann/json)
- 单头文件 JSON 库,被各种工具/示例使用
- MIT 许可证
- mackron/miniaudio (https://github.com/mackron/miniaudio)
- 单头文件音频格式解码器,被多模态子系统使用
- 公有领域
- sheredom/subprocess.h (https://github.com/sheredom/subprocess.h)
- C 和 C++ 的单头文件进程启动方案
- 公有领域
相似文章
@no_stp_on_snek: ROCmFPX 上的静默垃圾 prefill 问题已修复。Strix Halo (gfx1151, ROCm 7.2.1) 上的统一内存 + HIP 图捕获导致……
ROCmFPX 修复了在 AMD Strix Halo (gfx1151, ROCm 7.2.1) 上统一内存与 HIP 图捕获导致 top_k 中 hipMemcpy2DAsync 未执行、使 Qwen3.8 Flash Next logits 静默变为垃圾的问题,修复后 KLD 从约 8 降至 0.005,top-1 准确率恢复到 97% 以上且基准速度不受影响。
@no_stp_on_snek:ROCmI4 的预填充阶段卡在 MMQ 上,而 ROCmFPX……在 Qwen3.8 Flash Next HC-Q8 上,除了 HC 上投影/下投影之外,每个专家和每个稠密投影都是 Q4_0_ROCMI4。
ROCmFPX 解决了预填充阶段 MMQ 阻塞问题,通过寄存器路径将 Q4_0_ROCMI4 权重反量化为 BF16 WMMA GEMM,在 Qwen3.8 Flash Next HC-Q8 上实现 ub 512 约 13%、ub 1024 约 23% 的吞吐提升,稀疏专家处理时间从约 2.3 秒降至 1.8 秒。
@no_stp_on_snek: 过去几天一直在借来的 Strix Halo(Ryzen AI… 上帮 @Italianclownz 加速他的 llama.cpp 分支 ROCmFPX
开发者帮助优化了 llama.cpp 的分支 ROCmFPX 在 AMD Strix Halo(Ryzen AI Max+ 395)上的运行速度,通过合并 16 个 PR,大幅提升了预填充和解码速度,并提高了量化精度。
@no_stp_on_snek: MTP 草稿每步都要读取 1.27 GB 的 BF16 LM head 来预测下一个 token。248K x 2560,单行 GEMV,每次草稿步骤都要读取……
MTP 投机解码的草稿 LM head 原本每步都要读取 1.27 GB 的 BF16 权重,现改为 Q4_0 量化草稿头(验证与正常解码仍用 BF16),实现约 10.6% 的 token/s 提升,且 greedy 输出 md5 完全一致。相关改动已在 ROCmFPX 的 PR #49 中提交。
strix-llama 新分支:提示词处理性能比 Vulkan 提升 21–54%,在 128k 时最高达到原版 ROCm 内核的 2.7 倍,输出质量相同
strix-llama.cpp 的 rdna35-perf 分支为 Strix Halo(Radeon 8060S)带来新的 RDNA3.5 闪存注意力与 GEMM 内核优化,提示词处理速度比 Vulkan 快 21–54%,在 128k 长上下文下最快可达原版 ROCm 的 2.7 倍,且输出质量与原版 ROCm 基本一致。