跳到內容

批次不變性

注意

批次不變性目前處於 Beta 測試階段。一些功能仍在積極開發中。請在 Issue #27433 上跟蹤進度和計劃的改進。

本文件展示瞭如何在 vLLM 中啟用批次不變性。批次不變性可確保模型的輸出是確定性的,並且獨立於批處理大小或批處理中請求的順序。

動機

批次不變性對於多種用例至關重要

  • 框架除錯:確定性輸出使除錯推理框架中的問題更加容易,因為相同的輸入始終會產生相同的輸出,而與批處理無關。
  • 模型除錯:透過確保不同批處理配置下的行為一致性,幫助識別模型實現中的問題。
  • 強化學習 (RL):RL 訓練通常需要確定性的回滾以實現可重現性和穩定的訓練。
  • 大規模推理系統:將 vLLM 用作元件的系統可以從確定性行為中受益,以進行測試、驗證和一致性保證。

硬體要求

批次不變性目前需要計算能力為 9.0 或更高版本的 NVIDIA GPU。

  • H 系列:H100, H200
  • B 系列:B100, B200

啟用批次不變性

可以透過將 VLLM_BATCH_INVARIANT 環境變數設定為 1 來啟用批次不變性。

export VLLM_BATCH_INVARIANT=1

線上推理(伺服器模式)

要啟動具有批次不變性啟用的 vLLM 伺服器,請執行以下操作:

VLLM_BATCH_INVARIANT=1 vllm serve meta-llama/Llama-3.1-8B-Instruct

然後使用相容 OpenAI 的客戶端。

from openai import OpenAI

client = OpenAI(
    api_key="EMPTY",
    base_url="https://:8000/v1",
)

# These requests will produce deterministic outputs
# regardless of batch size or order
response = client.completions.create(
    model="meta-llama/Llama-3.1-8B-Instruct",
    prompt="The future of AI is",
    max_tokens=100,
    temperature=0.7,
    seed=42,
)

print(response.choices[0].text)

離線推理

對於具有批次不變性的離線批處理推理,請執行以下操作:

import os
os.environ["VLLM_BATCH_INVARIANT"] = "1"

from vllm import LLM, SamplingParams

prompts = [
    "The future of AI is",
    "Machine learning enables",
    "Deep learning models can",
]

sampling_params = SamplingParams(
    temperature=0.7,
    top_p=0.95,
    max_tokens=100,
    seed=42,
)

llm = LLM(
    model="meta-llama/Llama-3.1-8B-Instruct",
    tensor_parallel_size=1,
)

# Outputs will be deterministic regardless of batch size
outputs = llm.generate(prompts, sampling_params)

for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}")
    print(f"Generated: {generated_text!r}\n")

已測試模型

批次不變性已在以下模型上進行了測試和驗證:

  • DeepSeek 系列deepseek-ai/DeepSeek-V3, deepseek-ai/DeepSeek-V3-0324, deepseek-ai/DeepSeek-R1, deepseek-ai/DeepSeek-V3.1
  • Qwen3 (密集型)Qwen/Qwen3-1.7B, Qwen/Qwen3-8B
  • Qwen3 (MoE)Qwen/Qwen3-30B-A3B, Qwen/Qwen3-Next-80B-A3B-Instruct
  • Llama 3meta-llama/Llama-3.1-8B-Instruct, meta-llama/Llama-3.2-1B-Instruct

其他模型也可能有效,但這些模型已獲得明確驗證。如果您在特定模型上遇到問題,請在 GitHub 問題跟蹤器 上報告。

實現細節

啟用批次不變性後,vLLM 將:

  1. 對注意力和其他操作使用確定性核心實現。
  2. 確保不同批處理大小下的數值行為一致。
  3. 停用可能引入非確定性的某些最佳化(例如,在張量並行模式下的自定義 all-reduce 操作)。

注意

啟用批次不變性可能會影響效能,與預設的非確定性模式相比。這種權衡是故意的,以保證可重現性。

未來改進

批次不變性功能正在積極開發中。計劃的改進包括:

  • 對更多 GPU 架構的支援。
  • 擴充套件模型覆蓋範圍。
  • 效能最佳化。
  • 其他測試和驗證。

有關最新狀態和貢獻想法,請參閱 跟蹤問題