背景

MindIE跑Qwen系列模型推理,测试发现后处理参数top_k很大,temperature=2的场景,模型输出有精度问题。

现象

经过进一步复现和测试,发现如下现象。

在Ascend的npu上面temperature=2和top_k很大时有精度问题。
在这里插入图片描述
在gpu也有同样问题
在这里插入图片描述

原因分析

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无精度问题。
在这里插入图片描述
将top_k设置小,npu无精度问题。
在这里插入图片描述
将top_k设置小,gpu无精度问题
在这里插入图片描述

经验总结

1、后处理顺序temperature > top_k > softmax > top_p。
2、temperature处理原理 logits/temperature(注意此时logits不是概率)。
3、softmax特点:值差距越大,输出的概率差距越大,且非线性。
4、如果大部分token概率相近且都有被选中的概率,那么就会有精度问题。


zjun
4 声望1 粉丝

AI追风者