开发指南

GNNs

快速开始

如果你想快速尝试已经封装的算法,请根据examples进行修改,主要需要修改构图时的数据Decoder配置,根据你自己的数据配置合理的参数,以及GSL的图采样逻辑。对EgoGraph based GNNs, 我们提供了ego_sage, ego_gat, ego_bipartite_sage三个示例,对于SubGraph based GNNs, 我们提供了sageseal两个示例。详见README.md。 ​

自定义模型

如果你想自定义GNNs模型,对于EgoGraph来说,仿照examples里的ego_xx算法,你只需要基于EgoConv实现自己的Conv层,然后套用EgoLayer,构建EgoGNN即可,当然你也可以修改EgoLayer和EgoGNN的forward过程。 对SubGraph来说,你需要新增Conv层和对应的模型。 ​

添加新数据

如果你发现目前的数据格式不能满足你的需求,你需要修改到数据层,包括Dataset, EgoGraph, SubGraph/BatchGraph等接口,将自己需要的数据加进去。我们也在持续完善EgoGraph和SubGraph/BatchGraph,希望能够做到更好的兼容性。 ​

此外,对于较为复杂的数据,可以直接使用Data dict的形式,获得query转换后的tensor后自行组织合适的格式。RGCN的示例就是通过Data dict实现。 ​

新增采样算子

如果你需要新增采样算子或者其他图操作算子,需要仿照已经有的sampler进行C++ Op的开发,如有疑问请与我们联系。

其他图学习模型

对其他图学习模型,比如graph embedding类的deepwalk, node2vec,以及KGs的TransE/DistMult,只需要基于Data dict来编码即可,也就是你需要写一个GSL来描述你的采样过程,然后使用Dataset的get_data_dict()接口,得到Data dict,然后可以基于Data dict继续你的模型开发。我们后面也会逐步支持一些这样的算法。 ​

良好的生态靠大家共同构建和维护,欢迎大家积极贡献!