MindIE 推理采样后处理参数 temperature 和 top_k 的引发的精度问题
背景
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 概率相近且都有被选中的概率,那么就会有精度问题。
评论