昇腾AI4S图机器学习:DGL图构建接口的PyG替换

举报
AI4S_NPU 发表于 2025/06/16 00:27:33 2025/06/16
【摘要】 背景介绍DGL (Deep Graph Learning) 和 PyG (Pytorch Geometric) 是两个主流的图神经网络库,它们在API设计和底层实现上有一定差异,在不同场景下,研究人员会使用不同的依赖库,昇腾NPU对PyG图机器学习库的支持亲和度更高,因此有些时候需要做DGL接口的PyG替换。SE3Transformer在RFdiffusion蛋白质设计模型中(GitHub ...

背景介

DGL (Deep Graph Learning) PyG (Pytorch Geometric) 是两个主流的络库,它API设计和底层实现上有一定差异,在不同景下,研究人会使用不同的依赖库,昇NPUPyG机器学习库的支持和度更高,因此有些候需要做DGL接口的PyG

image001.png

SE3TransformerRFdiffusion蛋白质设计模型中(GitHub - RosettaCommons/RFdiffusion: Code for running RFdiffusion)作核心件,负责处理蛋白质结构的几何信息。其架构基于,通SE(3)实现对和平移的不性特征提取。本系列以RFDiffusion模型中的SE3Transformer例,解如何将DGL中的接口替换为PyG实现。在本文中,主要展示构建构的替

image003.png

DGL构建接口的PyGmake_full_graphmake_topk_graph

make_full_graph 函数

位置:

  • rfdiffusion/util_module.py

:

  • xyz: 蛋白质骨架坐标,形状为(B, L, 3)或(B, L, 3, 3)
  • pair: 成对特征,形状为(B, L, L, E)
  • idx:残基索引

:

  • G : DGL图
  • edge_feats:边特征

DGL函数:

  • dgl.graph:创建图结构

数学逻辑:

  1. 提取氨基酸相对位置
  2. 构建完全连接图
  3. 设置边特征和节点特征

PyG实现:

def make_full_graph(xyz, pair, idx, top_k=64, kmin=9):

        B, L = xyz.shape[:2]

        device = xyz.device

 

        # 确保xyz形状正确

        if xyz.dim() > 3:

                xyz_flat = xyz[:,:,1] if xyz.shape[2] == 3 else xyz.reshape(B, L, 3)

        else:

                xyz_flat = xyz

 

        # 算序列分离

        sep = idx[:,None,:] - idx[:,:,None]

        b,i,j = torch.where(sep.abs() > 0)

 

        # 构建PyG所需的索引

        src = b*L+i

        tgt = b*L+j

 

        # 图对

        G = graph((src, tgt), num_nodes=B*L).to(device)

 

        # 算相位置

        rel_pos = xyz_flat[b,j,:] - xyz_flat[b,i,:]

        if rel_pos.dim() > 2 and rel_pos.shape[-1] == 3:

                rel_pos = rel_pos.reshape(-1, 3)

        G.edata['rel_pos'] = rel_pos.detach()

 

        # 特征

        edge_feats = pair[b,i,j]

        if edge_feats.dim() == 1:

                edge_feats = edge_feats.unsqueeze(-1)

        if edge_feats.dim() == 2:

                edge_feats = edge_feats.unsqueeze(-1)

 

        # 一化特征减少实现差异

        edge_feats = torch.tanh(edge_feats / 10.0) * 10.0

 

        return G, edge_feats

make_topk_graph

位置:

  • rfdiffusion/util_module.py

入和:

  • 与 make_full_graph 类似,但构建k近邻图而非完全图

DGL函数:

  • dgl.graph:创建图结构

数学逻辑:

  1. 算氨基酸之距离
  2. 选择top-k最近
  3. 确保每个点至少有kmin

化方案:

  • 使用PyG的knn_graph函数简化实现
  • 利用PyG的批处理机制处理多图

 

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。