急流 |GPU 加速数据科学 (rapids.ai)https://rapids.ai/#quick-start
使用rpids提供的实验环境,薅google羊毛,用AI直接编码
我做个2个应用,一个是用networks进行查询,一个是用cu-graph进行查询:
1000万节点、2000万条边,剔除重复边,
结论是:networks用了0.64秒,cu-graph用了0.29秒,大概快2倍。
上图如下:
# prompt: 并提供一个图的样本集(不少于10万个节点,20万条边,注意去重重复边)。然后用networks,遍历一遍所有节点的最长路径,你要测试可以正常运行后再输出。还要输出查询时间。
import cudf
import cugraph
import time
import random
# 生成一个包含100000个节点和200000条边的随机图,并去重重复边
num_nodes = 10000000
num_edges = 20000000
edges = set()
while len(edges) < num_edges:
source_node = random.randint(0, num_nodes - 1)
destination_node = random.randint(0, num_nodes - 1)
if source_node != destination_node:
edges.add((source_node, destination_node))
source_nodes = [edge[0] for edge in edges]
destination_nodes = [edge[1] for edge in edges]
edge_weights = [random.randint(1, 10) for _ in range(num_edges)]
graph_data = cudf.DataFrame({'src': source_nodes, 'dst': destination_nodes, 'weight': edge_weights})
# 创建一个cuGraph图
G = cugraph.Graph()
G.from_cudf_edgelist(graph_data, source='src', destination='dst', edge_attr='weight')
# 使用BFS算法遍历所有节点的最长路径
start_node = 0
start_time = time.time()
bfs_result = cugraph.bfs(G, start_node)
# 找出最长路径
max_distance = bfs_result['distance'].max()
longest_path_nodes = bfs_result[bfs_result['distance'] == max_distance]['vertex'].to_pandas().tolist()
end_time = time.time()
print(f"最长路径节点: {longest_path_nodes}")
print(f"最长路径长度: {max_distance}")
print(f"查询时间: {end_time - start_time} 秒")
结果networkx是用了0.6秒
最长路径长度: 9223372036854775807 查询时间: 0.6359281539916992 秒
# prompt: 并提供一个图的样本集(不少于10万个节点,20万条边,注意剔除重复边)。然后用cu-graph库BFS算法,遍历一遍所有节点的最长路径,你要测试可以正常运行后再输出。还要输出查询时间。
import cugraph
import cudf
import time
# 生成样本图数据
n_nodes = 10000000
n_edges = 20000000
source = cudf.Series(data=[i % n_nodes for i in range(n_edges)])
destination = cudf.Series(data=[(i * 7) % n_nodes for i in range(n_edges)])
edge_data = cudf.DataFrame({'src': source, 'dst': destination})
# 剔除重复边
edge_data = edge_data.drop_duplicates()
# 创建cuGraph图
G = cugraph.Graph()
G.from_cudf_edgelist(edge_data, source='src', destination='dst')
# BFS算法遍历
start_node = 0
start_time = time.time()
bfs_result = cugraph.bfs(G, start_node)
end_time = time.time()
# 输出最长路径(可以使用bfs_result中的distance列找到最远节点)
max_distance = bfs_result['distance'].max()
farthest_node = bfs_result[bfs_result['distance'] == max_distance]['vertex'].iloc[0]
print(f"最长路径距离为: {max_distance}")
print(f"最远节点为: {farthest_node}")
# 输出查询时间
print(f"查询时间: {end_time - start_time} 秒")
最长路径距离为: 9223372036854775807 最远节点为: 1 查询时间: 0.29384779930114746 秒