
手把手教你用 NebulaGraph AI 全家桶跑图算法
· NebulaGraph Artificial Intelligence Suite
· ng_ai 是什么
· ng_ai 的特点
· 你可以这么用 ng_ai
· 跑分布式 PageRank 算法
· 写回算法结果到 NebulaGraph
· 通过 nGQL 调用算法
· 单机运行算法
· 可视化图算法结果
· 更方便的 Notebook 操作 NebulaGraph
· 未来工作
· 试玩 ng_ai
· ng_ai 的架构
Nebulagraph Artificial Intelligence Suite
前段时间 NebulaGraph 3.5.0 发布🔗,@whitewum 吴老师建议我把前段时间 NebulaGraph 社区里开启的新项目 ng_ai 公开给大家。
所以,就有了这个系列文章,本文是介绍该系列的开篇之作。
ng_ai 是什么
ng_ai 的全名是:NebulaGraph AI Suite,顾名思义,它是在 NebulaGraph 之上跑算法的 Python 套件,希望能给 NebulaGraph 的用户一个自然、简洁的高级 API。简单来说,用很少的代码量就可以执行图上的算法相关的任务。
ng_ai 这个开源项目的目标是,快速迭代、公开讨论、持续演进,一句话概述便是:
Simplifying things in surprising ways
这个 ng_ai 的专属 url:https://github.com/wey-gu/nebulagraph-ai 可以帮你了解更全面的它。
ng_ai 的特点
为了让 NebulaGraph 社区的小伙伴拥有顺滑的算法体验,ng_ai 有以下特点:
- 与 NebulaGraph 紧密结合,方便从其中读、写图数据
- 支持多引擎、后端,目前支持 Spark(NebulaGraph Algorithm)、NetworkX,之后会支持 DGL、PyG
- 友好、符合直觉的 API 设计
- 与 NebulaGraph 的 UDF 无缝结合,支持从 Query 中调用 ng_ai 任务
- 友好的自定义算法接口,方便用户自己实现算法(尚未完成)
- 一键试玩环境(基于 Docker Extensions)
你可以这么用 ng_ai
跑分布式 PageRank 算法
可以在一个大图上,基于 nebula-algorithm 分布式地跑 PageRank 算法,像是这样:
写回算法结果到 NebulaGraph
假设我们要跑一个 Label Propagation 算法,然后把结果写回 NebulaGraph,我们可以这么做:
先确保结果中要写回图数据库的数据 Schema 已经创建好了,像是下面的示例,便是写到 label_propagation.cluster_id 字段里:
下面,我们来看下具体流程。执行算法:
再看一下结果的 Schema:
参考下面的代码,把 lpa 的结果写回 NebulaGraph 中的 cluster_id 字段里({"lpa": "cluster_id"}):
最后,验证一下:
结果:
更详细的例子参考:ng_ai/examples
通过 nGQL 调用算法
自 NebulaGraph v3.5.0 开始,用户可从 nGQL 中调用自己实现的函数。而 ng_ai 也用这个能力来实现了一个自己的 ng_ai 函数,让它从 nGQL 中调用 ng_ai 的算法,例如:
更详细的例子参考:ng_ai/examples
单机运行算法
在单机、本地的环境,ng_ai 支持基于 NetworkX 运行算法。
举个例子,读取图为 ng_ai graph 对象:
查看、画图:
运行算法:
写回 NebulaGraph:
其他算法:
更详细的例子参考:ng_ai/examples
可视化图算法结果
这里演示一个 NetworkX 引擎情况下,计算 Louvain、PageRank 并可视化的例子:
先执行两个图算法:
再手写一个画图好看的函数:
效果如下所示:
更详细的例子参考:ng_ai/examples
更方便的 Notebook 操作 NebulaGraph
结合 NebulaGraph 的 Jupyter Notebook 插件: https://github.com/wey-gu/ipython-ngql,我们还可以更便捷地操作 NebulaGraph:
可通过 ng_ai 的 extras 在 Jupyter Notbook 中安装插件:
当然,也可以单独安装插件:
安装完成后,就可以在 Notebook 里直接使用 %ngql 命令来执行 nGQL 语句:
注,多行的 Query 用两个百分号就好了 %%ngql
最后,我们还能在 Jupyter Notebook 里直接可视化渲染结果!只需要 %ng_draw 就可以啦!
效果如下:
未来工作
现在 ng_ai 还在开发中,我们还有很多工作要做:
- 完善 Reader 模式,现在 NebulaGraph / NetworkX 的读取数据只支持 Query-Mode,还需要支持 Scan-Mode
- 实现基于 dgl(GNN)的链路预测、节点分类等算法,例如:
- UDA,自定义算法
- 快速部署工具
ng_ai 完全 build in public,欢迎社区的大家们来参与,一起来完善 ng_ai,让 NebulaGraph 上的 AI 算法更加简单、易用!
试玩 ng_ai
我们已经准备好了一键部署的 NebulaGraph + NebulaGraph Studio + ng_ai in Jupyter 的环境,只需要大家从 Docker Desktop 的 Extensions(扩展)中搜索 NebulaGraph,就可以试玩了。
- 安装 NebulaGraph Docker 插件
在 Docker Desktop 的插件市场搜索 NebulaGraph,点击安装:
- 安装 ng_ai Playground
进入 NebulaGraph 插件,点击 Install NX Mode,安装 ng_ai 的 NetworkX Playground,通常要等几分钟等待安装完成。
- 进入 NetworkX Playground
点击 Jupyter NB NetworkX,进入 NetworkX Playground。
ng_ai 的架构
ng_ai 的架构如下,它的核心模块有:
- Reader:负责从 NebulaGraph 读取数据
- Writer:负责将数据写入 NebulaGraph
- Engine:负责适配不同运行时,例如 Spark、DGL、NetowrkX 等
- Algo:算法模块,例如 PageRank、Louvain、GNN_Link_Predict 等
此外,为了支持 nGQL 中的调用,还有两个模块:
- ng_ai-udf:负责将 UDF 注册到 NebulaGraph,接受 ng_ai 的 Query 调用,访问 ng_ai API
- ng_ai-api:ng_ai 的 API 服务,接受 UDF 的调用,访问 ng_ai 核心模块
文章转载自公众号:NebulaGraph 技术社区
