跳到内容

可复现性

vLLM 默认不保证结果的可复现性,以确保性能。您需要执行以下操作才能获得可复现的结果

  • 对于 V1:通过设置 VLLM_ENABLE_V1_MULTIPROCESSING=0 来关闭多进程,以使调度具有确定性。
  • 对于 V0:设置全局种子(参见下文)。

示例: examples/offline_inference/reproducibility.py

警告

应用上述设置会改变用户代码中的随机状态

注意

即使采用上述设置,vLLM 也仅在相同的硬件和相同的 vLLM 版本下运行时提供可复现性。此外,在线服务 API (vllm serve) 不支持可复现性,因为在在线环境中几乎不可能使调度具有确定性。

设置全局种子

vLLM 中的 seed 参数用于控制各种随机数生成器的随机状态。

如果提供了特定的种子值,则 randomnp.randomtorch.manual_seed 的随机状态将相应设置。

然而,在某些情况下,设置种子也会改变用户代码中的随机状态

默认行为

在 V0 中,seed 参数默认为 None。当 seed 参数为 None 时,randomnp.randomtorch.manual_seed 的随机状态未设置。这意味着如果 temperature > 0,vLLM 的每次运行将产生不同的结果,这是符合预期的。

在 V1 中,seed 参数默认为 0,它为每个 worker 设置随机状态,因此即使 temperature > 0,每次 vLLM 运行的结果也将保持一致。

注意

无法为 V1 取消指定种子,因为不同的 worker 需要为推测解码等工作流采样相同的输出。

更多信息,请参阅: 拉取请求 #17929

随机状态的局部性

用户代码中(即构建 LLM 类的代码)的随机状态在以下情况下由 vLLM 更新

  • 对于 V0:指定了种子。
  • 对于 V1:worker 与用户代码在同一进程中运行,即:VLLM_ENABLE_V1_MULTIPROCESSING=0

默认情况下,这些条件不活跃,因此您可以放心地使用 vLLM,而不必担心意外地使依赖随机状态的后续操作变为确定性。