仅有的代码修改出现在第 4-7 行:1) 初始化 DGL 的分布式模块,2) 创建分布式图对象,以及 3) 拆分训练集,并计算本地进程的节点。其余代码保持不变,与 mini_cn-batch training 类似, 包括:创建采样器,模型定义,模型训练的循环。 importdglimporttorchasthdgl.distributed.initialize('ip_config.txt')th.distribu...
和GraphSAGE中一致,DGL将mini-batch 训练的前期准备工作分为两个层面,首先建立为了更新一个batch内节点embedding而需要的所有邻居节点信息的子图,其次为了保证子图的大小不会受到”超级节点“影响,通过采样的技术将每个节点的邻居个数保持一致,使得这一批节点和相关邻居的embedding能够构成一个Tensor放入显卡中计算。 这两个...
真实世界里的数据规模是巨大的,这就需要对GNN模型进行批次训练(mini-batch training)。然而,不同于面向图片和文本数据的训练算法,GNN的批次训练更加复杂。这是因为模型需要处理图数据样本间存在的依赖关系。DGL团队在官方论坛上也注意到GNN模型的批次训练是被问到次数最多的主题之一。在0.6版里,DGL团队发布了针对GNN批...
我们这里选择了 NodeDataLoader 来进行训练数据的读入,这其实是一种 分batch训练 的方法,而 不是一次性把图全读入内存 进行训练,而是每次选择 batch的种子节点以及他们采样的邻居节点 读入内存参与训练,这也让大的图神经网络训练成为了可能,是 DGL图深度框架 非常优秀 的实现 !!! 大赞! 需要注意的是: extract_em...
for batch in self.train_data: self._run_batch(batch) # 运行每个批次 def _save_checkpoint(self, epoch): """ 保存训练检查点。 参数: epoch (int): 当前epoch号。 """ ckp = self.model.module.state_dict() # 获取模型的状态字典 PATH = "checkpoint.pt" # 定义检查点路径 ...
记一个batch内需要更新embedding的节点集合为,从这个节点集合出发,我们可以根据边信息查找计算所要用到的所有邻居节点,比如在下图的例子中,图结构如a)所示,假设我们使用的是2层GCN模型(每个节点的更新考虑其2度以内的邻居embedding),某个batch内我们需要更新节点的embedding,根据更新规则,为了更新,我们需要其一度节点的...
PyG将每个图储存在一个Data中,但是消息传递是基于MessagePassing基类进行的,与Data或者Batch并无直接联系,通过在网络中重写message passing的forward,message,aggregate和update等方法实现自定义的消息传递过程,Propagete方法会自动调用这些方法完成数据的更新。值得指出的是,PyG与DGL分别代表了两种不同的图机器学习计算...
PyG将每个图储存在一个Data中,但是消息传递是基于MessagePassing基类进行的,与Data或者Batch并无直接联系,通过在网络中重写message passing的forward,message,aggregate和update等方法实现自定义的消息传递过程,Propagete方法会自动调用这些方法完成数据的更新。 值得指出的是,PyG与DGL分别代表了两种不同的图机器学习计算框架...
PyG将每个图储存在一个Data中,但是消息传递是基于MessagePassing基类进行的,与Data或者Batch并无直接联系,通过在网络中重写message passing的forward,message,aggregate和update等方法实现自定义的消息传递过程,Propagete方法会自动调用这些方法完成数据的更新。 值得指出的是,PyG与DGL分别代表了两种不同的图机器学习计算框架...
PyG将每个图储存在一个Data中,但是消息传递是基于MessagePassing基类进行的,与Data或者Batch并无直接联系,通过在网络中重写message passing的forward,message,aggregate和update等方法实现自定义的消息传递过程,Propagete方法会自动调用这些方法完成数据的更新。 值得指出的是,PyG与DGL分别代表了两种不同的图机器学习计算框架...