RWKV7-G0 7.2B 发布,最强纯 RNN 推理模型

166 阅读5分钟

2025 年 7 月 22 日, 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 Computearxiv.org/abs/2507.14…

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 模型:

如何使用 RWKV 模型

在线 demo(续写模式)

可以在 RWKV 官方 Gradio 中试用 RWKV7-G0 7.2B 模型(为避免排队,这里限制了输入和输出长度):

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、使用 DeepEmbedDEA 技术的 RWKV-7s 模型。

加入 RWKV 社区

欢迎大家加入 RWKV 社区,可以从 RWKV 中文官网了解 RWKV 模型,也可以加入 RWKV 论坛、QQ 频道和 QQ 群聊,一起探讨 RWKV 模型。

欢迎大家基于 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>