【问题标题】:How to accelerate finding all-pairs shortest path with GPU using rapids cugraph?如何使用rapids cugraph加速寻找所有对最短路径的GPU?
【发布时间】:2022-01-08 12:33:48
【问题描述】:

我正在尝试获取 APSP(所有对短路径)之类的节点列表,并希望使用 rapids cugraph 进行 GPU 加速。 进行了一些研究并创建了这个正在运行但速度很慢的脚本。我想我做错了迭代,可能有更好的方法可以更快地达到相同的结果。我走错路了吗?谢谢!

import sqlalchemy
import cugraph
import cudf
import pandas as pd
from datetime import datetime

s_time = datetime.now()
engine = sqlalchemy.create_engine('postgresql://postgres:xxxxxxx@localhost:5432/postgres')
sql = "select id, source, target, cost, geom from xxx.roads_noded"
rc = "select source, target from xxx.routin_candidates"
df = pd.read_sql(sql, engine)
rcdf = pd.read_sql(rc, engine)
cuda_g = cudf.DataFrame.from_pandas(df)
cuda_nc = cudf.DataFrame.from_pandas(rcdf)

G = cugraph.Graph()
G.from_cudf_edgelist(cuda_g, source='source', destination='target', edge_attr='cost')

for index, row in cuda_nc.to_pandas().iterrows():
    src = row['source']
    dest = row['target']
    routes = cugraph.sssp(G, src)
    for index, row in routes.to_pandas().iterrows():
        v = int(row['vertex'])        
        if v == dest:
            p = cugraph.utils.get_traversed_path_list(routes, v)
            autoroute = p[::-1]
            print(autoroute)

e_time = datetime.now()
print('Duration: {}'.format(e_time - s_time))

【问题讨论】:

    标签: routes gpu shortest-path hardware-acceleration rapids


    【解决方案1】:

    cuGraph 正在研究 APSP 算法,今年应该会有一个。

    我们确实有一个名为“multi_source_bfs”的新函数,它允许您指定多个起始源节点,您可以从中运行 BFS。问题是如果路径交叉,第一个或最低节点 ID 路径获胜。

    我们还在为提取路径添加更好的功能。该代码位于 C++ 库中,但在 Python 层尚不可用。该函数将允许您指定开始和结束节点 ID,然后并行地从 BFS 或 SSP 结果中提取所有这些路径。

    【讨论】:

    • 布拉德·里斯,感谢您的回复。我删除了第二个循环,代码要快得多。不幸的是,我没有找到文档 cugraph.utils.get_traversed_pa​​th_list() 是如何工作的?似乎它需要图形和目标值(int)才能工作。我更改了 p = cugraph.utils.get_traversed_pa​​th_list(routes, dest) 并且它更快。现在尝试使用 pandas 矢量化或 .apply() 删除第一个循环。
    • Brad Rees,您能参考一下文档吗?我没有找到任何关于 multi_source_bfs 的信息。我在这里查看了所有页面:docs.rapids.ai/api/cugraph/stable/api_docs/api/… 谢谢!
    • 似乎它尚未在 rapids-21.12 中实现 - “NotImplementedError: concurrent_bfs 即将推出!请投票 github 问题 1465 以帮助我们确定优先级”
    • 函数是“multi_source_bfs”。我注意到文档不见了,它们应该会出现在本周晚些时候的夜间构建中
    • @HumanoVirtual get_traversed_pa​​th_list 代码和文档应该在本周准备就绪
    猜你喜欢
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2021-07-05
    • 2012-10-24
    • 2016-07-30
    相关资源
    最近更新 更多