@no_stp_on_snek: Gated delta net prefill 之前还在逐个 token 处理。现在 RDNA3 用 WMMA 一次处理 16 个 token 的分块。状态保留在……

X AI KOLs Timeline 工具

摘要

ROCmFPX 的 gated delta net prefill 内核已优化为通过 RDNA3 WMMA 处理 16 个 token 的分块,而非逐个 token 处理,将每次 512-token 调用的延迟从 772µs 降至 610µs,各配置下 prompt 处理吞吐量提升约 2-4%,Strix Halo 的测试仍在进行中。

🚨 Gated delta net prefill 之前还在逐个 token 地处理。 现在 RDNA3 通过 WMMA 以 16 个 token 为一个分块进行处理。状态保留在 F32 累加器中。标量门控(scalar gate),head dim 128,单序列。KDA 及其他 head dim 回退到旧路径。Snapshot 尾部仍使用旧内核。 ⚡ 每次 512-token 调用:772 µs → 610 µs ⚡ 主分支 pp4096,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 的测试也还在继续……
查看原文
查看缓存全文

缓存时间: 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全部
CANNAscend NPU
CUDANvidia GPU
HIPAMD GPU
HexagonSnapdragon
IBM zDNNIBM Z & LinuxONE
MUSAMoore Threads GPU
MetalApple Silicon
OpenCLAdreno GPU
OpenVINO [进行中]Intel CPU、GPU 和 NPU
RPC (https://github.com/ggml-org/llama.cpp/tree/master/tools/rpc)全部
SYCLIntel GPU
VirtGPUVirtGPU APIR
VulkanGPU
WebGPU全部
ZenDNNAMD CPU

文档

工具

开发

贡献

  • 贡献者可以提交 PR
  • 根据贡献情况邀请协作者
  • 维护者可以向 llama.cpp 仓库的分支推送并将 PR 合并到 master 分支
  • 非常感谢任何关于管理 issue、PR 和项目方面的帮助!
  • 阅读 CONTRIBUTING.md 了解更多信息

致谢

  • yhirose/cpp-httplib (https://github.com/yhirose/cpp-httplib)
    • 单头文件 HTTP 服务器,被 llama-server 使用
    • MIT 许可证
  • 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++ 的单头文件进程启动方案
    • 公有领域

相似文章