常见问题#
问:如何使用OpenAI API在单个端口上服务多个模型?
A: 假设你指的是使用兼容OpenAI的服务器同时服务多个模型,目前不支持这种操作。你可以同时运行多个服务器实例(每个实例服务不同的模型),并使用另一层来根据传入的请求将请求路由到正确的服务器。
Q: 用于离线推理嵌入的模型是哪个?
A: 如果你想使用一个嵌入模型,可以尝试:https://huggingface.co/intfloat/e5-mistral-7b-instruct。而像 Llama-3-8b, Mistral-7B-Instruct-v0.3 这样的模型,是生成模型而不是嵌入模型。
Q: 在 vLLM 中,提示的输出在不同运行中会有所不同吗?
A: 是的,它可以。vLLM 不保证输出标记的稳定对数概率(logprobs)。由于 Torch 操作中的数值不稳定性或批处理变化时批处理 Torch 操作的非确定性行为,logprobs 可能会发生变化。更多详情,请参见 数值精度部分。
在 vLLM 中,由于其他并发请求、批次大小的变化或推测解码中的批次扩展等因素,相同的请求可能会以不同的方式进行批次处理。这些批次变化,加上 Torch 操作的数值不稳定性,可能导致每一步的 logit/logprob 值略有不同。这种差异可能会累积,潜在地导致采样出不同的 token。一旦采样出不同的 token,进一步的分歧就很可能发生。
缓解策略
为了提高稳定性和减少方差,请使用 float32。请注意,这将需要更多的内存。
如果使用 bfloat16,切换到 float16 也可以有所帮助。
使用请求种子可以在温度 > 0 时有助于实现更稳定的生成,但由于精度差异,差异仍可能发生。