一个模型,三种“人格”——FRSMASH-v3.6 凭什么既能快如闪电,又能记住 128K 前的事?
钩子:如果有一个模型,训练 60M 参数只用了3.9 小时,生成速度跑到625 tok/s,128K 上下文外推不崩,显存还恒定 276 MB——你信吗?
这不是标题党。这是 ModelScope 上刚更新的FRSMASH-v3.6。
先抛一个问题:为什么纯 SSM 记不住“套路”?
如果你玩过 Mamba 或 RWKV,可能遇到过这种情况:前面明明出现过一模一样的模式,模型就是“想不起来”后面该接什么。
这叫associative recall 问题——给模型一串a1 a2 a3 ... aK [marker] a1 a2 a3 ...,它应该在看到a_i时准确输出下一个。纯 SSM 在这类任务上几乎全军覆没。
FRSMASH-v3.6 的解法很直接:既然一个脑子不够用,那就装三个。
三路分工:SSM 做主、GLA 做精、SlowMemory 做“背景板”
架构图里写得清楚,模型把输入同时喂进三条并行路径:
第一条路:SSM Backbone——长程“定海神针”
12 层 MultiSlotFLayer,基于 fla HGRN 实现。递推公式是:
h = A·h + B, A ∈ (0,1]这个A 恒小于 1的设计是神来之笔——意味着不管序列多长,状态都有数学上界,不会爆炸也不会消失。训练只看了 512/768 的序列长度,外推到 128K 时 PPL 几乎不漂移。170 倍的外推,稳得不像话。
第二条路:GLA Recall——专门抓“模式匹配”
这是 v3.6 相比纯 SSM 最大的升级:
S_t = exp(g)·S_{t-1} + k⊗v, o = q·S本质上是一个累积式的键值记忆系统。当模型看到一个 token,它会用当前的 query 去记忆库 S 里检索最相关的内容。这就是它能通过 induction 测试的根本原因——它不是“猜”下一个,而是“查”到了上一个。
实测结果:v3.6 在 induction 任务上acc=1.000 PASS,而纯 SSM 是 0.000。差距就是有和无。
第三条路:SlowMemory——慢尺度的“长期背景”
线性化的慢记忆模块,公式是:
h_t = A(x)·h + B(x), y = α(x)·h + x它不追求精确召回,而是提供一种缓慢变化的全局背景信号。就像写文章时,你不会时刻想着开头第一句,但它始终在影响你的语气和方向。
三条路怎么融合?Gated Fusion
三个分支各自输出x_ash(SSM)、x_mem(慢记忆)、x_recall(GLA),然后通过门控机制融合,再加上原始 embedding,最后进 Head 出 logits。
不是简单的相加,而是让模型自己学会“什么时候该信谁”。
数据说话:这些数字不讲武德
训练效率:3.9 小时搞定 60M 模型
| 阶段 | 步数 | loss 变化 | 耗时 |
|---|---|---|---|
| Pretrain 2ep | 79,388 | 6.37 → 2.21 | 2.4h |
| SFT 1ep | 28,303 | 2.63 → 1.97 | 1.5h |
训练吞吐125,000 tok/s,单张 RTX 4090。什么概念?你泡杯咖啡的时间,它已经看了几百万 token。
推理速度:CUDA Graph 加持,625 tok/s
- Eager 模式:102 tok/s
- CUDA Graph 模式:625 tok/s,6.5 倍提升
更关键的是:生成速度不随上下文长度变化——因为每一步只传递固定大小的 state,不重算历史。
显存:276 MB,管你 100 还是 16000 上下文
| Context | FRSMASH-v3.6 | Transformer KV Cache |
|---|---|---|
| 100 | 276 MB | 1.3 MB |
| 1,000 | 276 MB | 13.2 MB |
| 4,000 | 276 MB | 52.7 MB |
| 16,000 | 276 MB | 210.9 MB |
恒定vs线性增长。而且 prefill 阶段也是分块(chunk=512)处理,峰值显存同样恒定在 375 MB。这意味着你可以往模型里塞 100K 的 prompt,它照样不 OOM。
版本演进:从 v3.2 到 v3.6,踩过的坑一个没白踩
看版本迭代史就知道这模型为什么 work:
| 版本 | 问题 | 状态 |
|---|---|---|
| v3.2 | 手写 scan,慢 | induction FAIL |
| v3.3 | backward 有障碍 | FAIL |
| v3.4 | 全 fla 快起来了 | 但 recall 还是 FAIL |
| v3.5 | recall 解决了 | 但手写循环太慢 |
| v3.6 | fla + GLA,又快又准 | PASS |
v3.6 的本质是v3.4 的速度 + v3.5 的 recall 能力,而让这一切成为可能的,是 flash-linear-attention 提供的 Triton kernel——不用手写 backward,不用绕 nvcc,Windows 和 Linux 都能跑。
总结:它 work,因为它在正确的地方做了正确的取舍
FRSMASH-v3.6 没有试图用单一机制解决所有问题,而是:
- SSM 负责长程稳定——数学有界,外推不崩
- GLA 负责精确召回——补上 SSM 最弱的环节
- SlowMemory 负责慢背景——提供全局信息
- 全 fla 实现——训练快、推理快、显存恒定
它不追求“一个架构打天下”,而是让三个专家各司其职,再让模型自己学会怎么融合。
最后补一句:这模型 60M 参数,MIT 协议开源。你甚至可以在自己的 8GB 显卡上跑起来。
试试看,反正不亏。