从零实现 LLM Inference:053. CUDA Graph Host Buffers(把 metadata copy 变成真·non_blocking)
paged-attn + CUDA Graph decode 里,每步都在 torch.tensor(list) 然后 copy_ 到 GPU,既有分配也不是真正 non_blocking。改成复用 pinned host buffer + numpy view 直接写入,吞吐提升、TPOT 下降。
paged-attn + CUDA Graph decode 里,每步都在 torch.tensor(list) 然后 copy_ 到 GPU,既有分配也不是真正 non_blocking。改成复用 pinned host buffer + numpy view 直接写入,吞吐提升、TPOT 下降。
SchedulerManager 的 worker loop 里每个 token 都会进一次 lock 取 q/detok/state;改成每步 decode 批量抓取一次,减少 lock acquire/release 和热点 dict 访问。
之前 top_k+top_p 采样每步都会对整个 vocab 做 sort/gather,开销巨大。把采样改成直接在 sorted topk 空间里做 top-p + multinomial,并顺手把 top_k clamp 到 vocab size。
streaming 如果每个 token 都 q.put + HTTP flush,会把 Python/IO overhead 放大。引入 stream_interval:第一段内容立刻发,后续每 N 个 token 合并成一个 chunk 再发,吞吐和 tail latency 都能更稳。
burst streaming 下 unlimited inflight 会把排队延迟炸到 p99,但吞吐几乎不变。给 SchedulerManager 加 max_inflight_requests:超过就直接拒绝(HTTP 429),benchmark_streaming 也打印 Rejected 与 rej...