图神经网络 - 代码之夏

图神经网络 (GNN) 是一种深度学习模型,非常适合处理以图形式表示的数据,这些数据将特征向量与节点和边相关联。GNN 是一个不断发展的研究领域,在复杂网络分析、关系推理、组合优化、分子生成以及许多其他领域都有广泛的应用。

GraphNeuralNetworks.jl 是一个纯粹的 Julia 包,用于 GNN,它配备了众多功能。它实现了常见的图卷积层,并支持 CUDA 和图批处理,以便进行快速并行操作。该包可以通过多种方式进行改进。

在非常大的图上进行训练

包含数百万个节点的图对于 GPU 内存来说太大。类似于 GraphSAGE 算法,可以在子图上进行小批量训练。

持续时间:350 小时。

预期难度:困难。

预期结果:用于将 GNN 训练扩展到非常大图的必要算法组件。

添加图卷积层

虽然我们实现了各种图卷积层,但仍然有大量图卷积层需要实现。还可以考虑预处理工具、池化操作符和其他与 GNN 相关的功能。

持续时间:175 小时。

预期难度:容易到中等。

预期结果:用各种新的层和操作符丰富包。

添加模型和示例

作为文档的一部分,并为了启动新的项目,我们希望添加完整的工作示例和图神经网络的应用。我们可以从入门级教程开始,逐步向读者介绍更高级的功能。

持续时间:175 小时。

预期难度:中等。

预期结果:一些图神经网络应用的教学和更高级的示例。

添加图数据集

MLDatasets.jl 中的常用图数据集提供 Julia 友好的包装器。为 Julia ML 和数据生态系统创建便捷的接口。

持续时间:175 小时。

预期难度:容易。

预期结果:Julia 生态系统可以轻松访问的大量图数据集。

为异构图实现层

在一些复杂网络中,边表示的关系可以是不同类型的。我们目前通过 GNNHeteroGraph 类型支持这一点,但目前没有图卷积层支持异构图作为输入。在这个项目中,我们将为异构图实现一些层。

持续时间:175 小时。

预期难度:中等。

预期结果:为异构网络实现新的图类型和相应的图卷积层。

使用稀疏线性代数提高性能

许多图卷积层可以用涉及邻接矩阵的非物化代数运算来表示,而不是使用更慢且更占用内存的 gather/scatter 机制。我们的目标是尽可能扩展这些融合实现,并且以 GPU 友好的方式进行扩展。

持续时间:350 小时。

预期难度:困难。

预期结果:许多图卷积操作的性能显著提高。

支持 AMGDPU 和 Apple Silicon

我们目前仅支持 CPU 和 CUDA 硬件上的 scatter/gather 操作。我们的目标是利用 KernelAbstractions.jl、AMDGPU.jl 和 Metal.jl 将其扩展到 AMDGPU 和 Apple Silicon。

持续时间:175 小时。

预期难度:中等。

预期结果:AMD GPU 和 Apple 硬件的图卷积加速,性能大致与 CUDA 相当。

为时序图实现层

时序图是指其拓扑结构随时间变化的图。我们目前通过 TemporalSnapshotsGNNGraph 类型支持这一点,但目前没有图卷积和池化层支持时序图作为输入。目前,有一些卷积层可以接受具有时序特征的静态图的特殊情况作为输入。在这个项目中,我们将实现接受时序图作为输入的新层,并将创建演示如何使用它们的教程。

持续时间:350 小时。预期难度:中等。预期结果:为时序图实现新的卷积层以及示例教程。

熟悉图神经网络和 Flux.jl。

导师

Carlo LucibelloGraphNeuralNetworks.jl 的作者)。欢迎在 Julia Slack 工作区 联系我们或在 GitHub 仓库中打开问题。