可复现性¶
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,这会为每个工作进程设置随机状态,因此即使temperature > 0,每次vLLM运行的结果也将保持一致。
随机状态的局部性¶
用户代码中的随机状态(即构造LLM类的代码)在以下情况下会被vLLM更新:
- 对于V0版本:种子已指定。
- 对于V1版本:工作线程与用户代码运行在同一进程中,即:
VLLM_ENABLE_V1_MULTIPROCESSING=0。
默认情况下,这些条件处于非激活状态,因此您可以使用vLLM而无需担心意外使依赖随机状态的后续操作变得确定性。