graph-learn
工业级大规模图神经网络框架,支持分布式训练与实时在线推理,支撑阿里电商场景亿级节点图数据处理
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
工业级大规模图神经网络框架,支持分布式训练与实时在线推理,支撑阿里电商场景亿级节点图数据处理
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
打开手机淘宝,滑动首页商品流,每一次"猜你喜欢"的精准推送,背后都有复杂的图结构数据在运转——商品之间的共现关系、用户的浏览路径、商家与买家的关联网络……这些海量、多跳、非欧几里得的数据,无法用传统表格形式高效处理。图神经网络(Graph Neural Network,GNN)正是解决这类问题的利器,而Graph-Learn(原名AliGraph)正是阿里巴巴将GNN从实验室推向工业生产线的核心武器。
2019年,阿里巴巴团队在VLDB发表论文《AliGraph: a comprehensive graph neural network platform》,正式将内部GNN平台推向开源社区。Graph-Learn正是该平台的核心代码库,如今已Star超1300、Fork 266,在工业级GNN框架领域具有标杆地位。
Graph-Learn由两大核心组件构成,共同组成了从离线训练到在线推理的完整闭环。
GraphLearn-Training(训练框架) 是整个系统的离线训练引擎。核心功能是在大规模批图上进行图采样,支撑GNN模型的离线训练与增量训练。采样操作同时提供Python和C++两套接口,并设计了类似Gremlin的GSL(Graph Sampling Language)接口,用户可以通过声明式的图采样描述语言定义复杂的图遍历模式。上层GNN模型开发方面,框架同时兼容TensorFlow和PyTorch两大主流深度学习框架,提供统一的数据层和模型层抽象,并附带了丰富的模型示例代码,包括经典的GraphSAGE、GAT等实现。
Dynamic Graph Service(动态图推理服务) 是1.0版本新增的在线推理组件,专门解决动态图的实时采样问题——在工业场景中,用户的每一次点击、收藏、加购行为都会实时改变图的拓扑结构,传统的批处理方式无法满足毫秒级实时性要求。DGS实现了大规模动态图上采样P99延迟20ms的性能保证,其Client端提供Java GSL接口和TensorFlow模型预测接口,便于与Java业务系统集成。完整链路为:用户Web请求 → DGS实时采样 → 采样结果送入TensorFlow模型推理 → 结果返回Web,同时用户行为数据写入Log Service并流式更新到动态图中供下次使用。
图1:Graph-Learn 训练-推理完整链路架构图
底层C++核心(graphlearn/src) 是整个框架的性能根基。目录结构体现了明确的职责分层:core/graph负责图存储引擎(local_graph、remote_graph),core/io处理图数据导入,core/operator实现图算子,core/partition做图分区。分布式协调由gRPC和Protocol Buffers实现,持久化存储依赖RocksDB。此外,代码库支持两种并发运行时:传统线程模型和Actor模型(通过hiactor库),后者基于Seastar框架,适合超大规模并发场景。
Python高层接口(graphlearn/python) 包含四个主要子模块:sampler/实现各类采样器(邻居采样、边采样、负采样、子图采样);gsl/实现DAG(有向无环图)驱动的图采样编程范式,用户通过组合Dag、SubGraphDagNode、TraverseVertexDagNode等节点构建复杂采样逻辑;nn/提供PyTorch(nn/pytorch/)和TensorFlow(nn/tf/)两套模型层接口;data/处理数据加载和图数据抽象。
Proto定义(proto/) 覆盖了DAG执行计划、RPC请求、tensor序列化等核心通信协议,request.proto定义客户端-服务端通信格式,tensor.proto定义分布式tensor格式。
Graph-Learn采用CMake构建系统,核心构建入口在graphlearn/CMakeLists.txt。项目未提供Dockerfile和docker-compose,需手动从源码编译。依赖安装脚本graphlearn/install_dependencies.sh支持Ubuntu/Debian环境,自动安装OpenBLAS、gflags、glog、gRPC等系统依赖,并编译third_party下的子模块(glog、grpc、pybind11等)。CMake提供多个编译选项:GPU=ON/OFF控制CUDA支持,WITH_VINEYARD=ON/OFF集成 vineyard 分布式内存引擎,WITH_HIACTOR=ON/OFF启用Actor并发模型,KNN=ON/OFF控制KNN功能开关。
DGS推理服务的部署可通过dynamic_graph_service/k8s/charts/dgs下的Helm Chart完成K8s集群部署,但训练框架本身没有任何容器化支持。
适用场景:大规模图数据(亿级节点/边)的离线GNN训练(如推荐系统、风控、知识图谱);需要实时图采样能力的在线推理服务;已有Java业务系统需要快速集成GNN推理能力;需要GNN-Transformer混合模型开发的科研场景。
上手门槛:需要具备C++编译环境、CUDA配置(如需GPU)和GNN基础概念,学习曲线较陡。纯Python用户建议直接使用配套的PyTorch Geometric或DGL。
已知局限:框架主要面向同构图(Homo-graph),异构图支持需要通过HeteroSubGraph手动管理;依赖大量第三方库,跨平台移植(尤其非Ubuntu环境)较为困难;文档主要面向阿里巴巴内部使用习惯,部分配置项缺乏充分说明;已数年未更新最新代码提交(最后活跃期约2022-2023年),可能存在技术债务。
Graph-Learn代表了工业界在大规模GNN工程化方向上的重要探索。其核心贡献在于:将学术界GNN模型在大规模工业数据上的可行性验证,并提供了从采样到训练到推理的完整工程参考。相比PyG(PyTorch Geometric)和DGL(Deep Graph Library)等学术向框架,Graph-Learn更强调分布式扩展能力和在线推理性能,这正是工业场景的核心诉求。随着阿里巴巴推出独立的PyTorch加速库graphlearn-for-pytorch,未来有望进一步降低使用门槛。