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