跳到內容

可復現性

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,而不必擔心意外地使依賴隨機狀態的後續操作變為確定性。