常见问题¶
问:如何使用 OpenAI API 在单个端口上提供多个模型?
答:假设您是指使用 OpenAI 兼容服务器一次性提供多个模型,目前不支持。您可以同时运行该服务器的多个实例(每个实例提供不同的模型),并设置另一层来将传入请求正确路由到相应的服务器。
问:离线推理嵌入使用哪个模型?
答:您可以尝试 e5-mistral-7b-instruct 和 BAAI/bge-base-en-v1.5;更多模型列表请参阅 此处。
通过提取隐藏状态,vLLM 可以自动将文本生成模型(如 Llama-3-8B、Mistral-7B-Instruct-v0.3)转换为嵌入模型,但预期效果会逊色于专门为嵌入任务训练的模型。
问:vLLM 中提示的输出在每次运行时会不同吗?
答:是的,可能会。vLLM 不保证输出 token 的稳定对数概率(logprobs)。由于 Torch 操作中的数值不稳定性或批处理 Torch 操作在批处理发生变化时的非确定性行为,可能会出现 logprobs 的差异。有关更多详细信息,请参阅 数值精度部分。
在 vLLM 中,由于其他并发请求、批次大小的变化或推断性解码中的批次扩展等因素,相同的请求可能会被不同地批处理。这些批处理的变化,加上 Torch 操作的数值不稳定性,可能导致每一步的 logit/logprob 值略有不同。这种差异可能会累积,最终导致采样到不同的 token。一旦采样到不同的 token,很可能会进一步发散。
缓解策略¶
- 为了提高稳定性和减少方差,请使用
float32。请注意,这将需要更多内存。 - 如果使用
bfloat16,切换到float16也有帮助。 - 使用请求种子(request seeds)有助于在 temperature > 0 时实现更稳定的生成,但由于精度差异引起的不一致仍可能发生。