从零实现 LLM Inference:052. Batched Worker Lookups(减少 streaming decode 的锁开销)
SchedulerManager 的 worker loop 里每个 token 都会进一次 lock 取 q/detok/state;改成每步 decode 批量抓取一次,减少 lock acquire/release 和热点 dict 访问。
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...
submit_interval_ms 如果用“sleep after each add_request”的相对口径,提交路径一变快,实际到达率就变了,TTFT 会被排队形态污染。给 benchmark_streaming 加 submit_scheudle=absolute,用 t0+i*interval 固定到...