RWKV7-G0 7.2B 推理模型(Reasoning Model)正式开源发布,它很可能是迄今为止人类训练过的最强纯 RNN 语言模型。
RWKV7-G0 7.2B 是在 RWKV6-World-V3-7.6B 的基础上训练 2T tokens 的纯预训练模型,但在预训练加入了大量指令 / 对话 / 推理数据,可以解决各种推理问题。
如果需要后训练和对齐,最适合 RNN 的方式是 state-tuning,直接微调 RNN 的初始状态,相当于终极 context engineering。
模型客观指标评测
英语和多语言能力
RWKV7-G0 7.2B 的基础英语和多语言能力均强于同规模的开源模型:
eval
得益于架构和数据的提升,RWKV7-G0 7.2B 的 MMLU 准确度为 62.7%,显著超过 RWKV6-World-V3-7.6B 的 54.2%。后续我们会发布训练 8T tokens 的满血 RWKV7-G1 7.2B,目标是 MMLU 达到 70%,看齐前沿模型。
无法作弊的评测
Uncheatable Eval 是 "无法作弊的评测",它使用最新的论文和新闻文章等实时数据,评估开源大语言模型的真实建模能力和泛化能力。
RWKV7-G0 7.2B 的 Uncheatable Eval 同样显著提升,满血 8T tokens 预计超越 Llama3 8B(这里测试 2024-07 数据,后续会测新数据,并对比 Qwen2.5、Qwen3):
uncheatable-eval
模型实战:解数学题
我们发现,RWKV7-G0 7.2B 解数学题可使用 temperature top_p penalty 解码参数都为 0 的纯贪心解码,且无限复读现象较少。
但贪心解码会导致推理过程探索度不足,因此可引入随机性,例如 temperature=0.3 top_p=0.3 penalty=0。模型会自动进行多轮验算(类似 rollout),并可以自我纠错。
那么 temperature=0.6 top_p=0.6 penalty=0 等随机性更高的参数是否更好,后续我们会通过参数扫描实验评估。
例子,第一题:
math1
修改题目表述,模型换了种做法:
math2
第二题,故意将原题的 99 改为 99.1,模型一开始看错,后来成功纠正了自己:
math3
第三题,原题是计算 1 的幂,改为计算 i 的幂,增加难度:
math4
第四题,原题是 2^8 = 4^x,改为 8^x 增加难度:
math5
第五题,原题的概率是 1/5,改为 1/4 测试模型:
math6
第六题,原题是 one hat,改为 two hat(故意不加 s 复数形式)测试模型:
math7
第七题,模型有点懵,但反复验算多次后,成功确认了正确答案:
math8
结论:【纯 RNN + 纯预训练】可以得到推理模型,而且它理解了一些解题方法,可以用不同方法解决修改过的题目。
模型实战:写代码
在此我们测试用户喜闻乐见的图像输出。生成一个有一只猫的 SVG 的网页:
code
用 Three.js 创建一个旋转的 3D 红色立方体(完整代码在文末的附录中):
code-1
考虑到这是【纯 RNN + 纯预训练 + 只训练 2T tokens】,表现合理。后续更多数据的满血版会显著更强。
RNN 的抗干扰能力
最新论文 Inverse Scaling in Test-Time Compute(https://arxiv.org/abs/2507.14417)发现前沿模型在 “恶意问题”(例如带干扰项的计数、带虚假特征的回归预测,等等)会出现越想越差的情况:
Inverse Scaling in Test-Time Compute
我们发现 RWKV7-G0 7.2B 可以克服干扰,得到正确答案:
Test-Time-Compute-test
继续测试:
Test-Time-Compute-test-1
修改数字再测试:
Test-Time-Compute-test-2
可见 attention 会导致 transformer 更易受前文干扰,而 RNN 在此有优势。而且 RNN 的思考过程永远匀速,不会越想越慢。我们未来训练更大的 RNN 会更有趣。
模型下载
下载 RWKV7-G0 7.2B 模型:
Hugging Face:https://huggingface.co/BlinkDL/rwkv7-g1/tree/main
魔搭社区:https://modelscope.cn/models/RWKV/rwkv7-g1/files
WiseModel:https://wisemodel.cn/models/rwkv4fun/RWKV-7-G1/file
如何使用 RWKV 模型
在线 demo(续写模式)
可以在 RWKV 官方 Gradio 中试用 RWKV7-G0 7.2B 模型(为避免排队,这里限制了输入和输出长度):
https://huggingface.co/spaces/BlinkDL/RWKV-Gradio-2
Hugging Face Gradio 是续写模式,使用时需要遵循 RWKV 的 prompt 格式。
RWKV7-G0 7.2B 不思考模式的 QA prompt 格式:
User: 我可以抽干太平洋的水然后下去抓鱼吗?
Assistant:
如需开启思考模式,可在 QA prompt 的基础上添加 <think> 标签:
User: 我可以抽干太平洋的水然后下去抓鱼吗?
Assistant: <think>
本地部署 RWKV 模型
可以使用 RWKV Runner、Ai00、RWKV pip 等推理工具本地部署 RWKV 模型。
此外,RWKV 模型也适配了 llama.cpp、ollama 等热门的模型推理工具。
由于 RWKV7-G0 7.2B 是新模型,目前建议使用 RWKV Runner 以保证得到正确结果。
可以在 RWKV 官网 - 模型推理教程中查看上述推理工具的使用教程。
未来训练计划
我们也正在训练 RWKV7-G0 13.3B 模型,以及使用更多 tokens、使用 DeepEmbed 和 DEA 技术的 RWKV-7s 模型。
加入 RWKV 社区
欢迎大家加入 RWKV 社区,可以从 RWKV 中文官网了解 RWKV 模型,也可以加入 RWKV 论坛、QQ 频道和 QQ 群聊,一起探讨 RWKV 模型。
RWKV 中文文档:https://www.rwkv.cn
RWKV 论坛:https://community.rwkv.cn/
QQ 频道:https://pd.qq.com/s/9n21eravc
BiliBili 视频教程:https://space.bilibili.com/3546689096910933
欢迎大家基于 RWKV-7 进行创业、科研,我们也会为基于 RWKV 的项目提供技术支持。
如果您的团队正在基于 RWKV 创业或开展研究,请联系我们!(在 “RWKV 元始智能” 微信公众号留言您的联系方式,或发送邮件到 “contact@rwkvos.com”。)
附录:旋转的红色立方体
将以下代码保存为 3d.html 并双击运行。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Rotating Red Box</title>
<style>
body {
margin: 0;
overflow: hidden;
}
canvas {
display: block;
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script>
// Create scene
const scene = new THREE.Scene();
// Create camera
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 5;
// Create renderer
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create box geometry and material
const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshBasicMaterial({ color: 0xff0000 }); // Red color
// Create box mesh
const box = new THREE.Mesh(geometry, material);
// Add lighting
const light = new THREE.DirectionalLight(0xffffff, 1);
light.position.set(0, 0, 10);
scene.add(light);
// Add box to scene
scene.add(box);
// Animation loop
let angleX = 0;
let angleY = 0;
function animate() {
requestAnimationFrame(animate);
// Update rotation angles
angleX += 0.01;
angleY += 0.01;
// Update box rotation
box.rotation.x = angleX;
box.rotation.y = angleY;
// Render scene
renderer.render(scene, camera);
}
animate();
</script>
</body>
</html>