跳至主要内容

L 排程

功能

在單次 decode 呼叫中,逐 token 變化 loop 深度。前 N 個 token 以淺深度執行(便宜的 warmup),後續 token 以完整深度執行(品質輸出)。

運作方式

實作位於 generate_stream 的 decode loop 中。每次 decode 步驟前,有效 loop 次數根據步驟索引設定:

step_loops = (step < warmup_tokens) ? warmup_L : n_loops

KV cache 自然處理可變 L — 以 L=2 寫入的位置只填充 cache 層 0-3(2 pre + 2 loop),而以 L=8 寫入的位置填充層 0-9。

量測

H100 / 2B INT4,64-token decode:

設定warmup token 耗時完整 token 耗時
L=2~1.7 ms
L=8~6.2 ms
L 排程(16 warmup L=2,其餘 L=8)~1.7 ms~6.2 ms

Warmup token 比完整深度 token 快 ~3.3×

用法

tinyloop model.tinyloop generate --loops 8 \
--l-warmup-tokens 16 --l-warmup-L 2 \
--prompt "..." --max-tokens 64
model.generate(prompt, loops=8,
l_warmup_tokens=16, l_warmup_L=2)

為何僅 looped

標準 transformer 有固定的層數 — 每個 token 都必須跑完所有層。在 looped transformer 中,深度是 runtime 參數,相同權重可在任意深度使用,因此可以在不改模型的情況下逐 token 調整計算量。