vllm 中的 sampling

vllm 中的 sampling

💡 原文中文,约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。

➡️

继续阅读