两者(CLI serve部署与离线pipeline部署)在精度上理论上应无明显差别,只要模型权重、推理参数完全一致。但实际测试中,API服务和离线推理结果可能会有细微差异,主要原因是数值精度、批处理方式、并发调度等带来的浮点误差和非确定性,尤其是在float16/bfloat16等低精度下,这种差异会被放大,导致生成结果甚至logprobs有较大不同。官方FAQ明确说明vLLM不保证完全稳定的输出和logprobs。
此外,vLLM和transformers等实现间也会有类似现象,根本原因是底层算子、批处理、硬件等引入的微小数值不一致会逐步放大,最终影响生成内容。相关讨论和官方说明均有详细解释。
需要更详细的原理分析或复现建议吗?
Sources: