可重复性¶
为了追求性能,vLLM 默认不保证结果的可重复性。若要获得可重复的结果:
- 在离线模式下,你可以设置
VLLM_ENABLE_V1_MULTIPROCESSING=0以实现调度确定性,或者启用 批次不变性 (batch invariance),使输出不受调度影响。 - 在在线模式下,你只能启用 批次不变性。
示例: examples/features/batch_invariance/reproducibility_offline.py
警告
设置 VLLM_ENABLE_V1_MULTIPROCESSING=0 会改变用户代码(即构建 LLM 类的代码)的随机状态。
注意
即使进行了上述设置,vLLM 也仅在相同硬件和相同 vLLM 版本下提供可重复性。
设置全局种子¶
vLLM 中的 seed 参数用于控制各种随机数生成器的随机状态。
如果提供了特定的种子值,random、np.random 和 torch.manual_seed 的随机状态将相应地进行设置。
默认行为¶
在 V1 中,seed 参数默认为 0,这会设置每个工作进程 (worker) 的随机状态,因此即使 temperature > 0,每次 vLLM 运行的结果也会保持一致。
在 V1 中无法取消指定种子,因为不同工作进程需要采样相同的输出以支持投机解码 (speculative decoding) 等工作流。更多信息请参阅: Pull Request #17929
注意
用户代码(即构建 LLM 类的代码)中的随机状态仅在工作进程与用户代码在同一进程中运行时(即 VLLM_ENABLE_V1_MULTIPROCESSING=0)才会被 vLLM 更新。
默认情况下,VLLM_ENABLE_V1_MULTIPROCESSING=1,因此你可以放心使用 vLLM,而不必担心意外导致后续依赖随机状态的操作变得确定性。