可复现性¶
vLLM 默认不保证结果的可复现性,以确保性能。您需要执行以下操作才能获得可复现的结果
- 对于 V1:通过设置
VLLM_ENABLE_V1_MULTIPROCESSING=0
来关闭多进程,以使调度具有确定性。 - 对于 V0:设置全局种子(参见下文)。
示例: examples/offline_inference/reproducibility.py
警告
应用上述设置会改变用户代码中的随机状态。
注意
即使采用上述设置,vLLM 也仅在相同的硬件和相同的 vLLM 版本下运行时提供可复现性。此外,在线服务 API (vllm serve
) 不支持可复现性,因为在在线环境中几乎不可能使调度具有确定性。
设置全局种子¶
vLLM 中的 seed
参数用于控制各种随机数生成器的随机状态。
如果提供了特定的种子值,则 random
、np.random
和 torch.manual_seed
的随机状态将相应设置。
然而,在某些情况下,设置种子也会改变用户代码中的随机状态。
默认行为¶
在 V0 中,seed
参数默认为 None
。当 seed
参数为 None
时,random
、np.random
和 torch.manual_seed
的随机状态未设置。这意味着如果 temperature > 0
,vLLM 的每次运行将产生不同的结果,这是符合预期的。
在 V1 中,seed
参数默认为 0
,它为每个 worker 设置随机状态,因此即使 temperature > 0
,每次 vLLM 运行的结果也将保持一致。
随机状态的局部性¶
用户代码中(即构建 LLM 类的代码)的随机状态在以下情况下由 vLLM 更新
- 对于 V0:指定了种子。
- 对于 V1:worker 与用户代码在同一进程中运行,即:
VLLM_ENABLE_V1_MULTIPROCESSING=0
。
默认情况下,这些条件不活跃,因此您可以放心地使用 vLLM,而不必担心意外地使依赖随机状态的后续操作变为确定性。