rwkv.cpp
CPU上高效运行RWKV模型,支持INT4/5/8量化,占用低至1.5GB
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
CPU上高效运行RWKV模型,支持INT4/5/8量化,占用低至1.5GB
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
场景:深夜,工位上跑着 7B 参数的 RWKV v5 模型,内存占用 1.5GB,每秒能吐出十几个 token——这不是云端 GPU,是一台普通开发机。rwkv.cpp 正在把"大模型必须靠显卡"这个观念一点点拆掉。
RWKV(发音"RuKaV")是一个大语言模型架构,2023 年由独立开发者 BlinkDL 提出并发表论文(后被 EMNLP 2023 接收)。它最大的特点,是把 Transformer 的高性能和 RNN 的低显存需求合二为一:不需要 O(n²) 的自注意力机制,只用上一个时间步的状态就能计算下一个 token,推理时显存占用恒定,不随上下文长度增长。
rwkv.cpp 则是 RWKV 的 C++ 实现,基于 ggml(ggerganov/ggml)开发,核心目标只有一个:在 CPU 上高效运行 RWKV 模型。

| 精度 | 困惑度(169M) | 1.5B 延迟(ms) | 文件大小(1.5B) | 适用场景 |
|---|---|---|---|---|
| FP32 | 15.623 | 198 | 5.64 GB | 基准精度 |
| FP16 | 15.623 | 117 | 2.82 GB | 精度优先 |
| Q8_0 | 15.652 | 89 | 2.13 GB | 均衡之选 |
| Q5_1 | 15.851 | 81 | 1.68 GB | 内存敏感 |
| Q4_0 | 17.507 | 76 | 1.53 GB | 极致压缩 |
数据来源:4C/8T x86 CPU + AVX2 + 4 线程。
从数据可以看出:Q4_0 的文件体积只有 FP32 的 27%,延迟降低 62%,但困惑度仅上升 12%。对于 1.5B 规模的模型,这个交换比相当划算。
RWKV 的核心计算单元是一个叫 WKV(Weighted Key-Value)的递归算子。相比 Transformer 的 Attention 机制,WKV 的时间复杂度为 O(n),且不涉及矩阵乘法之外的大量运算,特别适合 CPU 的 SIMD 指令(AVX2/AVX512)发挥。rwkv.cpp 在 rwkv_operators_wkv_v7.inc 中针对 v7 版本架构做了专项优化。
rwkv.cpp/
├── rwkv.cpp / rwkv.h # C 核心库(入口)
├── rwkv_*.inc # 各模块实现(加载/算子/量化/错误处理)
├── ggml/ # ggml 子模块(计算图)
├── python/rwkv_cpp/ # Python 封装
│ ├── rwkv_cpp_model.py # RWKVModel 类
│ └── rwkv_cpp_shared_library.py
├── tests/ # 单元测试
└── docs/ # cuBLAS/hipBLAS 指南
Python 封装层非常薄,核心就一个 RWKVModel 类:加载模型 → 输入 token → 获取 logits → 循环推理。使用方式类似 llama.cpp 的 Python bindings,但代码更简洁。
rwkv.cpp 并不只是"纯 CPU 方案"。它支持 cuBLAS(NVIDIA)和 hipBLAS(AMD)加速矩阵乘法运算,其他操作仍在 CPU 执行。以 NVIDIA RTX 3060 Ti + RWKV-4-Pile-169M 为例:
这意味着:如果你有一张消费级显卡,可以让 rwkv.cpp 把计算密集层卸载到 GPU,内存和速度同时受益。
# 1. 克隆(含子模块)
git clone --recursive https://github.com/RWKV/rwkv.cpp.git
cd rwkv.cpp
# 2. 预编译库(推荐)或 cmake 编译
# Linux: 下载 Release 中的 librwkv.so
# Windows: 下载 Release 中的 rwkv.dll
# 3. 下载模型并转换
python python/convert_pytorch_to_ggml.py ~/RWKV-4-Pile-169M.pth ~/rwkv-169M.bin FP16
python python/quantize.py ~/rwkv-169M.bin ~/rwkv-169M-Q4_0.bin Q4_0
# 推理
python python/generate_completions.py ~/rwkv-169M-Q4_0.bin
from rwkv_cpp import RWKVModel
from rwkv_cpp_shared_library import load_shared_library
lib = load_shared_library("path/to/librwkv.so")
model = RWKVModel(lib, "model.bin", thread_count=4)
# tokenize -> eval -> logits -> sample -> 循环
convert_pytorch_to_ggml.py 转换后才能使用RWKV 架构自 2023 年提出以来,已发展至 v7 版本,被 LF AI & Data Foundation 接纳为孵化项目,社区活跃度持续上升。rwkv.cpp 作为 RWKV 的 CPU 推理引擎,让"在 MacBook 上跑 7B 模型"成为现实——这是 llama.cpp 在 LLaMA 生态做到的事情,rwkv.cpp 在 RWKV 生态复制了一遍。
更重要的是,RWKV 的"线性 Transformer"思路正在影响更多项目。类似 Mamba、RetNet 等新架构都在探索 attention 的替代方案,RWKV 是其中工程化最成熟的一个。