跳至内容

可复现性

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,这会为每个工作进程设置随机状态,因此即使temperature > 0,每次vLLM运行的结果也将保持一致。

注意

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

更多信息,请参阅: Pull Request #17929

随机状态的局部性

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

  • 对于V0版本:种子已指定。
  • 对于V1版本:工作线程与用户代码运行在同一进程中,即:VLLM_ENABLE_V1_MULTIPROCESSING=0

默认情况下,这些条件处于非激活状态,因此您可以使用vLLM而无需担心意外使依赖随机状态的后续操作变得确定性。

优云智算