BS-TDM: 位切片时分复用大语言模型
1 物理层 × 6 步位切片 × 4 bit = 24 bit/w (8× 压缩) — 30M 参数超越标准 6 层 Transformer, 部署推理 2.6× 加速, ppl 无损。
快速开始
推理 (两种模式)
# 方式 1: 部署态推理 (推荐, 2.3x 加速)
# 4-bit 量化权重打包存储, 加载时解包为 bf16 缓存, 免实时量化开销
python inference_deployed.py
# 方式 2: 训练态推理 (对照)
# fp32 权重 + 每步实时 4-bit 量化
python inference.py
推理性能对比 (实测, batch=1, seq=128, RTX 4090)
| 模式 | 量化权重 GPU 占用 | 推理速度 | GPU 显存 | ppl |
|---|---|---|---|---|
| C. 训练态 (fp32 + 实时量化) | 39.3 MB | 16.8 ms | 194 MB | 17.06 |
| A. bf16 缓存部署 (推荐) | 19.7 MB | 6.4 ms | 169 MB | 17.06 |
| B. 原生 4-bit 打包 | 4.9 MB | 17.2 ms | 174 MB | 17.06 |
三种模式 ppl 完全一致 (17.06),量化无损。
- bf16 缓存部署 (A): 训练后 4-bit 量化 → 一次性解包为 bf16 缓存 → 推理纯 GEMM, 2.6× 加速 + 显存最低。小模型首选。
- 原生 4-bit 打包 (B): 权重以 uint8 (2 值/字节) 存 GPU, 每步 forward 时解包。量化权重仅 4.9 MB (vs fp32 39.3MB = 8× 压缩)。每步解包有开销, 速度与训练态持平。大模型 (B 级) 首选 (配合 int4 GEMM 可加速)。
- 30M 模型差异小 (embedding/head fp32 占 60MB 主导); 模型越大, 量化权重占比越高, 原生 4-bit 优势越大。
训练复现
# 全流程: 预训练(3ep) + SFT(2ep) + 推理 benchmark + 生成样本
python run_full_pipeline.py
# 三模型对比 (标准6层 vs BS-TDM 2×3 vs 1×6)
python train_timeshare.py
文件清单
| 文件 | 说明 |
|---|---|
inference_deployed.py |
bf16 缓存部署推理 (推荐, 最快 6.4ms) |
inference.py |
训练态推理 (fp32 + 实时量化, 对照) |
bitslice.py |
模型定义 (TimeSharedLM / BitSliceLinear) |
benchmark_deploy.py |
bf16 缓存部署性能基准 |
benchmark_native4.py |
三模式推理性能对比 (训练态 / bf16缓存 / 原生4-bit) |
run_full_pipeline.py |
全流程训练 (预训练 + SFT + 推理) |
train_timeshare.py |
三模型对比实验 (标准 Transformer) |
run_hybrid.py |
SSM+TDM 混合实验 (frsmash3.7) |
run_frsmash_tdm.py |
SSM 直接时分实验 (失败对照) |
frsmash38_model.py |
frsmash3.8 模型 (纯 GLA 时分复用, 无 SSM 无 Transformer) |
train_frsmash38.py |
frsmash3.8 训练 + 对比 v3.7 |
run_4bit.py |
消融: 4bit 位宽 |
run_dg_tdm.py |
消融: DyadicGumbel 3bit + BS-TDM |
tdm4b_sft.pth |
SFT 微调权重 (95MB) |
tdm4b_pretrain.pth |
预训练权重 (95MB) |
open_ash_voc_agent.json |
OpenASHVoc 词表 (297MB, 23006 tokens) |
paper.md |
中文论文 |
paper_en.md |
英文论文 |
experiment_data.csv |
全部实验数据 |
result_deploy.json |
部署性能数据 |
模型架构
输入 token IDs
→ nn.Embedding (fp)
→ 1 × TimeSharedBlock (6 步循环, 每步残差):
for step in [0..5]:
h = h + Attention(h, step) ← 标准 MHA + 第 step 组 4-bit 位切片权重
h = h + FFN(h, step) ← SwiGLU + 4-bit 位切片权重
→ nn.Linear head (fp)
部署: 每权重 6 步 × 4 bit = 24 bit/w → 量化权重仅 5.0MB (vs fp32 39.3MB = 7.8× 压缩)
核心结果
训练对比 (同逻辑深度 6, minimind 120k, 3 epoch)
标准 Transformer:
| 配置 | bit/w | 压缩 | ppl | vs 标准 |
|---|---|---|---|---|
| 标准 6 层 | 192 | 1× | 16.12 | — |
| BS-TDM 1×6 @8bit | 48 | 4× | 15.83 | -0.29 |
| BS-TDM 1×6 @4bit | 24 | 8× | 16.49 | +0.37 |
| DG3bit + TDM 1×6 | 18 | 10× | 20.40 | +4.28 (撞地板) |
frsmash3.7 SSM (直接循环 + 混合 + GLA 突破):
| 配置 | 骨干 | bit/w | ppl | vs 标准 |
|---|---|---|---|---|
| 标准 frsmash3.7 6层 | SSM+GLA | 192 | 17.91 | — |
| SSM 直接循环 1×6 | SSM | 24 | 32.90 | +15.01 (失效) |
| 混合 3SSM+TDM3 | SSM+Attn | 12 | 15.53 | -2.36 |
| frsmash3.8 GLA 2×3 | GLA-TDM | 24 | 17.04 | -0.87 |
| frsmash3.8 GLA 1×6 | GLA-TDM | 24 | 17.14 | -0.77 |
SSM 不能时分 (固定 A 矩阵), 但 GLA 可以 (数据相关门控 g_t)! frsmash3.8 纯 GLA 时分超越 v3.7 且 8× 压缩.
部署推理 (三种模式)
| 指标 | 训练态 | bf16 缓存部署 | 原生 4-bit |
|---|---|---|---|
| 量化权重存储 | 39.3 MB | 19.7 MB | 4.9 MB |
| 量化权重 GPU 占用 | 39.3 MB | 19.7 MB | 4.9 MB |
| 推理速度 | 16.8 ms | 6.4 ms | 17.2 ms |
| GPU 显存 | 194 MB | 169 MB | 174 MB |
| ppl | 17.06 | 17.06 | 17.06 |
选型建议:
- 小模型 (≤100M): 用 bf16 缓存部署 (最快)
- 大模型 (≥1B): 用 原生 4-bit (最省显存, 配合 int4 GEMM 加速)
全流程 (预训练 → SFT → 推理)
| 阶段 | 指标 |
|---|---|
| 预训练 ppl | 16.49 |
| SFT final_loss | 2.30 |
| 部署推理速度 | 7.8 ms/forward |
| 部署推理显存 | 89 MB |
采样参数
generate(model, voc, "你的提示", dev,
max_new=120, top_k=50, top_p=0.95, rep_penalty=1.2, temp=0.8, seed=0)
环境
- Python 3.12, PyTorch 2.13+cu126, Triton 3.7
- CUDA GPU (sm_89 / RTX 4090 测试通过)
- Windows 需
PYTHONUTF8=1
引用
详见 paper.md / paper_en.md。