已关闭
[Bug]: aclgraph 静态编译无法自动安装编译出来的run包 #436
fengqiuyue创建于  4月20日关闭于  4月21日
fengqiuyue
4月20日 创建

在提交问题之前,请通过搜索现有和历史问题确保该问题尚未被提出并解决。

您的环境信息

-- CANN 版本 9.0.0:  
-- Pytorch/Torch_npu 版本  v2.9.0:
-- Python 版本 Python3.11:
-- 操作系统版本 openEuler 22.03 LTS:

🐛 请描述bug

aclgraph 静态编译无法自动安装编译出来的run包,想咨询一下aclgraph 静态编译是否已经稳定支持,是否可以提供稳定版本的CANN包和torch_npu包

likedislike
Ffengqiuyue
4月20日 添加了label:bug
gleaming-spark成员
4月20日 评论:

请提供一下自动安装编译出来的run包的日志呢?当前使用的CANN和torch_npu版本是多少?

likedislike
Ggleaming-spark成员
4月20日 将 gleaming-spark 设为负责人
fengqiuyue
4月20日 评论:

请提供一下自动安装编译出来的run包的日志呢?当前使用的CANN和torch_npu版本是多少?

@gleaming-spark

这个日志是指的plog日志还是什么别的日志呢,需要设置什么环境变量吗

likedislike
gleaming-spark成员
4月20日 评论:

python侧的日志,两种设置方式如下:
1、TorchAir Python层日志
2、图编译完整Debug信息保存功能

likedislike
fengqiuyue
4月20日 评论:

我们更换了cann包为4月13日最新cann包后,可以自动安装了,之前用的cann包为4月3日的。另外想咨询一下,我们是自定义新算子开发,在python调用脚本中如果不使用静态编译,也就是设置model = torch.compile(model, backend="npugraph_ex", options={"static_kernel_compile": False}, dynamic=False),算子的精度是正确的,如果设置model = torch.compile(model, backend="npugraph_ex", options={"static_kernel_compile": True}, dynamic=False),算子静态编译没有ERROR,但是算子的精度是错误的,请问可能是什么原因呢,或者有什么定位方式呢,静态编译场景下有什么方法可以打印算子kernel实现内部的数据吗。

likedislike
gleaming-spark成员
4月20日 评论:

可以参考:算子Data Dump功能

likedislike
fengqiuyue
4月20日 评论:

感谢,我们用这个dump功能发现,在静态编译场景下会dump出现两次输入一次输出,在非静态编译场景下只有一次输入一次输出。我们的算子中有一个原地更新入参,导致静态编译场景下两次输入的原地更新入参不一致,最终导致了最后一次静态执行的精度与cpu相比不一样,因为最后一次执行的原地更新输入不同。在plog中,我们发现静态编译确实会出现两次执行算子,一次动态执行,一次静态执行。请问这两次执行之间是什么导致了原地更新入参被更新呢。

likedislike
gleaming-spark成员
4月20日 评论:

感谢,我们用这个dump功能发现,在静态编译场景下会dump出现两次输入一次输出,在非静态编译场景下只有一次输入一次输出。我们的算子中有一个原地更新入参,导致静态编译场景下两次输入的原地更新入参不一致,最终导致了最后一次静态执行的精度与cpu相比不一样,因为最后一次执行的原地更新输入不同。在plog中,我们发现静态编译确实会出现两次执行算子,一次动态执行,一次静态执行。请问这两次执行之间是什么导致了原地更新入参被更新呢。

@fengqiuyue
可以提供下脚本,根据fx图与日志一起分析一下

likedislike
fengqiuyue
4月21日 评论:
fengqiuyue
4月21日 评论:

感谢,我们用这个dump功能发现,在静态编译场景下会dump出现两次输入一次输出,在非静态编译场景下只有一次输入一次输出。我们的算子中有一个原地更新入参,导致静态编译场景下两次输入的原地更新入参不一致,最终导致了最后一次静态执行的精度与cpu相比不一样,因为最后一次执行的原地更新输入不同。在plog中,我们发现静态编译确实会出现两次执行算子,一次动态执行,一次静态执行。请问这两次执行之间是什么导致了原地更新入参被更新呢。

@fengqiuyue
可以提供下脚本,根据fx图与日志一起分析一下

@gleaming-spark

日志:a09ac698e40f44ddb2c1747ec2f2626a.log

likedislike
fengqiuyue
4月21日 评论:

另外想咨询一下如何打开FX图,我们设置了export TORCH_COMPILE_DEBUG=1,得到了一些txt文件

likedislike
gleaming-spark成员
4月21日 评论:

另外想咨询一下如何打开FX图,我们设置了export TORCH_COMPILE_DEBUG=1,得到了一些txt文件

@fengqiuyue

都是python脚本,直接用文本编辑器打开即可。

likedislike
fengqiuyue
4月21日 评论:

结论:静态编译场景会执行两次算子,第一次动态执行,第二次静态执行,我们的算子中存在原地更新入参,静态编译场景下,原地更新入参被更新了两次,而对标的golden函数仅执行了一次算子,原地更新入参仅被更新了一次,导致精度错误。

likedislike
Ffengqiuyue
4月21日 issue状态由 TODO 改变为 DONE
Ffengqiuyue
4月21日 关闭了 issue