news 2026/5/6 13:08:41

【精度】【核间同步】torch_npu.fused_linear_online_max_sum概率性精度不达标问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【精度】【核间同步】torch_npu.fused_linear_online_max_sum概率性精度不达标问题

1、问题背景

torch_npu.fused_linear_online_max_sum接口在批量执行多个用例的过程中,存在几条用例精度偶现不达标的现象,且每次失败的用例位置可能不一致,接口的多个输出中仅predicted_logits_local输出参数存在精度问题(有精度问题的输出值数值较大,且与cpu对比精度相对误差几十~几千倍不等),需要这一概率性精度失败的原因。

2、定位过程

由于在批跑用例时是存在概率性精度问题,导致这种现象最有可能的因素就是内存踩踏或者同步问题,因此从这两个方面进行排查。

2.1、注释掉其他输出的写入,排除内存踩踏影响

首先是被其他参数的内存踩踏问题,算子本身存在多个输出tensor,有可能predicted_logits_local输出tensor所占的空间被其他输出数据踩踏导致数值输出不正确。笔者通过将其他输出的写入(即搬出到GM)注释掉,保证只有predicted_logits_local进行搬出,同时依据指令排查对应的地址、拷贝元素,判定指令无越界可能。但经过测试,问题依然存在,非内存踩踏导致。

2.2、predicted_logits_local的计算逻辑

进一步排查是否为同步问题,笔者将predicted_logits_local所涉及到的所有操作包含搬入、搬出、计算过程简化了一下,计算逻辑主要有下面红框中从上往下①~④四个部分,其中绿框部分①InitOutputAndWorkspace、③CVProcess、④AllReduceProces过程都涉及到了拷贝结果到predicted_logits_local上的操作,我们根据这一过程分步进行定位。

2.2.1、初始化的尝试

从①InitOutputAndWorkspace初始化部分尝试定位
(1)仅保留predicted_logits_local初始化0的操作,注释掉InitOutputAndWorkspace后续predicted_logits_local的搬出操作,此时批跑predicted_logits_local结果都是0符合预期。
(2)初始化时不初始化为0,而是将predicted_logits_local初始化为shape大小的固定元素值(使多个用例初始化成不同的固定值,便于定位是否有异常),同样注释掉InitOutputAndWorkspace后续predicted_logits_local的搬出操作,批跑后结果都为固定元素值,也符合预期。
基于上述两点排除初始化的问题:初始化值正确,并且也和2.1相互印证确实没有被其他参数搬出过程踩踏。

2.2.2、CV融合计算过程中的尝试

(1)注释掉④AllReduceProces中的predicted_logits_local搬出操作,即predicted_logits_local仅输出③CVProcess中的临时计算结果,在输入数据相同情况下多次批跑后仍存在精度不一致的现象,确认问题由③CVProcess这一部分引入。
(2)观察③CVProcess中关于predicted_logits_local的计算,依赖于②TargetProcess中的计算结果maskedTarget和③CVProcess中的Cube计算结果vocabParallelLogitsOutOptional,(1)中已经判断出③CVProcess计算后predicted_logits_local搬出结果存在问题,因此首先怀疑是③中predicted_logits_local计算过程中可能存在同步问题。

笔者尝试在predicted_logits_local计算过程中的所有指令间都插入PipeBarrier<PIPE_ALL>(),发现依然存在概率性精度不达标现象,因此可以排除此处同步问题。
(3)在(2)的基础上,笔者注释掉predicted_logits_local计算逻辑,直接将其依赖参数vocabParallelLogitsOutOptionalmaskedTarget分别拷贝到predicted_logits_local中输出,保持相同输入数据多次批跑,发现将maskedTarget拷贝出predicted_logits_local的时候,predicted_logits_local出现前后精度不一致的的现象,这说明predicted_logits_local计算时获取到的maskedTarget数据问题。

maskedTarget自身最终输出没有精度问题,但在predicted_logits_local计算时获取到的maskedTarget数值不正确,基于这一现象,问题确认为是predicted_logits_local计算时maskedTarget数据未计算完成导致计算错误。由于maskedTarget数据是在②TargetProcess中vec核上计算得到,而③CVProcesspredicted_logits_local数据计算涉及matmul过程,而matmul使用到了cube核计算,那么问题基本就缩小到了核间未同步导致。在vec核cube计算之间插入syncall(false)核间同步,再次批跑,概率性精度失败问题消失。

3、问题根因

predicted_logits_local依赖maskedTarget结算结果,maskedTarget在vec核上还未完全计算完情况下便使用cube核进行了相关matmul计算,导致predicted_logits_local计算过程中读取到了脏数据,每次批跑用例出现概率性失败的现象发生。

4、解决方案

TargetProcessCVProcess中间插入全核同步,保证maskedTarget计算完成后再进行predicted_logits_local相关计算。重新批跑执行用例,此时结果都pass。

5、经验总结

(1)同步问题不仅存在单核内计算过程中,当kernel计算过程中涉及到cube和vector的协同(此次精度失败的点)或者多个核之间数据依赖(通常在初始化操作或者某个核计算的结果需要提供给其他核使用)时,也需要关注核与核之间的同步。
(2)对于概率性失败问题,可以罗列出问题参数涉及的运算过程,从初始化到结果搬出过程逐步注释掉后续的一部分计算过程定位到异常产生的地方,针对异常的发生的位置进行数据依赖、数据空间复用、数据指针越界等检查,确保数据计算前置依赖已经完成,空间之间不会相互踩踏,指针不会越界影响到其他参数。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 11:03:33

巧妙运用Excel矩阵函数与ABS:斜角平均值计算与业绩升降分析

一、单位矩阵MUNIT函数的精妙应用 1.1 MUNIT函数简介 MUNIT函数是Excel中的矩阵函数&#xff0c;用于生成指定维度的单位矩阵。单位矩阵是一个主对角线元素为1&#xff0c;其余元素为0的方阵。 语法&#xff1a;MUNIT(dimension) 参数&#xff1a;dimension - 矩阵的维度&…

作者头像 李华
网站建设 2026/5/3 10:21:32

计算机Python毕设实战-基于python的媒体资源管理系统设计与实现多媒体素材/素材管理系统/多媒体资源管理/媒体资产管理系统/数字资产【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/1 11:16:58

Python计算机毕设之基于Python的个人身心健康管理系统个人健康自助记录查询系统(完整前后端代码+说明文档+LW,调试定制等)

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

作者头像 李华
网站建设 2026/4/26 2:31:19

用 AIQT 实现双均线策略

AIQT 爱量化工作台&#xff08;https://aiqt.cc/&#xff09;是供普通股民设计和回测量化策略的页面&#xff0c;下面我们尝试一下用它实现常见的双均线策略。 基本实践 第一步&#xff1a;查看股票数据 打开页面&#xff0c; 在左上角输入 "600690"&#xff08;海…

作者头像 李华
网站建设 2026/5/1 9:16:15

美客多平台关键词商品搜索API接口实践指南

引言 美客多作为拉美领先的电商平台&#xff0c;其开放平台提供了丰富的API接口&#xff0c;赋能开发者构建各类电商应用。其中&#xff0c;商品搜索API是获取平台商品信息的关键入口。本文将详细介绍如何调用美客多平台的关键词商品搜索API接口&#xff0c;包括核心概念、请求…

作者头像 李华