Performance report · Oct 2026

Pagoda 性能优化报告 · 路由 × GDN × mlx-http

本页汇总 #15 / #16 的热路径改动,附可复现微基准与后续 issue。驱动轴对齐路线图:TTFT · Token/Watt · Useful Life。

Sticky vs trie
5.9×
2.3 KB prompt · pick+record vs 前缀 walk
GDN decode
0.21ms
单层 · hv=48 dk=dv=128 · release
GDN throughput
4.7k/s
同形状层步/秒(CPU f32 fused)
Logits reuse
~1MiB
Qwen3.8 vocab 每步少一次堆分配

1 · Prefix sticky 路由

文件 pagoda/src/pd.rs · PR #15 · 轴 TTFTToken/Watt

相同 prompt 先走 FNV-1a sticky,命中后 record 只 bump routed、跳过字符 trie 增长。冷路径 RR 从 worker 0 起;/stats 暴露 sticky_hits / upstream_cache_hit_ratio。

代理层对「共享 system prompt 反复打同一 decode worker」的路径从 O(字符数) 降到 O(1) hash;长 trunk 越明显。

对照 · 延迟分布

Source: local release microbench · Apple Silicon · 2026-10-11 · n=50 000

sticky prefix walk 5.2µs 30.4µs ns / op

prompt = 2320 bytes(「You are a helpful assistant. 」×80)。sticky 含 pick+record;prefix 为扩展串上的纯 pick trie walk。

2 · Qwen3.5 GDN 热路径

模块 pagoda-hf/src/qwen3_5/ · PR #16 · 轴 TTFTToken/Watt

改了什么

  • recurrent_gated_delta_rule:连续切片访问;decay+kv_mem 一趟;S+=k⊗δ 与输出 matvec 融合
  • q/k/δ/kv_mem scratch 跨 head/time 复用,去掉 per-token to_vec
  • causal conv:copy_within 原地滚环;prefill 带回最终 ring 供 decode
  • Dense gemm:4-wide 手写累加(decode seq=1)
单层 Qwen3.8 形状(hv=48, dk=dv=128)release:0.211 ms/step · 4736 steps/s。64 层仅 GDN 部分约 ~13.5 ms/token(不含 full-attn / MLP / 量化反解)。

复现

# after PR #16 lands: cd pagoda-hf cargo test --release --offline --lib decode_throughput_qwen38_shaped cargo run --release --offline --example bench_gdn_decode # → ms_per_step≈0.21 steps_per_s≈4700 (hv=48 dk=dv=128)

护栏:debug 下 32 step < 5 s。GPU/FLA 见 #18。

3 · mlx-http 适配器

文件 pagoda-hf/src/mlx_engine.rs · PR #16 · 轴 Useful LifeTTFT

下一刀最大收益:去掉 decode→text→encode 往返,直接传 token ids(#17)。

交付对照

PR / issue 状态以 GitHub 为准;本表描述意图与驱动轴。

项状态轴说明

方法学备注

Pagoda · Apache-2.0 · 报告生成日 2026-10-11 · 首页 · 路线图 · GitHub