从零实现 LLM Inference:047. Streaming Tokenize Workers(把 encode 挪出 add_request)
add_request 里同步做 tokenizer.encode 会放大 submit wall / p99。引入 tokenize_workers 线程池,把 tokenization 变成后台阶段,并把 TTFT 拆到 tokenize/queue/prefill 三段。
add_request 里同步做 tokenizer.encode 会放大 submit wall / p99。引入 tokenize_workers 线程池,把 tokenization 变成后台阶段,并把 TTFT 拆到 tokenize/queue/prefill 三段。
streaming bench 里 add_request 的 p99 很容易被 tokenizer.encode 的 CPU 开销污染。增加 add_request(prompt_token_ids=…) + benchmark_streaming –pretok,把 tokenization 从提交路径挪出去。
TTFT 只是一个总数:里面既有排队等待,也有 prefill 的真实计算。只看 TTFT 很容易把优化方向搞反。给 SchedulerManager 记录 admit timestamp,并在 benchmark_streaming 里打印 TTFT breakdown。
paged-attn / CUDA Graph 的第一次请求会把 Triton JIT 和 graph capture 算进 TTFT/吞吐,导致对比结论失真。给 benchmark_streaming 加 warmup-runs + repeat-runs,把冷启动和稳态拆开。
streaming 场景想看 TTFT/TPOT/ITL 的 p99,但之前不好一条命令切换 decode 的快路径,也不好给 nsys 挂 NVTX。补齐 benchmark 的三个开关。