Yifan Feng

Results 32 comments of Yifan Feng

Absolutely, a heterogeneous hyperedge will have a more powerful modeling ability. It is a good direction for DHG's future work. Can you provide more materials? Some related links like code...

您好,可否提供一下代码? 我猜测可能是你在每一次infer的时候都重新建图导致的。

我简单做了一个性能测试,2080Ti的显卡。 在7W个节点,200W个边的情况下进行2次GCN的传播, 用时:0.02s,显存占用大约4个G。 DHG对静态的图/超图网络十分友好,我设计了多层的缓存,速度应该是极快的。 除非每个epoch的时候重新调用g = dhg.Graph(num_v, e_list),这种情况下是动态图,速度很难通过缓存优化。 我建议可以参考样例,在主函数里面一次性把图/超图建好,然后在训练和推理的时候将g/hg传给相应的函数即可。 可以参考这个样例: https://deephypergraph.readthedocs.io/en/0.9.2/examples/vertex_cls/graph.html#gcn-on-cora

您好, 目前dhg的性能优化更偏向于处理静态图。方便的话,您可以将您对动态图的构想和期望的功能写成一个更为详细的issue,或者在discussion里面提出。我们也正准备在dhg的后续版本对动态图的操作做出一定的计算性能上的优化。 期待您的反馈。 祝好, 一帆

您好, 关于DHGNN的速度快,是因为,DHGNN仅仅考虑了一种类型的超边,也就是动态KNN建立超边组,同时也必须保证是在小规模图的情况下才可以。这样做只需要利用torch中的cdist计算出一个NxN的距离矩阵然后用topk和gather两个函数即可直接获取超边特征。当然这样做还有一个限制,也就是要保证每个超边连接了固定的个数K个点的情况下,才可以。因为这样才能对齐数据,进行矩阵操作。而新的DHG框架,因为没有每个超边连接点的个数相同的限制,没有只接受KNN建图的限制,没有只能进行小图计算的限制,在支持大规模,动态超图,灵活超边组构建上DHG目前解决了有无问题,但目前版本由于没有对动态适配,因此速度受到了限制。 一帆

我很高心,您关注到了DHG在每次增加超边或者动态删除的时候,都会进行新的超图初始化。这在目前是必须的。因为,我们必须对添加的超边加以限制。这里我拿图来举例子,严格意义上的简单图,A矩阵必须是对称的,也就是说, 当你添加(1,3)这个边的时候,我们DHG需要帮你隐式添加(3, 1)这个边。当你删除(3, 1)这个边的时候,我们DHG需要帮你隐式删除(1, 3)这个边。当然这是简单图上的约束,有向图就没有这个约束。当你在简单图重复添加,(1, 3)这个这个边的时候,我们会对新的(1, 3)这个边的权重,与已有的(1, 3)的边的权重进行merge(目前支持min, max, 和mean)。当然这是简单图上的约束,有向图就没有这个约束。同样,我们会对每次新增的超边都会使其与已有的超边进行比对,然后进行权重的合并。DHG在处理这些问题上是非常严谨的,因此每次添加新的超边都需要进行验证因此增加了时间的消耗。但是这里我们进行了一定的优化,我们对已有的超边使用字典的形式进行组织,因此增加超边的复杂度只有O(1)。你所能感受的耗时,是因为增加超边后这个超图的H矩阵变了,因此需要删除旧的H矩阵创建一个新的H矩阵,这就带来了大量内存的复制,从list复制到torch里面。这部分是最耗时的。 一帆

我其实也在构想对动态增加超边的支持。这里我也进行了profile,后期可能需要对从表示结构到计算结构(list -> torch.tensor)的时候,对旧的H矩阵加以利用。而不是直接删除然后创建新的,直接删除然后创建势必会带来大量内存的copy是十分耗时的。当然如果您有想法,欢迎提出讨论! 一帆

Clearly, the vertex index in your hypergraph is larger than the maximum number of vertices: 31 > num_v=21. Please check your edge_list data. We will add the vertex index **verification**...

We provide some util functions for transforming 'str', and 'int' into an ordered and continuous range. The input can be an edge list or an adjacency list. The structure can...