fusion-llm-demo / docs /02-模型架构.md
zhan1206
feat: setup.py, quick-start guide, architecture doc, model registry
0159072
|
Raw
History Blame
6.05 kB

Fusion-LLM 架构设计文档

整体架构

┌─────────────────────────────────────────────┐
│         推理层 (Inference)                   │
│  Ollama | GGML/ONNX | TensorRT/OpenVINO     │
└─────────────────────────────────────────────┘
                        ↑
┌─────────────────────────────────────────────┐
│         模型层 (Models)                      │
│  FusionModel + SBLA + Thinking Dial          │
└─────────────────────────────────────────────┘
                        ↑
┌─────────────────────────────────────────────┐
│         训练层 (Training)                   │
│  LoRA | Full | DPO | GRPO | T-KD            │
└─────────────────────────────────────────────┘
                        ↑
┌─────────────────────────────────────────────┐
│         数据层 (Data Pipeline)               │
│  BilingualFilter | T-KD | Tokenizer         │
└─────────────────────────────────────────────┘

核心组件

1. FusionModel (models/fusion_model.py)

标准 Transformer 解码器 + 自定义注意力 + 可配置 KV 缓存。

关键特性:

  • RMSNorm 归一化
  • SwiGLU 激活
  • RoPE 位置编码
  • KV 缓存 (增量推理)
  • GQA (Grouped Query Attention)

2. SBLA 注意力 (models/sbla_attention.py)

Sliding Block Latent Attention — 分块低秩近似注意力。

输入序列 T 个 token, 分块大小 B
  ↓
每块 [B tokens] → 块内高秩注意力 (O(B²))
  ↓
所有块合并 → 压缩至 latent_dim → 块间低秩注意力 (O(B·latent))
  ↓
output = output_std + gate · latent_expanded

复杂度对比:

方法 复杂度 KV 缓存 长序列适用性
标准注意力 O(n²) 100%
GQA O(n²) ~50% 一般
SBLA O(n·B) ~12.5%

当前配置: block_size=8, latent_dim=8 (mini 模型)

3. Thinking Dial (models/thinking_dial.py)

推理深度控制器,通过 logits bias 调节思考深度。

depth=0: 无思考偏差 → 直接回答
depth=1: 简短思考 → 快速推理
depth=2: 中等思考 → 深入分析
depth=3: 深度思考 → 思维链模式

实现: 在 vocabulary 空间对特定 token 区间施加 depth × depth_bias 的 logits 偏移。

4. KV 缓存 (FusionModel.generate)

增量推理时缓存已计算的 K/V:

# 增量推理流程
for step in range(max_new_tokens):
    if past_key_values:
        model_input = input_ids[:, -1:]  # 仅新 token
        outputs = model(model_input, past_key_values=past_key_values, ...)
    else:
        outputs = model(input_ids, ...)
    past_key_values = outputs.past_key_values

训练流程

预训练

# 完整参数微调
python train/full_finetune.py --data_path data/training_data.txt

# LoRA 微调
python train/lora_finetune.py --data_path data/training_data.txt

对齐训练

# DPO 对齐
python train/dpo_finetune.py

# GRPO Thinking Dial 训练
# 在 models/thinking_dial.py 的 GRPOTrainer

知识蒸馏

python data_pipeline/t_kd_distillation_train.py

部署方式

方式 格式 量化 适用场景
Ollama ggml/gguf 4/8-bit 本地快速部署
ONNX .onnx 动态 跨平台
TensorRT .plan INT8 高性能推理
OpenVINO .blob INT8 Intel 硬件

文件结构

fusion-llm/
├── models/
│   ├── fusion_model.py      # 主模型 (Transformer 解码器)
│   ├── fusion_mini.py       # 小型变体 (4.5M params)
│   ├── sbla_attention.py    # SBLA 注意力实现
│   ├── thinking_dial.py     # Thinking Dial + GRPOTrainer
│   └── tokenizer.py         # 统一 tokenizer 接口
├── train/
│   ├── full_finetune.py     # 全参数微调
│   ├── lora_finetune.py     # LoRA 微调
│   ├── dpo_finetune.py      # DPO 对齐
│   └── model_utils.py       # 模型创建工具
├── inference/
│   ├── ollama_deploy_v2.py  # Ollama 部署
│   ├── dyquant.py           # 动态量化
│   └── dashboard.py         # 可视化推理面板
├── deployment/
│   ├── export_ggml.py       # GGML/GGUF 导出
│   ├── export_onnx.py       # ONNX 导出
│   └── export_tensorrt_openvino.py  # TensorRT/OpenVINO
├── evaluation/
│   ├── metrics.py           # 基础指标
│   ├── bertscore_moverscore.py  # 语义相似度
│   ├── bleu_rouge_meteor.py # BLEU/ROUGE/METEOR
│   ├── gsm8k_reward.py      # GSM8K 奖励函数
│   └── model_card.py        # 模型卡片生成
└── data_pipeline/
    ├── bilingual_filter.py   # 双语数据过滤
    └── t_kd_distillation.py # 知识蒸馏

已知限制

  1. 无预训练权重: 当前仅有合成数据训练的 mini 模型,无法直接用于实际任务
  2. Mini 模型能力有限: 4.5M 参数仅能学习简单模式(加法),复杂任务需要更大模型和真实数据
  3. 双母语训练: 架构已就绪,缺真实中英双语训练数据和训练资源
  4. Thinking Dial 效果待验证: 在简单任务上 depth=0 优于 depth=3(符合预期),复杂任务有待评估