采样函数#
- enum class prior_sources_behavior_t#
控制在采样中如何处理先前的源。
- 参数 DEFAULT:
将采样过程中遇到的顶点添加到新的前沿
- 参数 CARRY_OVER:
除了新遇到的顶点外,还将之前任何前沿中用作源的顶点包含到新的前沿中
- 参数 EXCLUDE:
过滤新的前沿以排除之前用作源的任何顶点
值
- enumerator DEFAULT#
- enumerator CARRY_OVER#
- enumerator EXCLUDE#
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, typename label_t, bool store_transposed, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, std::optional<rmm::device_uvector<edge_t>>, std::optional<rmm::device_uvector<edge_type_t>>, std::optional<rmm::device_uvector<int32_t>>, std::optional<rmm::device_uvector<label_t>>, std::optional<rmm::device_uvector<size_t>>> uniform_neighbor_sample(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, std::optional<edge_property_view_t<edge_t, edge_t const*>> edge_id_view, std::optional<edge_property_view_t<edge_t, edge_type_t const*>> edge_type_view, raft::device_span<vertex_t const> starting_vertices, std::optional<raft::device_span<label_t const>> starting_vertex_label_offsets, std::optional<std::tuple<raft::device_span<label_t const>, raft::device_span<int32_t const>>> label_to_output_comm_rank, raft::host_span<int32_t const> fan_out, raft::random::RngState &rng_state, bool return_hops, bool with_replacement = true, prior_sources_behavior_t prior_sources_behavior = prior_sources_behavior_t::DEFAULT, bool dedupe_sources = false, bool do_expensive_check = false)#均匀邻居采样。
- 已弃用
已由 homogeneous_uniform_neighbor_sample 替换
此函数从一组起始顶点开始遍历,沿出边随机选择邻居以提取子图。
此函数的输出是向量的元组 (src, dst, weight, edge_id, edge_type, hop, label, offsets),用于标识随机选择的边。src 是源顶点,dst 是目标顶点,weight (可选) 是边权重,edge_id (可选) 标识边 ID,edge_type (可选) 标识边类型,hop 标识遇到边的跳数。label 输出 (可选) 标识顶点标签。offsets 数组 (可选) 将在下面描述,并取决于输入参数。
如果未指定
starting_vertex_label_offsets
,则不对输出应用任何组织结构,返回集中的 label 和 offsets 值将为 std::nullopt。如果指定了
starting_vertex_label_offsets
但未指定label_to_output_comm_rank
,则 label 输出将包含值。这将导致输出按顶点标签排序。返回中的 offsets 数组将是 CSR 样式的偏移量数组,用于标识数据中每个标签范围的开始位置。labels.size() == (offsets.size() - 1)
。如果指定了
starting_vertex_label_offsets
并指定了label_to_output_comm_rank
,则 label 输出将包含值。这将导致输出按顶点标签排序。返回中的 offsets 数组将是 CSR 样式的偏移量数组,用于标识数据中每个标签范围的开始位置。labels.size() == (offsets.size() - 1)
。此外,数据将被打乱,以便具有特定标签的所有数据都位于指定的 rank 上。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
edge_type_t – 边类型的类型。需要是整数类型。
label_t – 标签的类型。需要是整数类型。
store_transposed – 标志,指示源 (如果为 false) 或目标 (如果为 true) 是否为主要索引
multi_gpu – 标志,指示模板实例化是针对单 GPU (false)
- 参数:
handle – 用于封装运行图算法所需的资源(例如 CUDA 流、通信器和各种 CUDA 库的句柄)的 RAFT 句柄对象。
graph_view – 用于生成 NBR 采样的 Graph View 对象。
edge_weight_view –
graph_view
的可选视图对象,用于存储边权重。edge_id_view –
graph_view
的可选视图对象,用于存储边 ID。edge_type_view –
graph_view
的可选视图对象,用于存储边类型。starting_vertices – 采样的起始顶点 ID 的设备 span。在多 GPU 环境中,起始顶点应在此 GPU 本地。
starting_vertex_label_offsets – 可选的设备 span,用于存储与每个起始顶点相关的标签。
label_to_output_comm_rank – 可选的设备 spans 元组,用于将标签映射到特定的输出 rank。元组的元素 0 标识标签,元组的元素 1 标识输出 rank。标签 span 必须按升序排序。
fan_out – 定义每个源顶点每层分支(扇出)度的 Host span
rng_state – 预初始化的 raft::RngState 对象,用于生成随机数
return_hops – 布尔标志,指定是否返回跳数信息
prior_sources_behavior – 枚举类型,定义如何处理先前的源(默认为 DEFAULT)
dedupe_sources – 布尔标志,如果为 true,则如果顶点 v 在跳 X 中以相同标签多次作为目标出现,它将仅作为下一跳的源(每个标签)传递一次。默认为 false。
with_replacement – 布尔标志,指定随机采样是否是有放回的 (true);或无放回的 (false);默认为 true;
do_expensive_check – 一个标志,用于对输入参数运行昂贵的检查(如果设置为
true
)。- 返回值:
元组设备向量(vertex_t 源顶点, vertex_t 目标顶点, 可选 weight_t 权重, 可选 edge_t 边 ID, 可选 edge_type_t 边类型, 可选 int32_t 跳数, 可选 label_t 标签, 可选 size_t 偏移量)
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, typename bias_t, typename label_t, bool store_transposed, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, std::optional<rmm::device_uvector<edge_t>>, std::optional<rmm::device_uvector<edge_type_t>>, std::optional<rmm::device_uvector<int32_t>>, std::optional<rmm::device_uvector<label_t>>, std::optional<rmm::device_uvector<size_t>>> biased_neighbor_sample(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, std::optional<edge_property_view_t<edge_t, edge_t const*>> edge_id_view, std::optional<edge_property_view_t<edge_type_t, edge_type_t const*>> edge_type_view, edge_property_view_t<edge_t, bias_t const*> edge_bias_view, raft::device_span<vertex_t const> starting_vertices, std::optional<raft::device_span<label_t const>> starting_vertex_label_offsets, std::optional<std::tuple<raft::device_span<label_t const>, raft::device_span<int32_t const>>> label_to_output_comm_rank, raft::host_span<int32_t const> fan_out, raft::random::RngState &rng_state, bool return_hops, bool with_replacement = true, prior_sources_behavior_t prior_sources_behavior = prior_sources_behavior_t::DEFAULT, bool dedupe_sources = false, bool do_expensive_check = false)#偏向邻居采样。
- 已弃用
已由 homogeneous_biased_neighbor_sample 替换
此函数从一组起始顶点开始遍历,沿出边(带有边偏向)随机选择邻居以提取子图。
此函数的输出是向量的元组 (src, dst, weight, edge_id, edge_type, hop, label, offsets),用于标识随机选择的边。src 是源顶点,dst 是目标顶点,weight (可选) 是边权重,edge_id (可选) 标识边 ID,edge_type (可选) 标识边类型,hop 标识遇到边的跳数。label 输出 (可选) 标识顶点标签。offsets 数组 (可选) 将在下面描述,并取决于输入参数。
如果未指定
starting_vertex_label_offsets
,则不对输出应用任何组织结构,返回集中的 label 和 offsets 值将为 std::nullopt。如果指定了
starting_vertex_label_offsets
但未指定label_to_output_comm_rank
,则 label 输出将包含值。这将导致输出按顶点标签排序。返回中的 offsets 数组将是 CSR 样式的偏移量数组,用于标识数据中每个标签范围的开始位置。labels.size() == (offsets.size() - 1)
。如果指定了
starting_vertex_label_offsets
并指定了label_to_output_comm_rank
,则 label 输出将包含值。这将导致输出按顶点标签排序。返回中的 offsets 数组将是 CSR 样式的偏移量数组,用于标识数据中每个标签范围的开始位置。labels.size() == (offsets.size() - 1)
。此外,数据将被打乱,以便具有特定标签的所有数据都位于指定的 rank 上。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
edge_type_t – 边类型的类型。需要是整数类型。
bias_t – 偏向的类型。需要是整数类型。
label_t – 标签的类型。需要是整数类型。
store_transposed – 标志,指示源 (如果为 false) 或目标 (如果为 true) 是否为主要索引
multi_gpu – 标志,指示模板实例化是针对单 GPU (false)
- 参数:
handle – 用于封装运行图算法所需的资源(例如 CUDA 流、通信器和各种 CUDA 库的句柄)的 RAFT 句柄对象。
graph_view – 用于生成 NBR 采样的 Graph View 对象。
edge_weight_view –
graph_view
的可选视图对象,用于存储边权重。edge_id_view –
graph_view
的可选视图对象,用于存储边 ID。edge_type_view –
graph_view
的可选视图对象,用于存储边类型。edge_bias_view –
graph_view
的视图对象,用于存储边偏向(用于偏向采样)。偏向值应为非负数,且任何顶点的边偏向值总和不应超过 std::numeric_limits<bias_t>::max()。偏向值为 0 表示相应的边永远不会被选中。starting_vertices – 采样的起始顶点 ID 的设备 span。在多 GPU 环境中,起始顶点应在此 GPU 本地。
starting_vertex_label_offsets – 可选的设备 span,用于存储与每个起始顶点相关的标签。
label_to_output_comm_rank – 可选的设备 spans 元组,用于将标签映射到特定的输出 rank。元组的元素 0 标识标签,元组的元素 1 标识输出 rank。标签 span 必须按升序排序。
fan_out – 定义每个源顶点每层分支(扇出)度的 Host span
rng_state – 预初始化的 raft::RngState 对象,用于生成随机数
return_hops – 布尔标志,指定是否返回跳数信息
prior_sources_behavior – 枚举类型,定义如何处理先前的源(默认为 DEFAULT)
dedupe_sources – 布尔标志,如果为 true,则如果顶点 v 在跳 X 中以相同标签多次作为目标出现,它将仅作为下一跳的源(每个标签)传递一次。默认为 false。
with_replacement – 布尔标志,指定随机采样是否是有放回的 (true);或无放回的 (false);默认为 true;
do_expensive_check – 一个标志,用于对输入参数运行昂贵的检查(如果设置为
true
)。- 返回值:
元组设备向量(vertex_t 源顶点, vertex_t 目标顶点, 可选 weight_t 权重, 可选 edge_t 边 ID, 可选 edge_type_t 边类型, 可选 int32_t 跳数, 可选 label_t 标签, 可选 size_t 偏移量)
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, bool store_transposed, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, std::optional<rmm::device_uvector<edge_t>>, std::optional<rmm::device_uvector<edge_type_t>>, std::optional<rmm::device_uvector<int32_t>>, std::optional<rmm::device_uvector<size_t>>> homogeneous_uniform_neighbor_sample(raft::handle_t const &handle, raft::random::RngState &rng_state, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, std::optional<edge_property_view_t<edge_t, edge_t const*>> edge_id_view, std::optional<edge_property_view_t<edge_t, edge_type_t const*>> edge_type_view, raft::device_span<vertex_t const> starting_vertices, std::optional<raft::device_span<int32_t const>> starting_vertex_labels, std::optional<raft::device_span<int32_t const>> label_to_output_comm_rank, raft::host_span<int32_t const> fan_out, sampling_flags_t sampling_flags, bool do_expensive_check = false)#均匀同质邻居采样。
此函数从一组起始顶点开始遍历出边,并从这些出边邻居中随机(均匀)选择以提取一个子图。选择出边邻居的分支过程使用同质扇出度执行。
此函数的输出是向量的元组 (src, dst, weight, edge_id, edge_type, hop, offsets),用于标识随机选择的边,其中 src、dst、weight、edge_id、edge_type 和 hop 的大小是采样边的数量,而 offsets 向量的大小是标签数量 + 1。src 是源顶点,dst 是目标顶点,weight (可选) 是边权重,edge_id (可选) 标识边 ID,edge_type (可选) 标识边类型,hop 标识遇到该边的跳数。offsets 数组 (可选) 标识每个标签的偏移量。
如果指定了
label_to_output_comm_rank
,则数据将被打乱,以便特定标签的所有条目都在指定的 rank 上返回。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
edge_type_t – 边类型的类型。需要是整数类型。
store_transposed – 标志,指示源 (如果为 false) 或目标 (如果为 true) 是否为主要索引
multi_gpu – 标志,指示模板实例化是针对单 GPU (false)
- 参数:
handle – 用于封装运行图算法所需的资源(例如 CUDA 流、通信器和各种 CUDA 库的句柄)的 RAFT 句柄对象。
rng_state – 预初始化的 raft::RngState 对象,用于生成随机数
graph_view – 用于生成 NBR 采样的 Graph View 对象。
edge_weight_view –
graph_view
的可选视图对象,用于存储边权重。edge_id_view –
graph_view
的可选视图对象,用于存储边 ID。edge_type_view –
graph_view
的可选视图对象,用于存储边类型。starting_vertices – 采样的起始顶点 ID 的设备 span。在多 GPU 环境中,起始顶点应在此 GPU 本地。
starting_vertex_labels – 与每个用于采样的起始顶点关联的可选设备标签跨度。
label_to_output_comm_rank – 标识每个顶点标签的采样输出应该发送到哪个 rank 的可选设备跨度。这在每个 rank 上应该相同。
fan_out – 定义每个级别的每个源顶点的分支(扇出)度的宿主跨度。负值表示应选择源顶点的所有邻居。
flags – 指示应使用哪些采样功能的标志集合。
do_expensive_check – 一个标志,用于对输入参数运行昂贵的检查(如果设置为
true
)。- 返回值:
元组设备向量(vertex_t 源顶点, vertex_t 目标顶点, 可选 weight_t 权重, 可选 edge_t 边 ID, 可选 edge_type_t 边类型, 可选 int32_t 跳数, 可选 label_t 标签, 可选 size_t 偏移量)
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, bool store_transposed, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, std::optional<rmm::device_uvector<edge_t>>, std::optional<rmm::device_uvector<edge_type_t>>, std::optional<rmm::device_uvector<int32_t>>, std::optional<rmm::device_uvector<size_t>>> heterogeneous_uniform_neighbor_sample(raft::handle_t const &handle, raft::random::RngState &rng_state, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, std::optional<edge_property_view_t<edge_t, edge_t const*>> edge_id_view, edge_property_view_t<edge_t, edge_type_t const*> edge_type_view, raft::device_span<vertex_t const> starting_vertices, std::optional<raft::device_span<int32_t const>> starting_vertex_labels, std::optional<raft::device_span<int32_t const>> label_to_output_comm_rank, raft::host_span<int32_t const> fan_out, edge_type_t num_edge_types, sampling_flags_t sampling_flags, bool do_expensive_check = false)#异质均匀邻居采样。
此函数从一组起始顶点开始遍历出边,并从这些出边邻居中随机(均匀)选择以提取一个子图。选择出边邻居的分支过程使用异质扇出度执行,其中边类型数量大于 1。
此函数的输出是向量的元组 (src, dst, weight, edge_id, edge_type, hop, offsets),用于标识随机选择的边,其中 src、dst、weight、edge_id、edge_type 和 hop 的大小是采样边的数量,而 offsets 向量的大小是标签数量 + 1。src 是源顶点,dst 是目标顶点,weight (可选) 是边权重,edge_id (可选) 标识边 ID,edge_type (可选) 标识边类型,hop 标识遇到该边的跳数。offsets 数组 (可选) 标识每个标签的偏移量。
如果指定了
label_to_output_comm_rank
,则数据将被打乱,以便特定标签的所有条目都在指定的 rank 上返回。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
edge_type_t – 边类型的类型。需要是整数类型。
store_transposed – 标志,指示源 (如果为 false) 或目标 (如果为 true) 是否为主要索引
multi_gpu – 标志,指示模板实例化是针对单 GPU (false)
- 参数:
handle – 用于封装运行图算法所需的资源(例如 CUDA 流、通信器和各种 CUDA 库的句柄)的 RAFT 句柄对象。
rng_state – 预初始化的 raft::RngState 对象,用于生成随机数
graph_view – 用于生成 NBR 采样的 Graph View 对象。
edge_weight_view –
graph_view
的可选视图对象,用于存储边权重。edge_id_view –
graph_view
的可选视图对象,用于存储边 ID。edge_type_view – 保存
graph_view
的边类型的视图对象。starting_vertices – 采样的起始顶点 ID 的设备 span。在多 GPU 环境中,起始顶点应在此 GPU 本地。
starting_vertex_labels – 与每个用于采样的起始顶点关联的可选设备标签跨度。
label_to_output_comm_rank – 标识每个顶点标签的采样输出应该发送到哪个 rank 的可选设备跨度。这在每个 rank 上应该相同。
fan_out – 定义每个级别的每个源顶点的分支(扇出)度的宿主跨度。在跳数 x 处的扇出度值由表达式 ‘fanout[x*num_edge_types + edge_type_id]’ 给出。负值表示应选择源顶点的所有邻居。
num_edge_types – 边类型数量,其中值为 1 表示同质邻居采样,而值大于 1 表示异质邻居采样。
flags – 指示应使用哪些采样功能的标志集合。
do_expensive_check – 一个标志,用于对输入参数运行昂贵的检查(如果设置为
true
)。- 返回值:
元组设备向量(vertex_t 源顶点, vertex_t 目标顶点, 可选 weight_t 权重, 可选 edge_t 边 ID, 可选 edge_type_t 边类型, 可选 int32_t 跳数, 可选 label_t 标签, 可选 size_t 偏移量)
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, typename bias_t, bool store_transposed, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, std::optional<rmm::device_uvector<edge_t>>, std::optional<rmm::device_uvector<edge_type_t>>, std::optional<rmm::device_uvector<int32_t>>, std::optional<rmm::device_uvector<size_t>>> homogeneous_biased_neighbor_sample(raft::handle_t const &handle, raft::random::RngState &rng_state, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, std::optional<edge_property_view_t<edge_t, edge_t const*>> edge_id_view, std::optional<edge_property_view_t<edge_t, edge_type_t const*>> edge_type_view, edge_property_view_t<edge_t, bias_t const*> edge_bias_view, raft::device_span<vertex_t const> starting_vertices, std::optional<raft::device_span<int32_t const>> starting_vertex_labels, std::optional<raft::device_span<int32_t const>> label_to_output_comm_rank, raft::host_span<int32_t const> fan_out, sampling_flags_t sampling_flags, bool do_expensive_check = false)#均匀带偏邻居采样。
此函数从一组起始顶点开始遍历出边,并从这些出边邻居中随机选择(带边偏置)以提取一个子图。选择出边邻居的分支过程使用同质扇出度执行。
此函数的输出是向量的元组 (src, dst, weight, edge_id, edge_type, hop, offsets),用于标识随机选择的边,其中 src、dst、weight、edge_id、edge_type 和 hop 的大小是采样边的数量,而 offsets 向量的大小是标签数量 + 1。src 是源顶点,dst 是目标顶点,weight (可选) 是边权重,edge_id (可选) 标识边 ID,edge_type (可选) 标识边类型,hop 标识遇到该边的跳数。offsets 数组 (可选) 标识每个标签的偏移量。
如果指定了
label_to_output_comm_rank
,则数据将被打乱,以便特定标签的所有条目都在指定的 rank 上返回。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
edge_type_t – 边类型的类型。需要是整数类型。
bias_t – 偏向的类型。需要是整数类型。
store_transposed – 标志,指示源 (如果为 false) 或目标 (如果为 true) 是否为主要索引
multi_gpu – 标志,指示模板实例化是针对单 GPU (false)
- 参数:
handle – 用于封装运行图算法所需的资源(例如 CUDA 流、通信器和各种 CUDA 库的句柄)的 RAFT 句柄对象。
rng_state – 预初始化的 raft::RngState 对象,用于生成随机数
graph_view – 用于生成 NBR 采样的 Graph View 对象。
edge_weight_view –
graph_view
的可选视图对象,用于存储边权重。edge_id_view –
graph_view
的可选视图对象,用于存储边 ID。edge_type_view –
graph_view
的可选视图对象,用于存储边类型。edge_bias_view –
graph_view
的视图对象,用于存储边偏向(用于偏向采样)。偏向值应为非负数,且任何顶点的边偏向值总和不应超过 std::numeric_limits<bias_t>::max()。偏向值为 0 表示相应的边永远不会被选中。starting_vertices – 采样的起始顶点 ID 的设备 span。在多 GPU 环境中,起始顶点应在此 GPU 本地。
starting_vertex_labels – 与每个用于采样的起始顶点关联的可选设备标签跨度。
label_to_output_comm_rank – 标识每个顶点标签的采样输出应该发送到哪个 rank 的可选设备跨度。这在每个 rank 上应该相同。
fan_out – 定义每个级别的每个源顶点的分支(扇出)度的宿主跨度。负值表示应选择源顶点的所有邻居。
flags – 指示应使用哪些采样功能的标志集合。
do_expensive_check – 一个标志,用于对输入参数运行昂贵的检查(如果设置为
true
)。- 返回值:
元组设备向量(vertex_t 源顶点, vertex_t 目标顶点, 可选 weight_t 权重, 可选 edge_t 边 ID, 可选 edge_type_t 边类型, 可选 int32_t 跳数, 可选 label_t 标签, 可选 size_t 偏移量)
- template<typename vertex_t, typename edge_t, typename weight_t, typename edge_type_t, typename bias_t, bool store_transposed, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, std::optional<rmm::device_uvector<edge_t>>, std::optional<rmm::device_uvector<edge_type_t>>, std::optional<rmm::device_uvector<int32_t>>, std::optional<rmm::device_uvector<size_t>>> heterogeneous_biased_neighbor_sample(raft::handle_t const &handle, raft::random::RngState &rng_state, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, std::optional<edge_property_view_t<edge_t, edge_t const*>> edge_id_view, edge_property_view_t<edge_t, edge_type_t const*> edge_type_view, edge_property_view_t<edge_t, bias_t const*> edge_bias_view, raft::device_span<vertex_t const> starting_vertices, std::optional<raft::device_span<int32_t const>> starting_vertex_labels, std::optional<raft::device_span<int32_t const>> label_to_output_comm_rank, raft::host_span<int32_t const> fan_out, edge_type_t num_edge_types, sampling_flags_t sampling_flags, bool do_expensive_check = false)#异构偏差邻居采样。
此函数从一组起始顶点开始遍历,遍历出边并从这些出边邻居中随机选择(带有边偏差),以提取一个子图。选择出边邻居的分支操作是通过边类型数量大于 1 的异构扇出来执行的。
此函数的输出是向量的元组 (src, dst, weight, edge_id, edge_type, hop, offsets),用于标识随机选择的边,其中 src、dst、weight、edge_id、edge_type 和 hop 的大小是采样边的数量,而 offsets 向量的大小是标签数量 + 1。src 是源顶点,dst 是目标顶点,weight (可选) 是边权重,edge_id (可选) 标识边 ID,edge_type (可选) 标识边类型,hop 标识遇到该边的跳数。offsets 数组 (可选) 标识每个标签的偏移量。
如果指定了
label_to_output_comm_rank
,则数据将被打乱,以便特定标签的所有条目都在指定的 rank 上返回。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
edge_type_t – 边类型的类型。需要是整数类型。
bias_t – 偏向的类型。需要是整数类型。
store_transposed – 标志,指示源 (如果为 false) 或目标 (如果为 true) 是否为主要索引
multi_gpu – 标志,指示模板实例化是针对单 GPU (false)
- 参数:
handle – 用于封装运行图算法所需的资源(例如 CUDA 流、通信器和各种 CUDA 库的句柄)的 RAFT 句柄对象。
rng_state – 预初始化的 raft::RngState 对象,用于生成随机数
graph_view – 用于生成 NBR 采样的 Graph View 对象。
edge_weight_view –
graph_view
的可选视图对象,用于存储边权重。edge_id_view –
graph_view
的可选视图对象,用于存储边 ID。edge_type_view – 保存
graph_view
的边类型的视图对象。edge_bias_view –
graph_view
的视图对象,用于存储边偏向(用于偏向采样)。偏向值应为非负数,且任何顶点的边偏向值总和不应超过 std::numeric_limits<bias_t>::max()。偏向值为 0 表示相应的边永远不会被选中。starting_vertices – 采样的起始顶点 ID 的设备 span。在多 GPU 环境中,起始顶点应在此 GPU 本地。
starting_vertex_labels – 与每个用于采样的起始顶点关联的可选设备标签跨度。
label_to_output_comm_rank – 标识每个顶点标签的采样输出应该发送到哪个 rank 的可选设备跨度。这在每个 rank 上应该相同。
fan_out – 定义每个级别的每个源顶点的分支(扇出)度的宿主跨度。在跳数 x 处的扇出度值由表达式 ‘fanout[x*num_edge_types + edge_type_id]’ 给出。负值表示应选择源顶点的所有邻居。
num_edge_types – 边类型数量,其中值为 1 表示同质邻居采样,而值大于 1 表示异质邻居采样。
flags – 指示应使用哪些采样功能的标志集合。
do_expensive_check – 一个标志,用于对输入参数运行昂贵的检查(如果设置为
true
)。- 返回值:
元组设备向量(vertex_t 源顶点, vertex_t 目标顶点, 可选 weight_t 权重, 可选 edge_t 边 ID, 可选 edge_type_t 边类型, 可选 int32_t 跳数, 可选 label_t 标签, 可选 size_t 偏移量)
- template<typename vertex_t, typename weight_t, typename edge_id_t, typename edge_type_t>
std::tuple<std::optional<rmm::device_uvector<vertex_t>>, rmm::device_uvector<size_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, std::optional<rmm::device_uvector<edge_id_t>>, std::optional<rmm::device_uvector<edge_type_t>>, std::optional<rmm::device_uvector<size_t>>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<size_t>>> renumber_and_compress_sampled_edgelist(raft::handle_t const &handle, rmm::device_uvector<vertex_t> &&edgelist_srcs, rmm::device_uvector<vertex_t> &&edgelist_dsts, std::optional<rmm::device_uvector<weight_t>> &&edgelist_weights, std::optional<rmm::device_uvector<edge_id_t>> &&edgelist_edge_ids, std::optional<rmm::device_uvector<edge_type_t>> &&edgelist_edge_types, std::optional<rmm::device_uvector<int32_t>> &&edgelist_hops, std::optional<raft::device_span<vertex_t const>> seed_vertices, std::optional<raft::device_span<size_t const>> seed_vertex_label_offsets, std::optional<raft::device_span<size_t const>> edgelist_label_offsets, size_t num_labels, size_t num_hops, bool src_is_major = true, bool compress_per_hop = false, bool doubly_compress = false, bool do_expensive_check = false)#重新编号采样得到的边列表并压缩成 (D)CSR|(D)CSC 格式。
此函数重新编号采样函数(例如 uniform_neighbor_sample)的输出边,满足以下要求。如果
src_is_major
为 true,则假定主要顶点为源顶点;如果src_is_major
为 false,则主要顶点为目标顶点。
如果
edgelist_hops
有效,我们可以为边主要顶点(如果src_is_major
为 true,则为edgelist_srcs
;如果为 false,则为edgelist_dsts
)中的每个顶点 ID 考虑 (顶点 ID, 跳数, 标志=主要) 三元组,并为边次要顶点中的每个顶点 ID 考虑 (顶点 ID, 跳数, 标志=次要) 三元组。从这些三元组中,我们可以找到每个唯一顶点 ID 的最小 (跳数, 标志) 对(跳数是主键,标志是次键;如果跳数相同,则标志=主要被视为小于标志=次要)。在重新编号时,(跳数, 标志) 对较小的顶点 ID 排在 (跳数, 标志) 对较大的顶点 ID 前面。具有相同 (跳数, 标志) 对的顶点之间的排序可以是任意的。如果seed_vertices.has_value()
为 true,在重新编号时,我们假定*seed_vertices
中的每个顶点都为 (跳数=0, 标志=主要)(这在存在没有邻居的种子顶点时很关键)。如果
edgelist_hops
无效,边主要顶点中的唯一顶点 ID 排在仅出现在边次要顶点中的顶点 ID 前面。如果seed_vertices.has_value()
为 true,*seed_vertices
中的顶点也排在仅出现在边次要顶点中的顶点 ID 前面。如果 edgelist_label_offsets.has_value() 为 true,不同标签的边列表将分别重新编号。
重新编号的边根据以下要求进行压缩。
如果
compress_per_hop
为 true,边按跳数分别压缩。如果compress_per_hop
为 false,具有不同跳数的边一起压缩。不同标签的边独立压缩。
如果
doubly_compress
为 false,边被压缩为 CSR 格式(如果src_is_major
为 true)或 CSC 格式(如果src_is_major
为 false)。如果doubly_compress
为 true,边被压缩为 DCSR 格式(如果src_is_major
为 true)或 DCSC 格式(如果src_is_major
为 false)。如果doubly_compress
为 false,CSR/CSC 偏移数组的大小是顶点数量(即最大顶点 ID + 1)+ 1。在这里,如果compress_per_hop
为 false 或针对跳数 0 进行压缩时(如果seed_vertices
有效,则应包含),最大顶点 ID 是待压缩边中的最大主要顶点 ID。如果compress_per_hop
为 true 且跳数大于等于 1,最大顶点 ID 是该跳的最大主要顶点 ID 与前几跳边中的最大顶点 ID 的较大者。如果
compress_per_hop
为 false 且edgelist_hops.has_value()
为 true,在重新编号并按 (跳数, 主要顶点, 次要顶点) 排序后,每个标签内的主要顶点应是非递减的。此外,跳数 N 中的主要顶点不应出现在任何前几跳中。如果跳数 N + 1 中的主要顶点不包含前几跳中的任何顶点(跳数 N 中的次要顶点除外),则满足此条件。此函数仅支持单 GPU(我们尚不清楚任何实际的多 GPU 用例)。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型
edge_id_t – 边 ID 的类型。需要是整数类型
edge_type_t – 边类型的类型。需要是整数类型,当前仅支持 int32_t。
- 参数:
handle – 用于封装运行图算法所需的资源(例如 CUDA 流、通信器和各种 CUDA 库的句柄)的 RAFT 句柄对象。
edgelist_srcs – 存储边列表源顶点的向量。
edgelist_dsts – 存储边列表目标顶点的向量(大小 =
edgelist_srcs.size()
)。edgelist_weights – 存储边列表权重的可选向量(如果有效,大小 =
edgelist_srcs.size()
)。edgelist_edge_ids – 存储边列表边 ID 的可选向量(如果有效,大小 =
edgelist_srcs.size()
)。edgelist_edge_types – 存储边列表边类型的可选向量(如果有效,大小 =
edgelist_srcs.size()
)。edgelist_hops – 存储边列表跳数的可选向量(如果有效,大小 =
edgelist_srcs.size()
)。如果num_hops
>= 2,则edgelist_hops
应有效。seed_vertices – 指向存储跳数 0 中种子顶点数组的可选指针。
seed_vertex_label_offsets – 指向存储种子顶点标签偏移数组的可选指针(大小 =
num_labels
+ 1)。如果num_labels
>= 2 且seed_vertices
有效,则seed_vertex_label_offsets
应有效,否则无效。edgelist_label_offsets – 指向存储输入边标签偏移数组的可选指针(大小 =
num_labels
+ 1)。如果num_labels
>= 2,则edgelist_label_offsets
应有效。num_labels – 标签数量。如果
num_labels
>=2 则考虑标签,如果num_labels
= 1 则忽略标签。num_hops – 跳数。如果
num_hops
>=2 则考虑跳数,如果num_hops
= 1 则忽略跳数。src_is_major – 一个标志,用于确定在重新编号和压缩时是否使用源顶点或目标顶点作为主要键。
compress_per_hop – 一个标志,用于确定是否分别压缩具有不同跳数的边(如果为 true)或一起压缩(如果为 false)。如果
compress_per_hop
为 true,edgelist_hops.has_value()
应为 true 且doubly_compress
应为 false。doubly_compress – 一个标志,用于确定是压缩为 CSR/CSC 格式(如果为 false)还是 DCSR/DCSC 格式(如果为 true)。
do_expensive_check – 一个标志,用于对输入参数运行昂贵的检查(如果设置为
true
)。- 返回值:
存储具有一个或多个邻居的可选 DCSR/DCSC 主要顶点 ID 的向量元组,(D)CSR|(D)CSC 偏移值,边次要顶点 ID,可选边权重(仅当
edgelist_weights.has_value()
为 true 时有效),可选边 ID(仅当edgelist_edge_ids.has_value()
为 true 时有效),可选边类型(仅当edgelist_edge_types.has_value()
为 true 时有效),指向 (D)CSR|(D)CSC 偏移数组的可选 (标签, 跳数) 偏移值(大小 =num_labels
*num_hops
+ 1,仅当edgelist_hops.has_value()
或edgelist_label_offsets.has_value()
为 true 时有效),用于查询原始顶点的 renumber_map(大小 = 每个标签的唯一顶点数量或聚合的唯一顶点数量),以及指向 renumber_map 的标签偏移(大小 = num_labels + 1,仅当edgelist_label_offsets.has_value()
为 true 时有效)。
- template<typename vertex_t, typename weight_t, typename edge_id_t, typename edge_type_t>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, std::optional<rmm::device_uvector<edge_id_t>>, std::optional<rmm::device_uvector<edge_type_t>>, std::optional<rmm::device_uvector<size_t>>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<size_t>>> renumber_and_sort_sampled_edgelist(raft::handle_t const &handle, rmm::device_uvector<vertex_t> &&edgelist_srcs, rmm::device_uvector<vertex_t> &&edgelist_dsts, std::optional<rmm::device_uvector<weight_t>> &&edgelist_weights, std::optional<rmm::device_uvector<edge_id_t>> &&edgelist_edge_ids, std::optional<rmm::device_uvector<edge_type_t>> &&edgelist_edge_types, std::optional<rmm::device_uvector<int32_t>> &&edgelist_hops, std::optional<raft::device_span<vertex_t const>> seed_vertices, std::optional<raft::device_span<size_t const>> seed_vertex_label_offsets, std::optional<raft::device_span<size_t const>> edgelist_label_offsets, size_t num_labels, size_t num_hops, bool src_is_major = true, bool do_expensive_check = false)#对采样的边列表进行重新编号并对重新编号后的边进行排序。
此函数重新编号采样函数(例如 uniform_neighbor_sample)的输出边,满足以下要求。如果
src_is_major
为 true,则假定主要顶点为源顶点;如果src_is_major
为 false,则主要顶点为目标顶点。
如果
edgelist_hops
有效,我们可以考虑边主要部分(如果src_is_major
为 true 则是edgelist_srcs
,如果为 false 则是edgelist_dsts
)中每个顶点 ID 的(顶点 ID、跳数、标志=主要)三元组,以及边次要部分中每个顶点 ID 的(顶点 ID、跳数、标志=次要)三元组。从这些三元组中,我们可以找到每个唯一顶点 ID 的最小(跳数、标志)对(跳数是主键,标志是副键;如果跳数相同,则标志=主要被认为小于标志=次要)。在重新编号时,具有较小(跳数、标志)对的顶点 ID 会排在具有较大(跳数、标志)对的顶点 ID 之前。具有相同(跳数、标志)对的顶点之间的顺序可以是任意的。如果seed_vertices.has-value()
为 true,则在重新编号时,我们假设*seed_vertices
中的每个顶点都是(跳数=0,标志=主要)(这在存在没有邻居的种子顶点时相关)。如果
edgelist_hops
无效,边主要顶点中的唯一顶点 ID 排在仅出现在边次要顶点中的顶点 ID 前面。如果seed_vertices.has_value()
为 true,*seed_vertices
中的顶点也排在仅出现在边次要顶点中的顶点 ID 前面。如果 edgelist_label_offsets.has_value() 为 true,不同标签的边列表将分别重新编号。
重新编号后的边按照以下规则排序。
如果
src_is_major
为 true,则使用 ((hop), src, dst) 作为排序键。如果src_is_major
为 false,则使用 ((hop), dst, src)。仅当edgelist_hops.has_value()
为 true 时才使用 hop。如果
edgelist_label_offsets.has_value()
为 true,则每个标签中的边独立排序。此函数仅支持单 GPU(我们尚不清楚任何实际的多 GPU 用例)。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型
edge_id_t – 边 ID 的类型。需要是整数类型
edge_type_t – 边类型的类型。需要是整数类型,当前仅支持 int32_t。
- 参数:
handle – 用于封装运行图算法所需的资源(例如 CUDA 流、通信器和各种 CUDA 库的句柄)的 RAFT 句柄对象。
edgelist_srcs – 存储边列表源顶点的向量。
edgelist_dsts – 存储边列表目标顶点的向量(大小 =
edgelist_srcs.size()
)。edgelist_weights – 存储边列表权重的可选向量(如果有效,大小 =
edgelist_srcs.size()
)。edgelist_edge_ids – 存储边列表边 ID 的可选向量(如果有效,大小 =
edgelist_srcs.size()
)。edgelist_edge_types – 存储边列表边类型的可选向量(如果有效,大小 =
edgelist_srcs.size()
)。edgelist_hops – 存储边列表跳数的可选向量(如果有效,大小 =
edgelist_srcs.size()
)。如果num_hops
>= 2,则edgelist_hops
应有效。seed_vertices – 指向存储跳数 0 中种子顶点数组的可选指针。
seed_vertex_label_offsets – 指向存储种子顶点标签偏移数组的可选指针(大小 =
num_labels
+ 1)。如果num_labels
>= 2 且seed_vertices
有效,则seed_vertex_label_offsets
应有效,否则无效。edgelist_label_offsets – 指向存储输入边标签偏移数组的可选指针(大小 =
num_labels
+ 1)。如果num_labels
>= 2,则edgelist_label_offsets
应有效。num_labels – 标签数量。如果
num_labels
>=2 则考虑标签,如果num_labels
= 1 则忽略标签。num_hops – 跳数。如果
num_hops
>=2 则考虑跳数,如果num_hops
= 1 则忽略跳数。src_is_major – 一个标志,用于确定在重新编号和排序时使用源顶点还是目标顶点作为主键。
do_expensive_check – 一个标志,用于对输入参数运行昂贵的检查(如果设置为
true
)。- 返回值:
向量元组,存储边的源顶点、边的目标顶点、可选的边权重(仅在
edgelist_weights.has_value()
为 true 时有效)、可选的边 ID(仅在edgelist_edge_ids.has_value()
为 true 时有效)、可选的边类型(仅在edgelist_edge_types.has_value()
为 true 时有效)、可选的(标签、跳数)偏移值到重新编号和排序后的边(大小 =num_labels
*num_hops
+ 1,仅当edgelist_hops.has_value()
或edgelist_label_offsetes.has_value()
为 true 时有效)、用于查询原始顶点的 renumber_map(大小 = 每个标签的唯一或聚合的唯一顶点数),以及标签偏移值到 renumber map(大小 =num_labels
+ 1,仅在edgelist_label_offsets.has_value()
为 true 时有效)。
- template<typename vertex_t, typename weight_t, typename edge_id_t, typename edge_type_t>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, std::optional<rmm::device_uvector<edge_id_t>>, std::optional<rmm::device_uvector<size_t>>, rmm::device_uvector<vertex_t>, rmm::device_uvector<size_t>, std::optional<rmm::device_uvector<edge_id_t>>, std::optional<rmm::device_uvector<size_t>>> heterogeneous_renumber_and_sort_sampled_edgelist(raft::handle_t const &handle, rmm::device_uvector<vertex_t> &&edgelist_srcs, rmm::device_uvector<vertex_t> &&edgelist_dsts, std::optional<rmm::device_uvector<weight_t>> &&edgelist_weights, std::optional<rmm::device_uvector<edge_id_t>> &&edgelist_edge_ids, std::optional<rmm::device_uvector<edge_type_t>> &&edgelist_edge_types, std::optional<rmm::device_uvector<int32_t>> &&edgelist_hops, std::optional<raft::device_span<vertex_t const>> seed_vertices, std::optional<raft::device_span<size_t const>> seed_vertex_label_offsets, std::optional<raft::device_span<size_t const>> edgelist_label_offsets, raft::device_span<vertex_t const> vertex_type_offsets, size_t num_labels, size_t num_hops, size_t num_vertex_types, size_t num_edge_types, bool src_is_major = true, bool do_expensive_check = false)#按顶点/边类型对采样的边列表(顶点和边ID)进行重新编号,并对重新编号后的边进行排序。
此函数对采样函数(例如 uniform_neighbor_sample)输出的边源顶点/目标顶点 ID 进行重新编号,以满足以下要求。如果
src_is_major
为 true,则假定主要为源顶点;如果src_is_major
为 false,则假定主要为目标顶点。
如果
edgelist_hops
有效,我们可以考虑边主要部分(如果src_is_major
为 true 则是edgelist_srcs
,如果为 false 则是edgelist_dsts
)中每个顶点 ID 的(顶点 ID、跳数、标志=主要)三元组,以及边次要部分中每个顶点 ID 的(顶点 ID、跳数、标志=次要)三元组。从这些三元组中,我们可以找到每个唯一顶点 ID 的最小(跳数、标志)对(跳数是主键,标志是副键;如果跳数相同,则标志=主要被认为小于标志=次要)。在重新编号时,具有较小(跳数、标志)对的顶点 ID 会排在具有较大(跳数、标志)对的顶点 ID 之前(如果它们的顶点类型相同,不同类型的顶点会分别重新编号)。具有相同(顶点类型、跳数、标志)三元组的顶点之间的顺序可以是任意的。如果seed_vertices.has_value()
为 true,则在重新编号时,我们假设*seed_vertices
中的每个顶点都是(跳数=0,标志=主要)(这在存在没有邻居的种子顶点时相关)。如果
edgelist_hops
无效,边主要顶点中的唯一顶点 ID 排在仅出现在边次要顶点中的顶点 ID 前面。如果seed_vertices.has_value()
为 true,*seed_vertices
中的顶点也排在仅出现在边次要顶点中的顶点 ID 前面。不同类型的顶点将分别重新编号。每个顶点类型的唯一顶点 ID 被映射到从 0 开始的连续整数。
如果 edgelist_label_offsets.has_value() 为 true,不同标签的边列表将分别重新编号。
边 ID 按照以下要求重新编号(这仅在
edgelist_edge_ids.has_value()
为 true 时相关)。
如果
edgelist_hops
有效,我们可以考虑(边 ID,跳数)对。从这些对中,我们可以找到每个唯一边 ID 的最小跳数值。在重新编号时,具有较小跳数值的边 ID 会排在具有较大跳数值的边 ID 之前(如果它们的边类型相同,不同边类型的边会分别重新编号)。具有相同(边类型,跳数)对的边 ID 之间的顺序可以是任意的。如果
edgelist_edge_hops.has_value()
为 false,则唯一边 ID(如果edgelist_edge_types.has_value()
为 true,则为每种边类型)被映射到从 0 开始的连续整数。顺序可以是任意的。如果 edgelist_label_offsets.has_value() 为 true,不同标签的边列表将分别重新编号。
重新编号后的边按照以下规则排序。
如果
src_is_major
为 true,则使用 ((edge type), (hop), src, dst) 作为排序键。如果src_is_major
为 false,则使用 ((edge type), (hop), dst, src)。仅当edgelist_edge_types.has_value()
为 true 时才使用边类型。仅当edgelist_hops.has_value()
为 true 时才使用 hop。如果
edgelist_label_offsets.has_value()
为 true,则每个标签中的边独立排序。此函数假定每条边都有一个单一的边源顶点类型和一个单一的边目标顶点类型。如果
edgelist_edge_types.has_value()
为 false(即只有一种边类型),则应该只有一个边源顶点类型和一个边目标顶点类型;源顶点和目标顶点类型可能重合也可能不重合。此函数仅支持单 GPU(我们尚不清楚任何实际的多 GPU 用例)。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型
edge_id_t – 边 ID 的类型。需要是整数类型
edge_type_t – 边类型的类型。需要是整数类型,当前仅支持 int32_t。
- 参数:
handle – 用于封装运行图算法所需的资源(例如 CUDA 流、通信器和各种 CUDA 库的句柄)的 RAFT 句柄对象。
edgelist_srcs – 存储边列表源顶点的向量。
edgelist_dsts – 存储边列表目标顶点的向量(大小 =
edgelist_srcs.size()
)。edgelist_weights – 存储边列表权重的可选向量(如果有效,大小 =
edgelist_srcs.size()
)。edgelist_edge_ids – 存储边列表边 ID 的可选向量(如果有效,大小 =
edgelist_srcs.size()
)。edgelist_edge_types – 存储边列表边类型的可选向量(如果有效,大小 =
edgelist_srcs.size()
)。edgelist_hops – 存储边列表跳数的可选向量(如果有效,大小 =
edgelist_srcs.size()
)。如果num_hops
>= 2,则edgelist_hops
应有效。seed_vertices – 指向存储跳数 0 中种子顶点数组的可选指针。
seed_vertex_label_offsets – 指向存储种子顶点标签偏移数组的可选指针(大小 =
num_labels
+ 1)。如果num_labels
>= 2 且seed_vertices
有效,则seed_vertex_label_offsets
应有效,否则无效。edgelist_label_offsets – 指向存储输入边标签偏移数组的可选指针(大小 =
num_labels
+ 1)。如果num_labels
>= 2,则edgelist_label_offsets
应有效。vertex_type – offsets 指向存储整个顶点 ID 范围的顶点类型偏移量的数组的指针(数组大小 =
num_vertex_types
+ 1)。例如,如果数组存储 [0, 100, 200],则顶点 ID [0, 100) 具有顶点类型 0,顶点 ID [100, 200) 具有顶点类型 1。num_labels – 标签数量。如果
num_labels
>=2 则考虑标签,如果num_labels
= 1 则忽略标签。num_hops – 跳数。如果
num_hops
>=2 则考虑跳数,如果num_hops
= 1 则忽略跳数。num_vertex_types – 顶点类型数量。
num_edge_types – 边类型数量。
src_is_major – 一个标志,用于确定在重新编号和排序时使用源顶点还是目标顶点作为主键。
do_expensive_check – 一个标志,用于对输入参数运行昂贵的检查(如果设置为
true
)。- 返回值:
向量元组,存储重新编号的边源顶点、重新编号的边目标顶点、可选的边权重(仅在
edgelist_weights.has_value()
为 true 时有效)、可选的重新编号的边 ID(仅在edgelist_edge_ids.has_value()
为 true 时有效)、可选的(标签、边类型、跳数)偏移值到重新编号和排序后的边(大小 =num_labels
*num_edge_types
*num_hops
+ 1,仅当edgelist_edge_types.has_value()
、edgelist_hops.has_value()
或edgelist_label_offsetes.has_value()
为 true 时有效)、用于查询原始顶点的 renumber_map(大小 = 每个标签的唯一或聚合的唯一顶点数)、(标签、顶点类型)偏移值到顶点 renumber map(大小 =num_labels
*num_vertex_types
+ 1)、可选的用于查询原始边 ID 的 renumber_map(大小 = 唯一(边类型、边 ID)对的数量,仅在edgelist_edge_ids.has_value()
为 true 时有效),以及可选的(标签、边类型)偏移值到边 ID renumber map(大小 =num_labels
+num_edge_types
+ 1,仅在edgelist_edge_ids.has_value()
为 true 时有效)。我们不明确返回边源顶点和目标顶点类型,因为我们假定对于给定的边类型,源顶点和目标顶点类型是隐式确定的。
- template<typename vertex_t, typename weight_t, typename edge_id_t, typename edge_type_t>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, std::optional<rmm::device_uvector<edge_id_t>>, std::optional<rmm::device_uvector<edge_type_t>>, std::optional<rmm::device_uvector<size_t>>> sort_sampled_edgelist(raft::handle_t const &handle, rmm::device_uvector<vertex_t> &&edgelist_srcs, rmm::device_uvector<vertex_t> &&edgelist_dsts, std::optional<rmm::device_uvector<weight_t>> &&edgelist_weights, std::optional<rmm::device_uvector<edge_id_t>> &&edgelist_edge_ids, std::optional<rmm::device_uvector<edge_type_t>> &&edgelist_edge_types, std::optional<rmm::device_uvector<int32_t>> &&edgelist_hops, std::optional<raft::device_span<size_t const>> edgelist_label_offsets, size_t num_labels, size_t num_hops, bool src_is_major = true, bool do_expensive_check = false)#对采样的边列表进行排序。
采样的边按照以下规则排序。
如果
src_is_major
为 true,则使用 ((hop), src, dst) 作为排序键。如果src_is_major
为 false,则使用 ((hop), dst, src)。仅当edgelist_hops.has_value()
为 true 时才使用 hop。如果
edgelist_label_offsets.has_value()
为 true,则每个标签中的边独立排序。此函数仅支持单 GPU(我们尚不清楚任何实际的多 GPU 用例)。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型
edge_id_t – 边 ID 的类型。需要是整数类型
edge_type_t – 边类型的类型。需要是整数类型,当前仅支持 int32_t。
- 参数:
handle – 用于封装运行图算法所需的资源(例如 CUDA 流、通信器和各种 CUDA 库的句柄)的 RAFT 句柄对象。
edgelist_srcs – 存储边列表源顶点的向量。
edgelist_dsts – 存储边列表目标顶点的向量(大小 =
edgelist_srcs.size()
)。edgelist_weights – 存储边列表权重的可选向量(如果有效,大小 =
edgelist_srcs.size()
)。edgelist_edge_ids – 存储边列表边 ID 的可选向量(如果有效,大小 =
edgelist_srcs.size()
)。edgelist_edge_types – 存储边列表边类型的可选向量(如果有效,大小 =
edgelist_srcs.size()
)。edgelist_hops – 一个可选的向量,存储边列表的跳数(如果有效,大小等于
edgelist_srcs.size()
)。如果num_hops
>= 2,则edgelist_hops
必须有效。edgelist_label_offsets – 一个可选的指针,指向存储输入边标签偏移量的数组(大小等于
num_labels
+ 1)。如果num_labels
>= 2,则edgelist_label_offsets
必须有效。num_labels – 标签数量。如果
num_labels
>=2 则考虑标签,如果num_labels
= 1 则忽略标签。num_hops – 跳数。如果
num_hops
>=2 则考虑跳数,如果num_hops
= 1 则忽略跳数。src_is_major – 一个标志,用于确定在重新编号和排序时使用源顶点还是目标顶点作为主键。
do_expensive_check – 一个标志,用于对输入参数运行昂贵的检查(如果设置为
true
)。- 返回值:
向量元组,存储边的源顶点、边的目标顶点、可选的边权重(仅在
edgelist_weights.has_value()
为 true 时有效)、可选的边 ID(仅在edgelist_edge_ids.has_value()
为 true 时有效)、可选的边类型(仅在edgelist_edge_types.has_value()
为 true 时有效),以及可选的(标签、跳数)偏移值到排序后的边(大小 =num_labels
*num_hops
+ 1,仅当edgelist_hops.has_value()
或edgelist_label_offsets.has_value()
为 true 时有效)。
- template<typename vertex_t, typename edge_t, typename edge_type_t, bool multi_gpu>
lookup_container_t<edge_t, edge_type_t, vertex_t> build_edge_id_and_type_to_src_dst_lookup_map(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, false, multi_gpu> const &graph_view, edge_property_view_t<edge_t, edge_t const*> edge_id_view, edge_property_view_t<edge_t, edge_type_t const*> edge_type_view)#构建用于通过边 ID 和类型查找源顶点和目标顶点映射。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
edge_type_t – 边类型的数据类型。需要是整数类型。
multi_gpu – 标志,指示模板实例化是针对单 GPU (false)
- 参数:
handle – 用于封装运行图算法所需的资源(例如 CUDA 流、通信器和各种 CUDA 库的句柄)的 RAFT 句柄对象。
graph_view – 图视图对象。
edge_id_view – 持有
graph_view
指向的图的边 ID 的视图对象edge_type_view – 持有
graph_view
指向的图的边类型的视图对象- 返回值:
类型为 cugraph::lookup_container_t 的对象,封装了边 ID 和类型到源顶点和目标顶点的查找映射。
- template<typename vertex_t, typename edge_t, typename edge_type_t, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>> lookup_endpoints_from_edge_ids_and_single_type(raft::handle_t const &handle, lookup_container_t<edge_t, edge_type_t, vertex_t> const &lookup_container, raft::device_span<edge_t const> edge_ids_to_lookup, edge_type_t edge_type_to_lookup)#使用边 ID 和单一边类型查找边的源顶点和目标顶点。使用此函数查找属于相同边类型的边的端点。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
edge_type_t – 边类型的数据类型。需要是整数类型。
multi_gpu – 标志,指示模板实例化是针对单 GPU (false)
- 参数:
handle – 用于封装运行图算法所需的资源(例如 CUDA 流、通信器和各种 CUDA 库的句柄)的 RAFT 句柄对象。
lookup_container – 类型为 cugraph::lookup_container_t 的对象,封装了边ID和类型到源节点和目标节点的查找映射。
edge_ids_to_lookup – 要查找的边ID的设备跨度(device span)
edge_type_to_lookup – 与
edge_ids_to_lookup
中的边ID对应的边类型- 返回值:
一个包含
edge_ids_to_lookup
中边ID及其边类型的边源节点和目标节点的设备向量的元组。如果在edge_ids_to_lookup
中找不到某个边ID,或者找不到边类型 @edge_type_to_lookup,则返回元组的设备向量中相应的条目将包含 cugraph::invalid_vertex_id<vertex_t>。
- template<typename vertex_t, typename edge_t, typename edge_type_t, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>> lookup_endpoints_from_edge_ids_and_types(raft::handle_t const &handle, lookup_container_t<edge_t, edge_type_t, vertex_t> const &lookup_container, raft::device_span<edge_t const> edge_ids_to_lookup, raft::device_span<edge_type_t const> edge_types_to_lookup)#使用边ID和边类型查找边的源节点和目标节点。使用此函数查找属于不同边类型的边的端点。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
edge_type_t – 边类型的数据类型。需要是整数类型。
multi_gpu – 标志,指示模板实例化是针对单 GPU (false)
- 参数:
handle – 用于封装运行图算法所需的资源(例如 CUDA 流、通信器和各种 CUDA 库的句柄)的 RAFT 句柄对象。
lookup_container – 类型为 cugraph::lookup_container_t 的对象,封装了边ID和类型到源节点和目标节点的查找映射。
edge_ids_to_lookup – 要查找的边ID的设备跨度(device span)
edge_types_to_lookup – 与
edge_ids_to_lookup
中边ID对应的边类型的设备跨度(device span)- 返回值:
一个包含
edge_ids_to_lookup
中边ID和edge_types_to_lookup
中边类型的边源节点和目标节点的设备向量的元组。如果在edge_ids_to_lookup
中找不到某个边ID,或者在edge_types_to_lookup
中找不到某个边类型,则返回元组的设备向量中相应的条目将包含 cugraph::invalid_vertex_id<vertex_t>。
- template<typename vertex_t, typename edge_t, typename weight_t, bool store_transposed, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>> negative_sampling(raft::handle_t const &handle, raft::random::RngState &rng_state, graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu> const &graph_view, std::optional<raft::device_span<weight_t const>> src_biases, std::optional<raft::device_span<weight_t const>> dst_biases, size_t num_samples, bool remove_duplicates, bool remove_existing_edges, bool exact_number_of_samples, bool do_expensive_check)#负采样(Negative Sampling)。
此函数为图生成负样本。
负采样是通过根据指定参数生成一个随机图,并可选地移除表示图中实际边的样本来完成的。
采样过程如下:通过对源节点空间进行偏置采样来创建源节点ID列表,通过对目标节点空间进行偏置采样来创建目标节点ID列表,并将其用作可能的边列表。然后,我们可以选择性地移除重复项和图中实际存在的边,以生成最终列表。如果需要,我们将重复该过程,直到获得适当大小的结果边列表。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
store_transposed – 标志,指示源 (如果为 false) 或目标 (如果为 true) 是否为主要索引
multi_gpu – 标志,指示模板实例化是针对单 GPU (false)
- 参数:
handle – 用于封装运行图算法所需的资源(例如 CUDA 流、通信器和各种 CUDA 库的句柄)的 RAFT 句柄对象。
graph_view – 用于生成 NBR 采样的图视图对象
rng_state – 随机数生成器状态
src_biases – 可选的用于随机选择源节点的偏置。如果为 std::nullopt,则将均匀选择节点。在多GPU环境中,偏置应根据节点分区进行分区。
dst_biases – 可选的用于随机选择目标节点的偏置。如果为 std::nullopt,则将均匀选择节点。在多GPU环境中,偏置应根据节点分区进行分区。
num_samples – 要生成的负样本数量。在单GPU模式下,这表示要生成的总样本数。在多GPU模式下,每个GPU将提供该GPU所需的样本数量。多GPU模式下的总样本数将是这些值的聚合,结果样本将随机分布在各rank上。
remove_duplicates – 如果为 true,则移除重复样本
remove_existing_edges – 如果为 true,则移除图中实际存在的边样本
exact_number_of_samples – 如果为 true,则重复生成直到获得精确数量的负样本
do_expensive_check – 一个标志,用于对输入参数运行昂贵的检查(如果设置为
true
)。- 返回值:
包含负样本的源节点ID和目标节点ID的元组。