KuiperInfer
KuiperInfer copied to clipboard
关于算子输出空间初始化的一些探讨
你好叮咚工作室大佬们,我最近在采用KuiperInfer部署一个声音分类框架。在确定计算图的执行正确的情况下,我发现在输出空间初始化方面从某个节点开始出现了些问题。如图所示:
输出空间初始化部分这几天看代码大概明白了一些,const std::vectorpnnx::Operator*& pnnx_operators,
const std::vector<std::shared_ptr<RuntimeOperator>>& operators
初始化时候为了提升内存效率,避免不必要的数据拷贝,可以对之前执行的节点的输出空间进行共享,这样既不会印象后继节点的输出还能对之前具有相同size的空间进行共用,具体体现在这里:
不知道我的理解对吗?
另外,我发现对于上图transpose节点后的计算图经过拓扑排序后,pnnx_operators,operators二者的顺序差距会非常大。这样多个并行的结构经过调试我发现初始化输出空间时候会因为顺序的原因导致初始化输出空间维度不对。
对此我加入了以下代码
这样操作保证在获取之前产生共享空间失败后使用初始化空间的shape与当前操作的算子输出空间shape一致。不知道我以上分析的是否正确,还望能一起讨论。