Skip to content

Commit 148ecdb

Browse files
committed
[Doc] polish
1 parent 335eaa2 commit 148ecdb

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

docs/16_vllm_source_code/02_preprocess_before_scheduler.md

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -443,13 +443,32 @@ def _create_sequence_group_with_sampling(
443443
return seq_group
444444
```
445445

446+
### 3.4 深入理解 SequenceGroup
446447

447-
`SequenceGroup` 的主要作用是管理一组从**同一个输入 prompt 生成的多个序列**。这在需要生成多个候选输出的场景下非常有用,比如并行生成多个样本以供选择或进行抽样,或者在模型生成过程中需要对同一个输入应用不同的策略(如采样参数)。该类能够追踪这些序列的状态、进度以及它们之间的关系。它通过对序列组的有效管理,确保每个序列可以在多步骤的生成过程中同步推进。
448+
:::tip
449+
450+
本小节参考了很多 [1] 中的内容, 感谢作者的分享。
451+
452+
:::
453+
454+
SequenceGroup 就是一个“1 个 prompt -> 多个 outputs”的容器。它包含一组“prompt -> output”的序列(我们称之为 seq,每个 seq 其实就是一个 Sequence 实例),每个 seq 会在推理过程中经历不同的状态(status)。这些状态为调度器提供了关键信息,让 vLLM 知道每个 seq 在什么时候、什么情况下应该做什么。
455+
456+
:::note
457+
458+
在 vLLM 中有一个重要假设:同一个 SequenceGroup 中的所有 seq 共享同一个 prompt。换句话说,一个 prompt 会生成多个不同的 outputs,但它们都来自同一个来源。
459+
460+
:::
461+
462+
在自然语言处理任务中,经常需要一个 prompt 生成多个不同的 outputs。例如,给定一个问题,我们可能想要生成多个回答,或者在文本生成中提供不同的句子结尾。这种需求是因为:
463+
464+
- 多样性:我们想要看到不同的可能输出,以便选择最适合的。
465+
- 批量推理:在实际应用中,为了提高效率,我们往往批量生成多个候选输出,这样可以一次满足多个需求。
466+
467+
于是,SequenceGroup 就是一个用于管理“一次 prompt 生成多个 outputs” 的容器。它能够把多个生成任务(seq)打包在一起,从而让系统知道这些 seq 是由同一个 prompt 产生的。
448468

449-
`SequenceGroup` 有下面几个应用场景:
469+
此外 SequenceGroup 还有帮助调度器灵活控制任务的计算状态的作用。在大规模推理时,GPU 资源可能会不足,尤其是当任务量大、生成输出的数量多时。如果 GPU 内存不够用,系统就得灵活管理这些计算资源——也就是“抢占”(preemption)机制。
450470

451-
1. 多序列并行生成:在处理需要生成多个候选输出的任务时,如使用不同的采样策略(beam search, temperature sampling 等),SequenceGroup 可以管理每个不同策略生成的序列。这在语言模型的推理中很常见。
452-
2. 跟踪生成进度:在长文本生成任务中,生成可能需要多轮迭代。每轮生成的状态需要被保留并继续使用。SequenceGroup 通过管理序列的状态(如是否已经完成生成、当前阶段是 prefill 还是 decode 等),可以高效跟踪多个序列的生成进度。
471+
如果资源不足,SequenceGroup 中的所有 seq 可以一起被“swap out”到 CPU 中,等资源充足时再一起“swap in”,恢复计算。 换句话说,SequenceGroup 帮助系统“打包”了同一个 prompt 生成的多个 outputs,便于调度器做成批管理,而不是一个个零散管理。这样既避免了大量的小任务在内存中频繁进出,又可以在有资源时迅速恢复计算,提高了 GPU 利用率。
453472

454473
到此,输入的预处理工作就完成了,我们成功的将用户的请求转换为了 `SequenceGroup` 对象,`SequenceGroup` 对象包含了多个 `Sequence` 对象,且存储了用户请求的信息,包括请求的唯一 ID、请求的到达时间、采样参数等。
455474

0 commit comments

Comments
 (0)