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