KV-Cache in Five Lines
if kv_cache is not None:
K_prev, V_prev = kv_cache
K = torch.cat([K_prev, K], dim=2) # (B, H, T_prev + T_k, d_k)
V = torch.cat([V_prev, V], dim=2)
new_kv_cache = (K, V)
Why it matters: Autoregressive decoding is O(T²) without this. With it, per-step cost drops to O(1) projection + O(T) attention. Single biggest inference optimization.