Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于算子输出空间初始化的一些探讨 #60

Open
Dxymiemiemie opened this issue Jun 15, 2024 · 3 comments
Open

关于算子输出空间初始化的一些探讨 #60

Dxymiemiemie opened this issue Jun 15, 2024 · 3 comments

Comments

@Dxymiemiemie
Copy link

Dxymiemiemie commented Jun 15, 2024

你好叮咚工作室大佬们,我最近在采用KuiperInfer部署一个声音分类框架。在确定计算图的执行正确的情况下,我发现在输出空间初始化方面从某个节点开始出现了些问题。如图所示:
network
输出空间初始化部分这几天看代码大概明白了一些,const std::vectorpnnx::Operator*& pnnx_operators,
const std::vector<std::shared_ptr>& operators

初始化时候为了提升内存效率,避免不必要的数据拷贝,可以对之前执行的节点的输出空间进行共享,这样既不会印象后继节点的输出还能对之前具有相同size的空间进行共用,具体体现在这里:
屏幕截图 2024-06-15 170704

不知道我的理解对吗?
initoutput
另外,我发现对于上图transpose节点后的计算图经过拓扑排序后,pnnx_operators,operators二者的顺序差距会非常大。这样多个并行的结构经过调试我发现初始化输出空间时候会因为顺序的原因导致初始化输出空间维度不对。
对此我加入了以下代码
fix
这样操作保证在获取之前产生共享空间失败后使用初始化空间的shape与当前操作的算子输出空间shape一致。不知道我以上分析的是否正确,还望能一起讨论。

@zjhellofss
Copy link
Owner

你以下的理解是对的,但是不知道针对你的修改部分,能不能提交一个pr,让我仔细看一下。
“”““
另外,我发现对于上图transpose节点后的计算图经过拓扑排序后,pnnx_operators,operators二者的顺序差距会非常大。这样多个并行的结构经过调试我发现初始化输出空间时候会因为顺序的原因导致初始化输出空间维度不对。
对此我加入了以下代码
””

@zjhellofss
Copy link
Owner

@Dxymiemiemie

@Dxymiemiemie
Copy link
Author

Dxymiemiemie commented Jun 16, 2024

你以下的理解是对的,但是不知道针对你的修改部分,能不能提交一个pr,让我仔细看一下。 “”““ 另外,我发现对于上图transpose节点后的计算图经过拓扑排序后,pnnx_operators,operators二者的顺序差距会非常大。这样多个并行的结构经过调试我发现初始化输出空间时候会因为顺序的原因导致初始化输出空间维度不对。 对此我加入了以下代码 ””

提交喽,在test文件下我创了个对我model的测试,如果不加我对输出初始化修改,sigmoid层在forward时候应该会报错。如图所示
微信图片_20240616200829
红框初始化能成功因为与他size相同的之前算子的共享空间。但是蓝色框的sigmoid算子初始化会失败,因为他在找不到能用的共享空间后只能用自己的输出形状创建。但是pnnx_operators,operators二者顺序差距较大,导致用的不是自己的shape。pnnx_operators的第275开始是transpose算子。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants