lmdeploy icon indicating copy to clipboard operation
lmdeploy copied to clipboard

同样的 prompt 和采样参数,输出有差异

Open Time-Limit opened this issue 2 years ago • 10 comments

Checklist

  • [X] 1. I have searched related issues but cannot get the expected help.
  • [ ] 2. The bug has not been fixed in the latest version.

Describe the bug

发送两次下述请求

<|im_start|>system
You are a helpful assistant.<|im_end|>
<|im_start|>user
推荐10本书,既适合4岁儿童并且也适合18年成年人?<|im_end|>

输出有diff image

Reproduction

模型:qwen-72B-chat 的开源模型 部署方式:tritonserver + fp16 推理 max_batch_size = 2

重复发送两次请求

<|im_start|>system
You are a helpful assistant.<|im_end|>
<|im_start|>user
推荐10本书,既适合4岁儿童并且也适合18年成年人?<|im_end|>

采样参数 image

Environment

运行 lmdeploy check_env 报错了。。

Error traceback

No response

Time-Limit avatar Jan 17 '24 05:01 Time-Limit

符合预期,就是要两次运行结果不一样。

AllentDan avatar Jan 17 '24 06:01 AllentDan

@AllentDan 为什么结果不一样符合预期呢?我理解相同的输入,相同的采样参数,输出不应该是稳定的么?

Time-Limit avatar Jan 17 '24 08:01 Time-Limit

还有随机种子,内部每次都会做随机的

AllentDan avatar Jan 17 '24 08:01 AllentDan

@AllentDan 为什么结果不一样符合预期呢?我理解相同的输入,相同的采样参数,输出不应该是稳定的么?

不一样的,其中tempature控制了返回的多样性,如果你想固定返回可以尝试将temperature设置为0.01,多次请求查看结果

zhulinJulia24 avatar Jan 17 '24 08:01 zhulinJulia24

@AllentDan 我也传入了 random_seed = 42,这个种子一样的话后续产生的随机数也都会一样吧?

Time-Limit avatar Jan 17 '24 08:01 Time-Limit

@zhulinJulia24 tempature 应该是配合 random seed 一起使用吧?我理解这些采样参数都一样的话,输出应该是稳定的吧?

Time-Limit avatar Jan 17 '24 08:01 Time-Limit

@AllentDan 我也传入了 random_seed = 42,这个种子一样的话后续产生的随机数也都会一样吧?

你在哪传的?api_server 没 random_seed 参数暴露出来啊

AllentDan avatar Jan 17 '24 08:01 AllentDan

@AllentDan 我也传入了 random_seed = 42,这个种子一样的话后续产生的随机数也都会一样吧?

你在哪传的?api_server 没 random_seed 参数暴露出来啊

现在使用 tritonserver 加载 libtriton_turbomind.so 部署的,tritonserver 看着是可以传 random_seed 的。

Time-Limit avatar Jan 17 '24 08:01 Time-Limit

把采样关了试试,用greedy模式

datalee avatar Jan 24 '24 08:01 datalee

遇到相同的问题,按理相同的采样参数如temperature,random_seed等,输出的结果应该保存稳定,现在是有差异

qingtao12138 avatar Mar 11 '24 06:03 qingtao12138

有什么解决方法吗?

kaishxu avatar Jun 19 '24 02:06 kaishxu

把采样关了试试,用greedy模式

对,直接 top_k 设置 1

AllentDan avatar Jun 19 '24 02:06 AllentDan

把采样关了试试,用greedy模式

对,直接 top_k 设置 1

没有彻底解决问题,我试过temperature为0,top_k为1,1000个样本仍然有5%是不一样的,很神奇

kaishxu avatar Jun 19 '24 02:06 kaishxu

top_k为1确实也会存在随机性,不知道是否可以参考ollama的seed方式,能确保一致性:https://github.com/ollama/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values seed Sets the random number seed to use for generation. Setting this to a specific number will make the model generate the same text for the same prompt. (Default: 0) int seed 42

datalee avatar Jun 21 '24 00:06 datalee