跳转到主要内容

NetworkX的实验性并行后端

项目描述

nx-parallel

nx-parallel是使用joblib进行并行化的NetworkX后端。此项目旨在提供各种NetworkX函数的并行实现,以提高性能。有关NetworkX后端架构的更多信息,请参阅NetworkX后端文档

nx-parallel中的算法

生成上述列表的脚本
import _nx_parallel as nxp
d = nxp.get_funcs_info() # temporarily add `from .update_get_info import *` to _nx_parallel/__init__.py
for func in d:
    print(f"- [{func}]({d[func]['url']})")

安装

建议首先参考NetworkX的INSTALL.rst。nx-parallel需要Python >=3.10。目前,nx-parallel的唯一依赖项是networkx和joblib。

安装发布版本

您可以使用pip安装nx-parallel的稳定版本

$ pip install nx-parallel

上述命令还安装了 nx-parallel 的两个主要依赖项,即 networkx 和 joblib。要升级到较新版本,请使用 --upgrade 标志。

$ pip install --upgrade nx-parallel

安装开发版本

在安装开发版本之前,您可能需要使用 pip 卸载 nx-parallel 的标准版本和其他两个依赖项。

$ pip uninstall nx-parallel networkx joblib

然后执行以下操作

$ pip install git+https://github.com/networkx/nx-parallel.git@main

后端使用

您只需将 NETWORKX_AUTOMATIC_BACKENDS 环境变量设置为 parallel,就可以运行您的 networkx 代码。

$ export NETWORKX_AUTOMATIC_BACKENDS=parallel && python nx_code.py

请注意,对于 nx_code.py 中所有没有 nx-parallel 实现的函数,将执行其原始的 networkx 实现。您还可以以下方式在您的代码中使用 nx-parallel 后端来仅针对某些特定函数调用

import networkx as nx
import nx_parallel as nxp

G = nx.path_graph(4)
H = nxp.ParallelGraph(G)

# method 1 : passing ParallelGraph object in networkx function (Type-based dispatching)
nx.betweenness_centrality(H)

# method 2 : using the 'backend' kwarg
nx.betweenness_centrality(G, backend="parallel")

# method 3 : using nx-parallel implementation with networkx object
nxp.betweenness_centrality(G)

# method 4 : using nx-parallel implementation with ParallelGraph object
nxp.betweenness_centrality(H)

# output : {0: 0.0, 1: 0.6666666666666666, 2: 0.6666666666666666, 3: 0.0}

注意

  1. networkx 中的一些函数具有相同的名称但不同的实现,因此为了避免在派发网络x时发生这些名称冲突,networkx 会通过在算法的 _dispatchable 装饰器中指定 name 参数来区分它们。因此,不建议使用 方法 3方法 4。但是,如果您知道正确的 name,则可以使用它们。例如

    # using `name` parameter - nx-parallel as an independent package
    nxp.all_pairs_node_connectivity(H) # runs the parallel implementation in `connectivity/connectivity`
    nxp.approximate_all_pairs_node_connectivity(H) # runs the parallel implementation in `approximation/connectivity`
    

    此外,如果您将 nx-parallel 作为后端使用,建议指定算法所属的子包,以确保 networkx 派发到正确的实现。例如

    # with subpackage - nx-parallel as a backend
    nx.all_pairs_node_connectivity(H)
    nx.approximation.all_pairs_node_connectivity(H)
    
  2. 目前,nx.Graphnxp.ParallelGraph 之间没有太大区别,因此 方法 3 可以正常工作,但不建议这样做,因为在将来可能不会是这样。

请随意为 nx-parallel 做出贡献。您可以在这里找到贡献指南。如果您想实现一个功能或修复一个错误,我们很乐意审阅您的拉取请求。请确保在拉取请求描述中解释您所做的更改。并且,如果您遇到任何问题或想要看到的新功能,请随时创建问题。

此项目由 NetworkX 组织管理,因此 NetworkX 的行为准则也适用于此处。

此存储库中的所有代码均受加州大学伯克利分校软件分销(BSD)3条款许可证的约束(请参阅 LICENSE)。

谢谢 :)

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

nx_parallel-0.2.tar.gz (1.6 MB 查看哈希值)

上传时间

构建分布

nx_parallel-0.2-py3-none-any.whl (26.2 kB 查看哈希值)

上传时间 Python 3

由以下支持