目录

库中的图形分析算法

获取Katana图形库

使用Katana图形库

邻接矩阵的输入

来自边缘列表的输入

来自Pandas DataFrame的输入

来自GraphML的输入

执行图分析算法

Metagraph支持

Katana图形库有多快?

我在哪里可以了解更多信息?

参考


根据 Gartner, Inc.的数据,图形处理是2021年十大数据分析趋势之一。它是一个新兴的应用领域,也是数据科学家处理关联数据集(例如社交、电信和金融)的必要工具网络;网络流量;和生化途径)。实际应用中的图往往很大,而且越来越大。例如,当今的社交网络可以拥有数十亿个节点和边缘,因此高性能并行计算至关重要。

为此,Katana Graph与英特尔合作,设计了一个高性能、易于使用的图形分析Python库,具有(a)高度优化的重要图形分析算法的并行实现;(b)一个高级Python接口,用于在底层C++图形引擎之上编写自定义并行算法;(c)与pandas、scikit-learn和Apache Arrow以及 英特尔AI 软件堆栈中的工具和库的互操作性;(d)全面支持各种格式的提取、转换和加载(ETL);(e) Metagraph 插件。

本文将介绍库中的内容、如何访问库、使用示例和基准数据以突出性能。

库中的图形分析算法

图形处理管道中常用的关键算法预先打包在Katana库中。目前可用的算法如下:

  • 广度优先搜索: 返回从源节点开始的广度优先搜索构造的定向树
  • 单源最短路径: 计算从源节点开始到所有节点的最短路径
  • 连接的组件: 查找图的内部连接但未连接到其他组件的组件(即节点组)
  • 网页级别: 根据传入链接的结构计算图中节点的排名
  • 中介中心性: 根据通过每个节点的最短路径数计算图中节点的中心性
  • 三角形计数: 计算图形中三角形的数量
  • 鲁汶社区检测: 使用鲁汶启发式计算最大化模块化的图社区
  • 子图提取: 提取图的诱导子图
  • Jaccard相似度: 计算给定节点与图中每个其他节点的Jaccard系数
  • 使用标签传播的社区检测: 使用标签传播算法计算图中的社区
  • 局部聚类系数函数: 衡量图中节点倾向于聚集在一起的程度
  • K-Truss 找到包含至少三个顶点的图的最大诱导子图,其中每条边都与至少K-2个三角形相关
  • K-Core 查找包含度数为K或以上的节点的最大子图

更多算法被添加到库中,用户可以轻松添加自己的算法,我们将在下面演示。

获取Katana图形库

Katana Graph的分析库是开源的,在 3-Clause BSD许可下免费提供。它可以在 GitHub 上找到,也可以从Anaconda.org轻松安装:

$ conda install -c katanagraph/label/dev -c conda-forge katana-python

使用Katana图形库

Katana的Python库支持各种格式的ETL,例如邻接矩阵、pandas DataFrames、NumPy数组、边列表、GraphML、NetworkX等。下面显示了几个示例:

import numpy as np
import pandas
from katana.local import Graph
from katana.local.import_data import (from_adjacency_matrix,from_edge_list_arrays,from_edge_list_dataframe,from_edge_list_matrix,from_graphml)

邻接矩阵的输入

katana_graph = from_adjacency_matrix(np.array([[0, 1, 0], [0, 0, 2], [3, 0, 0]]))

来自边缘列表的输入

katana_graph = from_edge_list_arrays(np.array([0, 1, 10]), np.array([1, 2, 0]),prop = np.array([1, 2, 3]))

来自Pandas DataFrame的输入

katana_graph = from_edge_list_dataframe(pandas.DataFrame(dict(source=[0, 1, 10],destination=[1, 2, 0],prop = [1, 2, 3])))

来自GraphML的输入

katana_graph = from_graphml(input_file)

执行图分析算法

以下示例计算输入图的介数中心性:

import katana.local
from katana.example_utils import get_input
from katana.property_graph import PropertyGraph
from katana.analytics import betweenness_centrality,BetweennessCentralityPlan,BetweennessCentralityStatistics
katana.local.initialize()property_name = "betweenness_centrality"
betweenness_centrality(katana_graph, property_name, 16,BetweennessCentralityPlan.outer())
stats = BetweennessCentralityStatistics(g, property_name)print("Min Centrality:", stats.min_centrality)
print("Max Centrality:", stats.max_centrality)
print("Average Centrality:", stats.average_centrality)

Katana的Python库可与pandas、scikit-learn和Apache Arrow互操作。

除了前面列出的预打包例程外,数据科学家还可以使用简单的Python接口编写自己的图形算法,该接口公开了Katana Graph的优化C++引擎及其并发数据结构和并行循环结构。Katana Graph库已经包含广度优先搜索实现,但以下示例说明了使用API实现此类算法是多么容易:

def bfs(graph: Graph, source):"""Compute the BFS distance to all nodes from source.The algorithm in bulk-synchronous level by level.:param graph: The input graph.:param source: The source node for the traversal.:return: An array of distances, indexed by node ID."""next_level_number = 0# The work lists for the current and next levels using a # Katana concurrent data structure.curr_level_worklist = InsertBag[np.uint32]()next_level_worklist = InsertBag[np.uint32]()# Create and initialize the distance array.# source is 0, everywhere else is INFINITYdistance = np.empty((len(graph),), dtype=np.uint32)distance[:] = INFINITYdistance[source] = 0# Start processing with just the source node.next_level_worklist.push(source)# Execute until the worklist is empty.while not next_level_worklist.empty():# Swap the current and next work listscurr_level_worklist, next_level_worklist = next_level_worklist,curr_level_worklist# Clear the worklist for the next level.next_level_worklist.clear()next_level_number += 1# Process the current worklist in parallel by applying# bfs_operator for each element of the worklist.do_all(curr_level_worklist,# The call here binds the initial arguments of bfs_operator.bfs_operator(graph, next_level_worklist,next_level_number, distance))return distance# This function is marked as a Katana operator, meaning that it will
# be compiled to native code and prepared for use with Katana do_all.
@do_all_operator()
def bfs_operator(graph: Graph, next_level_worklist,next_level_number, distance, node_id):"""The operator called for each node in the work list.The initial four arguments are provided by bfs above.node_id is taken from the worklist and passed to thisfunction by do_all.:param next_level_worklist: The work list to add next nodes to.:param next_level_number: The level to assign to nodes we find.:param distance: The distance array to fill with data.:param node_id: The node we are processing.:return:"""# Iterate over the out edges of our nodefor edge_id in graph.edges(node_id):# Get the destination of the edgedst = graph.get_edge_dest(edge_id)# If the destination has not yet been reached, set its level# and add it to the work list so its out edges can be processed# in the next level.if distance[dst] == INFINITY:distance[dst] = next_level_numbernext_level_worklist.push(dst)# There is a race here, but it's safe. If multiple calls to# operator add the same destination, they will all set the# same level. It will create more work because the node will# be processed more than once in the next level, but it avoids# atomic operations so it can still be a win in low-degree graphs.

Metagraph支持

Katana Graph的Python分析库将通过 Metagraph 插件提供。Metagraph为图形分析提供了一致的Python入口点。可以使用标准API编写图形工作流,然后将其分发到可插入Metagraph的兼容图形库。现在,开源图形社区将能够直接使用Katana Graph的高性能应用程序。Metagraph插件包含在Anaconda包中,可以按如下方式安装和调用:

$ conda create -n metagraph-test -c conda-forge \-c katanagraph/label/dev \-c metagraph metagraph-katanaimport metagraph as mg
bfs = mg.algos.traversal.bfs_iter(katana_graph, <start node>)

Katana图形库有多快?

Katana库已针对其他图形分析框架进行了广泛的基准测试,并且始终显示出与 GAP Benchmark Suite 相当或更好的性能。 显示了Katana Graph相对于来自不同领域的各种图的GAP参考实现的性能。

1. 使用GAP Benchmark Suite测量Katana Graph性能。该数据取自Azad等人。(2020)2。系统:双路 2.0 GHz Intel® Xeon® Platinum 8153 处理器(64个逻辑内核)和 384 GB DDR4 内存。有关性能和基准测试结果的更完整信息,请访问 www.intel.com/benchmarks

Katana Graph库在最近的字节可寻址内存技术上也被证明在超大图上表现良好,例如Clueweb12和WDC12(分别有42和1280亿条边,这些是一些最大的公开可用图)例如英特尔® 傲腾™ DC持久内存( 1)。

1. Katana Graph BFS在超大图上的性能。它将单个基于英特尔傲腾内存的节点的性能与具有多个节点的集群进行了比较。每个TACC Stampede Skylake集群节点都有两个2.1 GHz Intel Xeon Platinum 8160处理器和192 GB DDR4内存。Cascade Lake服务器具有两个2.2 GHz第二代Intel Xeon可扩展处理器,配备6 TB Intel Optane PMM384 GB DDR4 DRAMIce Lake服务器有两个2.2 GHz Intel Xeon Platinum 8352Y处理器,8 TB Intel Optane PMM1 TB DDR4 DRAM。有关性能和基准测试结果的更完整信息,请访问 www.intel.com/benchmarks

我在哪里可以了解更多信息?

我希望您确信Katana Graph库是用于图形分析的多功能、高性能选项。您可以在GitHub 站点上了解有关该库的更多信息、提出问题、发布功能请求等 。

参考

  1. Nguyen, D.、Lenharth, A.和Pingali, K. (2013)。 用于图形分析的轻量级基础架构。第24届ACM操作系统原理研讨会论文集 (SOSP '13)。
  2. 阿扎德,A. 等人。(2020年)。 使用GAP基准套件、IEEE工作负载表征国际研讨会(IISWC)评估图形分析框架。
  3. ClueWeb12数据集
  4. Web Data Commons – 超链接图
  5. Gill, G.、Dathathri, R.、Hoang, L.、Peri, R.和Pingali, K. (2020) 使用英特尔傲腾DC持久内存对海量数据集进行单机图分析 。VLDB捐赠基金会议记录,13(8), 1304–1318。
  6. Dathathri, R. 等人。(2019)。 Gluon-Async:用于分布式和 异构图形分析的批量异步系统。第28届并行架构和编译技术国际会议论文集(PACT)。

https://www.codeproject.com/Articles/5317383/Katana-s-High-Performance-Graph-Analytics-Library

Katana的高性能图形分析库相关推荐

  1. 【Galois系统】用于图形分析的轻量级基础架构

    [Galois系统]用于图形分析的轻量级基础架构 论文信息 概述 研究动机 方法 解决思路 实现细节 结论 该笔记为论文*A Lightweight Infrastructure for Graph ...

  2. cuGraph-GPU图形分析

    cuGraph-GPU图形分析 所述RAPIDS cuGraph库是GPU的集合加速图形算法,在GPU DataFrames中发现过程数据.cuGraph的愿景是使图分析无处不在,以至于用户只是根据分 ...

  3. python图形分析_使用Python图形化分析大Log文件

    最近因为项目需要经常分析数据量很大的Log文件,以往靠手工目测的分析方法已不太可能快速分析和定位问题. 由于和我一起做这个项目的同事,会使用Python,编写的Python脚本能够将Log中的相关数据 ...

  4. 深入 Go 中各个高性能 JSON 解析库

    深入 Go 中各个高性能 JSON 解析库 转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/535 其实本来我是没打算 ...

  5. 图形分析之Nsight的使用

    作者:i_dovelemon 日期:2017-06-11 来源:CSDN 主题:Nsight, OpenGL 引言 最开始的时候, 我进行图形编程使用的是DX,所以那时候进行图形分析的时候,基本都是使 ...

  6. 手撕 Golang 高性能内存缓存库 bigcache! #4

    1. 前言 你好哇!我是小翔.之前写了三篇 #Golang 并发编程 的文章了,这次来换换口味,开个 手撕源码 的新坑!一起来扒一扒 Go 语言高性能 local cache 库 bigcache,看 ...

  7. 《安富莱嵌入式周报》第306期:开源独轮车,Cortex-M85修订版r1发布,Terathon图形数学库,不断变革的IDE开发环境,各个厂家总动员

    往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - P ...

  8. Python+审计实务与案例分析库 毕业设计-附源码211526

    Python审计实务与案例分析库 摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识 ...

  9. cacti 网络流量监测图形分析工具

    Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具. 安装方法 一.安装rrdtool CentOS-5: rpm -ivh http://apt.sw. ...

  10. Python学习资源 | 3个高性能开源计算机视觉库

    0.OpenCV: OpenCV是在BSD许可下发布的,是开源计算机视觉库,对学术和商业都是免费的.具有C+.Python和Java接口,支持Windows.Linux.MacOS.IOS和Andro ...

最新文章

  1. 拓展ARM研发进展与玩家
  2. PAT甲级1038 Recover the Smallest Number (30 分):[C++题解]贪心、排列成最小的数、字符串
  3. 学习笔记Spark(七)—— Spark SQL应用(2)—— Spark DataFrame基础操作
  4. Qt Creator测验Testing
  5. django model数据 时间格式
  6. 将java.util.concurrent.BlockingQueue用作rx.Observable
  7. Huawei LiteOS 开发指南
  8. O2O、C2C、B2B、B2C的区别
  9. 自制 python 数据分析库
  10. python实用模块(持续更新)
  11. MESOS集群高可用部署
  12. LINUX SHELL多条件(与、或)if判断怎么写?
  13. 基于小米球(Ngrok)实现内网穿透
  14. 创建一个基础WDM驱动,并使用MFC调用驱动
  15. 基于SmartQQ协议的QQ自动回复机器人-1
  16. 数据开发常用的几种数据预处理和数据整理方法
  17. RationalDMIS 2020高级编程之提取数据OBTAIN语句
  18. 2021高考成绩查询单科,2021年全国高考总分及各科分数
  19. H指数和G指数的Java实现
  20. 服务器系统漏洞rc4,服务器如何修复旧加密算法漏洞

热门文章

  1. Windows系统封装(二)导入封装工具安装软件,安装系统。
  2. 3.路由实现(phalapi框架总结)
  3. sshd报错Privilege separation user sshd does not exist的解决办法
  4. 读《创业36条军规》(四)创业是最好的武器
  5. Java:闹钟程序源代码,再也不用担心不能起床了
  6. jeecms oracle v5_如何在linux中搭建JEECMS系统
  7. android appwidget桌面插件,Android:AppWidget、桌面小部件
  8. error: conflicting types for 错误原因及解决办法
  9. vue中实现视频直播(萤石云)/实时视频:
  10. win7计算机序列号在哪里,win7系统如何查看主板序列号?win7系统查看主板序列号的详细步骤图文教程...