常见问题¶
问:如何使用 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 操作在批处理更改时的非确定性行为造成的。更多详细信息,请参阅数值精度部分。
在 vLLM 中,由于其他并发请求、批处理大小的变化或推测解码中的批处理扩展等因素,相同的请求可能会以不同的方式进行批处理。这些批处理差异,结合 Torch 操作的数值不稳定性,可能导致每一步的 logit/logprob 值略有不同。这些差异会累积,可能导致采样到不同的 token。一旦采样到不同的 token,进一步的差异就可能会出现。
缓解策略¶
- 为了提高稳定性和减少方差,请使用
float32
。请注意,这将需要更多内存。 - 如果使用
bfloat16
,切换到float16
也有帮助。 - 对于温度 > 0 的情况,使用请求种子有助于实现更稳定的生成,但由于精度差异仍可能出现偏差。