@RunLLM 一个长输入的请求,切chunk ,比如切了4份,prefill的时候,这四个可以同时做prefill 吗 ,还是有依赖关系的
@RunLLM 前面的chunk 应该只需要计算kvcache就行了吧,计算kvcache应该可以独立计算,只有最后一个chunk 依赖前面chunk生成的kvcache
你的理解部分正确。对于prefill阶段,前面的chunk确实可以独立计算自己的k/v cache(即每个chunk的k/v cache可以并行生成),但在attention输出时,后面的chunk需要用到前面所有chunk的k/v cache,所以最终attention输出是有依赖关系的。也就是说,k/v cache的生成可以并行,但完整的prefill(包括attention输出)需要串行处理。详见官方API文档和设计说明。
需要更详细的原理或代码实现细节吗?
Sources:
- https://docs.vllm.ai/en/stable/api/vllm/vllm.v1.attention.backends.mla.common.html#chunked-prefill
- https://docs.vllm.ai/en/latest/serving/context_parallel_deployment/
Hint: Mention @RunLLM in the post for followups.
@RunLLM 不是只需要最后一个chunk 做attention计算吗,前面的chunk 应该不需要做attention计算吧
@RunLLM 为什么所有chunk都需要做attention计算
@RunLLM max_completion_tokens 这个是什么参数
@RunLLM 为什么计算 total_num_scheduled_tokens 的时候,把waiting队列里的也统计进去了,执行的时候,不是只执行running队列里的请求吗
vLLM调度时,waiting队列中的请求如果被本轮调度(即分配了token预算),就会被统计进total_num_scheduled_tokens,并在本轮实际执行。只有被调度的waiting请求才会进入执行批次,因此统计的是“本轮被调度的所有请求”,而不仅仅是原本running队列的。详见Scheduler.schedule源码。
需要详细解释调度流程或源码细节吗?
Sources:
Hint: Mention @RunLLM in the post for followups.
@RunLLM 所以running队列和waiting队列没有优先级?不是先从waiting到running,然后再从running队列里调度吗?
@RunLLM sampled_token_ids 的shape信息是什么样的?
sampled_token_ids 的shape通常为 [batch_size, max_num_generated_tokens],即每个请求的生成token数可能不同,所有请求会pad到同样长度。padding时默认用-1(PLACEHOLDER_TOKEN_ID)。详见SamplerOutput文档。
需要详细说明不同场景下的shape变化或示例代码吗?
Sources:
Hint: Mention @RunLLM in the post for followups.