FRSMASH v3.6
Fast Recursive State machine with Multi-slot Attention-recall System using Hybrid (SSM+GLA) architecture
SSM backbone(长程平滑) + GLA recall(精确召回) + SlowMemory(慢记忆) 三路融合架构 —— 训练快、推理显存恒定、长程外推稳定、具备 associative recall 能力。
目录
架构
input tokens
│ + Positional Encoding
▼
┌─────────────────────────────────────────────┐
│ SSM backbone (多槽 F-layer, fla HGRN) │ ← 长程平滑, O(T·D), state 固定
│ 12 层 × [MultiSlotFLayer + SwiGLU FFN] │
└─────────────────────────────────────────────┘
│ x_ash ┌──────────────────────────────────┐
│ │ SlowMemory (线性化, fla HGRN) │ ← 慢记忆, O(T·D)
│ │ h_t = A(x)·h + B(x), y=α(x)·h+x │
│ └──────────────────────────────────┘
│ x_mem │
│ ┌──────────────────────────────────┐
│ │ Recall (fla multi-head GLA) │ ← 精确召回, O(T·D·d_h)
│ │ S_t=exp(g)·S+k⊗v, o=q·S (content) │
│ └──────────────────────────────────┘
│ │ x_recall
▼ ▼
Gated Fusion(x_ash, x_mem) + x_emb + x_recall → Head → logits
三路分工:
- SSM backbone(多槽 F-layer):
h = A·h + B,A∈(0,1],对数域 parallel scan(flachunk_hgrn/fused_recurrent_hgrn)。长程平滑、信息有界、可并行。 - SlowMemory(线性化):
h = A(x)·h + B(x)+ 输出门。慢尺度记忆,backward 友好(fla autograd)。 - Recall(GLA):
S_t = exp(g)·S_{t-1} + k⊗v,o = q·S。累积式 content addressing,解决纯 SSM 的 recall 弱点。multi-head(d_h=64),g 初始弱遗忘(bias=8,强保留)。
全 fla 实现:backbone/slowmem/recall 都用 flash-linear-attention 的高效 triton kernel,无 Python loop,训练/推理都快。
架构优势
| 维度 | FRSMASH v3.6 | Mamba | RWKV | Transformer |
|---|---|---|---|---|
| backbone | SSM 多槽(fla) | 选择性 SSM | — | attention |
| recall 能力 | GLA 召回 ✓(induction PASS) | 弱 ✗ | linear attn(=GLA 之一) | 强(O(T²)) |
| 训练 backward | 自动(fla autograd) | selective scan | wkv kernel | 标准反传 |
| 生成显存 | O(1) 恒定(state 固定) | O(1) | O(1) | O(T) KV cache 涨 |
| 长程外推 | 128K 稳定(A∈(0,1] 有界) | 外推有争议 | 衰减稳 | 需位置插值 |
| 召回复杂度 | O(T·D·d_h) | O(T·D) | O(T·D) | O(T²·D) |
核心优势:
- recall 强:GLA 分支补上纯 SSM 的 associative recall 弱点(验证 induction PASS)。Mamba 做不到。
- 生成显存恒定:三路 state 固定,生成任意长 context 显存不变(实测 276 MB,不随 context)。attention 的 KV cache 随序列线性涨。
- 训练快:全 fla triton kernel + 自动 backward,无手写 backward(对比非线性 LSTM 的 backward 障碍)。
- 长程外推稳:A∈(0,1] + exp(g)∈(0,1] 数学有界,128K(训练仅 512/768)外推不崩溃。
定位:v3.6 = Mamba-like SSM(效率) + RWKV-like GLA(recall) + SlowMemory(慢记忆) 融合,三路各取所长。
测试数据
训练(60M,d=432 8层,minimind 全量数据)
| 阶段 | steps | loss | 时长 |
|---|---|---|---|
| pretrain 2ep | 79388 | 6.37 → 2.21 | 2.4h |
| sft 1ep | 28303 | 2.63 → 1.97(PPL≈7.2) | 1.5h |
| 总 | 107691 | — | 3.9h |
训练吞吐:125,000 tok/s(sl=512, bs=32, bf16, 单 RTX 4090)。
recall 能力(induction associative recall)
[序列 a1..aK marker a1..aK, 见 a_i 须输出后继]
v3.6: acc=1.000 PASS (step 800 学会)
对比: 纯 SSM(v3.4) acc=0.000 FAIL; cummax acc=0.058 FAIL; SKVR(slot EMA) acc=0.208 FAIL
只有累积式 content addressing(GLA)能过 induction,验证 recall 分支有效。
推理速度(60M)
| 测试 | 结果 |
|---|---|
| forward 吞吐(sl=8192) | 237,000 tok/s |
| 生成 eager(fused_recurrent) | 102 tok/s |
| 生成 CUDA Graph | 625 tok/s(6.5× eager) |
| TTFT(prefill 7 tok) | 17.8 ms |
生成速度不随 context 增长(state carry,每步 O(1))。
长程稳定性(外推)
context NLL PPL maxTokNLL drift(vs 2K)
2K 10.558 38490 24.4 +0.00
8K 10.225 27593 25.7 -0.33
32K 10.134 25194 26.5 -0.42
128K 10.129 25064 27.2 -0.43
=> STABLE (训练 seq=512/768, 128K 是 170× 外推, PPL 不爆炸)
推理显存(关键优势)
context 生成显存(state carry) attention 等价 KV cache
100 276 MB 1.3 MB
1000 276 MB 13.2 MB
4000 276 MB 52.7 MB
16000 276 MB 210.9 MB
↑ 恒定! ↑ 随 context 线性涨
生成显存 O(1)恒定(276 MB),attention 的 KV cache 随 context 线性增长。
prefill 峰值也恒定:generate/generate_cg 内部走 prefill_chunked(chunk=512),分块 forward 只保留 state、丢弃中间 activation,峰值显存 = 单块(实测 375 MB,不随 prompt 长度增长)。所以超长 prompt(16K+)也不会 OOM,prefill 与生成两阶段显存都恒定。
环境安装(任何机器)
1. 系统要求
- NVIDIA GPU(CUDA 11.8+ 或 12.x),建议 8GB+ 显存
- Python 3.10 ~ 3.12(不建议 3.13,fla 兼容性)
2. 安装依赖
# 创建环境
python -m venv .venv && .venv\Scripts\activate # Windows
# 或: python3 -m venv .venv && source .venv/bin/activate # Linux
# 安装
pip install torch # 按官网选对应 CUDA 版本
pip install flash-linear-attention # fla (核心, triton kernel)
pip install jieba # OpenASHVoc 分词
pip install numpy tqdm # 数据/进度
fla 是关键依赖:提供
chunk_hgrn/fused_recurrent_hgrn(backbone/slowmem)和chunk_gla(recall)的高效 triton kernel。纯 triton 实现,无需 nvcc 编译,Windows/Linux 通用。若 fla 安装失败,可用
uv pip install flash-linear-attention(uv 处理依赖更稳)。
3. 准备数据与词表
需要 minimind 数据集 + OpenASH 词表:
data/
pretrain_t2t_mini.jsonl # ~1.27M 条 pretrain
sft_t2t_mini.jsonl # ~905K 条 sft
open_ash_voc_agent.json # 词表 (23005 tokens)
训练指南
配置数据路径
编辑 train/v36_train.py 顶部:
CACHE_DIR = '/path/to/data/cache' # tokenized 缓存目录
OUT_DIR = '/path/to/output' # 权重输出目录
DEV = 'cuda'
全量训练(pretrain + sft)
cd train
python v36_train.py --stage both --hidden 432 --layers 8 --heads 8 --pt_epochs 2 --sft_epochs 1
参数:
| 参数 | 默认 | 说明 |
|---|---|---|
--hidden |
432 | 隐藏维度(432→~60M) |
--layers |
8 | 层数 |
--heads |
8 | 注意力头数 |
--pt_epochs |
2 | pretrain 轮数 |
--sft_epochs |
1 | sft 轮数 |
--pt_seq |
512 | pretrain 序列长度 |
--sft_seq |
768 | sft 序列长度 |
--pt_max |
0 | 限制 pretrain 样本数(调试用) |
调试/冒烟
python v36_train.py --stage pretrain --max_steps 50 # 50 步验证
训练大规模(223M)
python v36_train.py --stage both --hidden 768 --layers 12 --pt_epochs 3 --sft_epochs 2
# ~48h (单 4090, 全量数据)
断点续训:自动从 out/v36_{stage}_latest.pth 恢复。
训练机制
- 优化器:AdamW(lr 5e-4 pretrain / 5e-5 sft, cosine schedule)
- 混合精度:bf16 autocast + GradScaler
- 梯度裁剪:1.0
- 缓存:首次 tokenize 后存
.pt,后续直接加载(省 jieba 分词)
推理指南
加载模型
import torch
from model.frsmash_v36 import FRSMASHv36
from infer.frsmash_v36_infer import generate, generate_cg
VS = 23005
model = FRSMASHv36(VS, 432, 8, 8, n_slots=4).cuda().eval()
model.load_state_dict(torch.load('out/v36_sft_final.pth', map_location='cuda', weights_only=False)['model'])
生成(支持 top-k / top-p / 重复抑制 / temperature)
prompt_ids = torch.tensor([[...]], device='cuda') # tokenize 后的 ids
# eager 版 (调试友好, ~102 tok/s)
out = generate(model, prompt_ids, max_new=150,
top_k=40, top_p=0.9, rep_penalty=1.3, temperature=0.9, eos=2)
# CUDA Graph 版 (生产用, ~625 tok/s, 显存恒定)
out = generate_cg(model, prompt_ids, max_new=150,
top_k=40, top_p=0.9, rep_penalty=1.3, temperature=0.9, eos=2)
三种生成方式对比
| 方式 | 速度 | 用途 |
|---|---|---|
generate (eager, fused_recurrent) |
102 tok/s | 调试/灵活 |
generate_cg (CUDA Graph) |
625 tok/s | 生产/流式 |
两者都:
- state carry(backbone + slowmem + recall 三路 state 传递),长 context 生成不重算
- 支持 top-k / top-p / repetition penalty / temperature 采样
- 生成显存恒定(276 MB,不随 context)
- chunked prefill(
prefill_chunked,chunk=512):prefill 分块 forward + 三路 state carry(含 recallinitial_state+pos_offset位置编码偏移),峰值显存 = 单块,长 prompt 不 OOM
分词(OpenASHVoc)
from open_ash_voc import OpenASHVoc
voc = OpenASHVoc(agent_voc_path='data/open_ash_voc_agent.json')
ids = voc.encode("你好") # text → ids
text = voc.decode(ids) # ids → text
版本演进
| 版本 | backbone | SlowMemory | recall | 训练 | induction | 关键 |
|---|---|---|---|---|---|---|
| v3.2 | 手写 scan | LSTM loop | cummax | 慢 | FAIL | 数值稳定基石 |
| v3.3 | fla HGRN | 手写 fused | — | ❌backward 障碍 | FAIL | 绕 nvcc |
| v3.4 | fla HGRN | 线性化(fla) | — | 20× | FAIL | 全 fla,快但 recall 弱 |
| v3.5 | fla HGRN | 线性化 | 手写 LinAttn loop | 慢(recall) | PASS | recall 解决,但慢 |
| v3.6 | fla HGRN | 线性化 | fla chunk_gla | 快 | PASS | 快+recall,完整解 |
v3.6 是完整解:v3.4 的速度(SSM 全 fla)+ v3.5 的 recall(GLA),fla 高效实现让两者兼得。
文件说明
FRSMASH-v3.6/
├── README.md # 本文档
├── model/
│ └── frsmash_v36.py # 模型定义 (SSM + GLA recall + SlowMemory)
├── infer/
│ └── frsmash_v36_infer.py # 推理模块 (generate / generate_cg + 采样)
└── train/
└── v36_train.py # 训练脚本 (pretrain → sft)
关键组件
model/frsmash_v36.py:MultiSlotFLayer:多槽 SSM F-layer(flachunk_hgrn)LinearSlowMemory:线性化慢记忆(flachunk_hgrn)GlaRecall:multi-head GLA 召回(flachunk_gla+ 手写stepfor 生成)FRSMASHv36:三路融合模型(forward 训练用,generate_step 推理用)
infer/frsmash_v36_infer.py:prefill_chunked:分块 prefill(chunk=512,三路 state carry,峰值显存恒定)generate:eager 生成(fused_recurrent_hgrn 逐 token)generate_cg:CUDA Graph 加速生成(6.5×,生产用)_sample:top-k / top-p / repetition penalty / temperature
train/v36_train.py:CachedDS:tokenized 数据缓存(复用 minimind 缓存)train:pretrain/sft 训练循环(bf16 + cosine lr + 断点续训)
引用
架构基于以下工作的思想融合:
- fla(flash-linear-attention):高效 triton kernel(
chunk_hgrn,chunk_gla) - Mamba(选择性 SSM):backbone 的 input-dependent 线性递推
- RWKV / GLA(gated linear attention):recall 分支的 content addressing
- Jamba(SSM + attention 混合):混合架构思路(v3.6 用更轻的 GLA 替代 full attention)
License
MIT
Citation
如果 FRSMASH v3.6 对你的研究或项目有帮助,欢迎引用:
@misc{frsmash_v36,
title = {FRSMASH v3.6: A Hybrid Architecture with SSM Backbone, GLA Recall and Linear SlowMemory},
author = {dfytensor},
year = {2026},
howpublished = {\url{https://www.modelscope.cn/dfytensor/FRSMASH-v3.6}},
note = {Three-branch fusion: multi-slot SSM F-layer (long-range, fla),
multi-head GLA recall (associative recall, fla), linear SlowMemory (slow memory).
Fully fla-based, O(1) inference memory, 128K extrapolation stable, induction recall PASS.}
}
关键特性一句话:SSM(长程效率) + GLA(精确召回) + SlowMemory(慢记忆) 三路融合,全 fla triton kernel,生成显存恒定 O(1),128K 长程外推稳定 —— 兼具 Mamba 的效率与 attention 的 recall 能力,且比 attention 推理显存更优。
欢迎在此基础上迭代(v3.7+),或应用到你的任务。如有问题/改进,欢迎 issue / PR。