批量不变性¶
注意
批量不变性目前处于 Beta 测试阶段。一些功能仍在积极开发中。请在 Issue #27433 上跟踪进度和计划的改进。
本文档展示了如何在 vLLM 中启用批量不变性。批量不变性可确保模型的输出是确定性的,并且独立于批处理大小或批处理中请求的顺序。
动机¶
批量不变性对于多种用例至关重要
- 框架调试:确定性输出使调试推理框架中的问题更加容易,因为相同的输入始终会产生相同的输出,而与批处理无关。
- 模型调试:通过确保不同批处理配置下的行为一致性,帮助识别模型实现中的问题。
- 强化学习 (RL):RL 训练通常需要确定性的回滚以实现可重现性和稳定的训练。
- 大规模推理系统:将 vLLM 用作组件的系统可以从确定性行为中受益,以进行测试、验证和一致性保证。
硬件要求¶
批量不变性目前需要计算能力为 9.0 或更高版本的 NVIDIA GPU。
- H 系列:H100, H200
- B 系列:B100, B200
启用批量不变性¶
可以通过将 VLLM_BATCH_INVARIANT 环境变量设置为 1 来启用批量不变性。
在线推理(服务器模式)¶
要启动具有批量不变性启用的 vLLM 服务器,请执行以下操作:
然后使用兼容 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 3:
meta-llama/Llama-3.1-8B-Instruct,meta-llama/Llama-3.2-1B-Instruct
其他模型也可能有效,但这些模型已获得明确验证。如果您在特定模型上遇到问题,请在 GitHub 问题跟踪器 上报告。
实现细节¶
启用批量不变性后,vLLM 将:
- 对注意力和其他操作使用确定性内核实现。
- 确保不同批处理大小下的数值行为一致。
- 禁用可能引入非确定性的某些优化(例如,在张量并行模式下的自定义 all-reduce 操作)。
注意
启用批量不变性可能会影响性能,与默认的非确定性模式相比。这种权衡是故意的,以保证可重现性。
未来改进¶
批量不变性功能正在积极开发中。计划的改进包括:
- 对更多 GPU 架构的支持。
- 扩展模型覆盖范围。
- 性能优化。
- 其他测试和验证。
有关最新状态和贡献想法,请参阅 跟踪问题。