背景
MindIE跑Qwen系列模型推理,测试发现后处理参数top_k很大,temperature=2的场景,模型输出有精度问题。
现象
经过进一步复现和测试,发现如下现象。
在Ascend的npu上面temperature=2和top_k很大时有精度问题。
添加图片注释,不超过 140 字(可选)
在gpu也有同样问题
添加图片注释,不超过 140 字(可选)
原因分析
MindIE的后处理
后处理参数的顺序temperature > top_k > softmax > top_p,查看代码可知temperature 的使用方式是logits/temperature ,即temperature 越大,各个logits之间的差就越小,在softmax阶段,根据softmax的原理,值差距越小,token概率就越接近(意味着很难选到正确的token,极端情况有精度问题)。
过程分析
后处理过程:temperature=2 时。temperature处理后,logits值差距变小,如果top_k比较大,则大量logits进入softmax,且softmax后概率都比较接近。在top_p之后,大部分token都有可能被选到且概率相近,容易出现精度问题,如果top_k变小或者top_p变小则不容易出现。
验证:
将top_p设置小,npu无精度问题。
添加图片注释,不超过 140 字(可选)
将top_k设置小,npu无精度问题。
添加图片注释,不超过 140 字(可选)
将top_k设置小,gpu无精度问题
添加图片注释,不超过 140 字(可选)
经验总结
1、后处理顺序temperature > top_k > softmax > top_p。 2、temperature处理原理 logits/temperature(注意此时logits不是概率)。 3、softmax特点:值差距越大,输出的概率差距越大,且非线性。 4、如果大部分token概率相近且都有被选中的概率,那么就会有精度问题。