💡
原文中文,约4600字,阅读约需11分钟。
📝
内容提要
本文记录了对vllm 0.6.2源码的学习,重点介绍了vllm采样模块的数据结构与实现。采样过程根据模型输出的logits选择下一个token,涉及prefill和decode阶段的序列组。详细分析了SamplingMetadata的构建及其在采样中的应用,强调了prompt_logprobs功能的作用。
🎯
关键要点
- vllm采样模块根据模型输出的logits选择下一个token,涉及prefill和decode阶段的序列组。
- 在prefill阶段,seq group的input prompt token会参与到采样中,尽管理论上不应参与。
- prompt_logprobs功能会输出除第一个prompt token外的所有prompt token的预测概率及候选token id。
- SamplingMetadata的构建包括seq_group_metadata_list、seq_lens和query_lens等信息。
- sampling_input是经过selected_token_indices过滤后的model_output,包含需要处理的行。
- 每个seq group在model_output中对应着若干行,sample_len和prompt_logprob_len的关系在prefill和decode阶段有所不同。
- 采样实现通过Qwen2ForCausalLM.sample(logits, sampling_metadata)进行,logits对应sampling_input。
❓
延伸问答
vllm采样模块的主要功能是什么?
vllm采样模块根据模型输出的logits选择下一个token,涉及prefill和decode阶段的序列组。
什么是prompt_logprobs功能,它的作用是什么?
prompt_logprobs功能会输出除第一个prompt token外的所有prompt token的预测概率及候选token id。
SamplingMetadata的构建包含哪些信息?
SamplingMetadata的构建包括seq_group_metadata_list、seq_lens和query_lens等信息。
在prefill阶段,input prompt token如何参与采样?
在prefill阶段,seq group的input prompt token会参与到采样中,尽管理论上不应参与。
如何实现vllm的采样过程?
采样实现通过Qwen2ForCausalLM.sample(logits, sampling_metadata)进行,logits对应sampling_input。
vllm中sample_len和prompt_logprob_len的关系是什么?
对于prefill seq group,sample_len和prompt_logprob_len的和等于query_len;对于decode seq group,prompt_logprob_len为0。
🏷️
标签
➡️