我正在调查这个问题。通过运行examples/offline_inference.py并使用以下输入: sampling_params = SamplingParams(temperature=0.0, max_tokens=10) llm = LLM(model="meta-llama/Meta-Llama-3-8B") 发现了bug,但只有在向输入批次中添加/删除提示时才会出现bug。在较旧的版本(v0.3.3、v0.4.2、v0.4.3)中也看到了相同的行为。 参考输出: 来自第一批次的提示:'Hello, my name is',生成的文本:" and I'm writing you today to learn more about" 来自第一批次的提示:'The capital of France is',生成的文本:' Paris, which is located in the north of the' VS 来自第二批次的提示:'Hello, my name is',生成的文本:" and I'm writing you today to learn more about" 来自第二批次的提示:'The capital of France is',生成的文本:' Paris. It is located in the north of the' 来自第二批次的提示:'The future of AI is',生成的文本:' here, and it’s already changing the way we'
8条答案
按热度按时间nzrxty8p1#
你好,
我看到即使将温度设置为0,对于相同的提示也会出现不同的结果。完整的采样参数是:
版本刚刚更新到v0.4.3。
a11xaf1n2#
我正在调查这个问题。通过运行examples/offline_inference.py并使用以下输入:
sampling_params = SamplingParams(temperature=0.0, max_tokens=10)
llm = LLM(model="meta-llama/Meta-Llama-3-8B")
发现了bug,但只有在向输入批次中添加/删除提示时才会出现bug。在较旧的版本(v0.3.3、v0.4.2、v0.4.3)中也看到了相同的行为。
参考输出:
来自第一批次的提示:'Hello, my name is',生成的文本:" and I'm writing you today to learn more about"
来自第一批次的提示:'The capital of France is',生成的文本:' Paris, which is located in the north of the'
VS
来自第二批次的提示:'Hello, my name is',生成的文本:" and I'm writing you today to learn more about"
来自第二批次的提示:'The capital of France is',生成的文本:' Paris. It is located in the north of the'
来自第二批次的提示:'The future of AI is',生成的文本:' here, and it’s already changing the way we'
mspsb9vt3#
当我进入$x_{1m0n1}^{x}$代码并检查$x_{1m1n1}^{x}$时,所有字段看起来都如预期。在采样阶段之前,将进一步调查模型输出。
$x_{1a0b1}^{x}$
2eafrhcq4#
是否有任何脚本可以用于重现此问题?
我已调查了 #5607,它似乎与之相关,但经过一些挖掘后,该错误似乎与某些请求中存在
repetition_penalty
有关,而其他请求则没有。在这种情况下似乎并非如此。wwodge7n5#
我认为 #5607 解决了另一个问题。在比较温度缩放前后的logits之后,我意识到零温度错误地被重新分配给了1.0。它应该是
temperature = _SAMPLING_EPS
而不是。https://github.com/vllm-project/vllm/blob/main/vllm/model_executor/sampling_metadata.py#L359-L363
mftmpeh86#
我认为 #5607 解决了另一个问题。在比较温度缩放前后的logits后,我发现零温度错误地被重新分配给了1.0。它应该是
temperature = _SAMPLING_EPS
而不是。https://github.com/vllm-project/vllm/blob/main/vllm/model_executor/sampling_metadata.py#L359-L363
我认为这几行代码很可能与这个问题有关,但是否应该将温度设置为 _SAMPLING_EPS 还有待解决。我很快测试了这个修改,不幸的是,发现解码结果变成了无意义的输出。
o7jaxewo7#
🐛 描述bug
在使用不同的生成配置时,例如 top_k=1 或 temperature=0(同时保持其他设置不变),为什么生成的结果会发生变化?它们应该都对应于确定性贪婪解码。vllm 0.4.3
补充:
这里遇到的主要问题是,将温度系数设置为0或topk设置为1所产生的结果不同。我理解这是由于算子优化以及浮点数中缺乏传统算术属性所导致的,矩阵操作具有一定的随机性。然而,采样过程发生在生成隐藏状态之后,此时不涉及任何计算。因此,两个采样参数的采样结果应该是相同的。
你好,@rangehow,请问你使用哪个模型产生了这个bug?
最近,当我为一个GPTQ量化模型设置 top_k=1(或 temperature=0)时,遇到了相同的不一致行为。我深入研究了中间输出,发现与
sampling_metadata
无关,而是与hidden_state
有关。对于相同的提示,logits_procesor
的hidden_state
输入已经略有不同。然而,当我使用非量化的 fp16(bf16)模型时,无法重现这个bug。
kqqjbcuj8#
🐛 描述bug
在使用不同的生成配置时,例如 top_k=1 或 temperature=0(同时保持其他设置不变),为什么生成的结果会发生变化?它们应该都对应于确定性贪婪解码。vllm 0.4.3
补充:
这里遇到的主要问题是,将温度系数设置为0或topk设置为1所产生的结果不同。我理解这是由于算子优化以及浮点数中缺乏传统算术属性所导致的,矩阵操作具有一定的随机性。然而,采样过程发生在隐藏状态生成之后,此时不涉及任何计算。因此,两个采样参数的采样结果应该是相同的。
你好,@rangehow,请问你使用哪个模型产生了这个bug?
最近,当我为一个GPTQ量化模型设置 top_k=1(或 temperature=0)时,遇到了相同的不一致行为。我深入研究了中间输出,发现与
sampling_metadata
无关,而是与hidden_state
有关。对于相同的提示,logits_procesor
的hidden_state
输入已经略有不同。然而,当我使用非量化的 fp16(bf16)模型时,无法重现这个bug。
gemma-2b 😃