跳至主要内容

通用 Runtime 在 Looped Checkpoint 上會輸在哪裡

這一頁回答的不是「通用 runtime 很弱嗎?」答案當然不是。真正的問題是:它們預設優化的是另一種模型假設。

如果 checkpoint 的本質是:

embed -> pre blocks -> shared loop block x L -> head

那麼通用 runtime 通常想看到的是:

embed -> block 1 -> block 2 -> ... -> block N -> head

這個結構不匹配,就是 TinyLoop 的優勢來源。

面向通用 deep-stack baselineTinyLoop節省 / 收益
每實例權重 VRAM2,700 MB204 MB13.2× 更小
80 GB GPU 可容納實例數2939213.5× 更多
每 MB VRAM 的 tokens/s19.0(Pythia-410M FP16)83.24.4×
相對 generic INT8 KV 的 KV 節省~50 %~78 %(INT4-h)多省 28 個百分點
Prefix cache 攤提倍率每個 cached token 只有 1×每 token 有 L = 8 時等效
Loop block 是否更容易塞進 GPU L2額外吃到 cache residency 優勢
INT4 GEMM 峰值受限於 generic INT4 路徑達 FP16 tensor-core 峰值的 86%消費級 Ada 上特別明顯

1. 每實例權重記憶體

這個比較不是公開發表的 latency bakeoff,而是部署層最實際的記憶體成本:你到底是在保存共享 block,還是把有效深度當成真的 N 層攤開。

路徑每實例權重記憶體
通用 deep-stack runtime2,700 MB
TinyLoop shared-block runtime204 MB

這代表:

  • 當記憶體是第一瓶頸時,TinyLoop 的價值非常直接。
  • 在這個比較下,模型 footprint 大約 小 13×
  • 這個優勢會一路傳導到 serving density、edge fit、多模型併存。

2. 80 GB GPU 上的模型密度

用同一組 per-instance 數字做最簡單的 back-of-the-envelope 計算:

路徑80 GB GPU 可放幾個實例
通用 deep-stack runtime29
TinyLoop shared-block runtime392

這就是實際部署故事:

  • 同一張 GPU 上可以塞更多 tenants
  • 可以常駐更多 checkpoints
  • edge / on-prem 部署包絡線會小很多

3. 為什麼這不是同一類 runtime

選 TinyLoop,通常是因為你要保留 looped transformer 的原始結構,而不是把它硬展平成一般深層堆疊。這個選擇會帶來幾個通用 runtime 很難補回來的特性:

  • 深度 L 可以保留成 runtime 參數,而不是 checkpoint 形狀的一部分。
  • draft_loops / verify_loops 可以在同一份 checkpoint 上做 self-speculative decode。
  • h-mode / delta-KV 這種 KV cache 壓縮,能直接利用共享的 W_k / W_v
  • Prefix cache 的攤提,不是只在 token 軸上重用,還能沿 iteration 軸同步受益。

反過來說,如果你的需求是廣泛模型覆蓋、成熟 batching、完整 serving 生態,那 generic runtime 仍然是對的工具。TinyLoop 的優勢不是「什麼都比較快」,而是當模型家族本來就是 looped、weight-shared 時,它能保留並變現那個結構。