注意

RAFT 中的向量搜索和聚类算法正在迁移到一个专门用于向量搜索的新库,该库名为 cuVS。在迁移期间,我们将继续支持 RAFT 中的向量搜索算法,但在 RAPIDS 24.06(六月)版本之后将不再更新它们。我们计划在 RAPIDS 24.10(十月)版本之前完成迁移,并在 24.12(十二月)版本中将它们从 RAFT 中完全移除。

稀疏求解器#

template<typename IndexTypeT, typename ValueTypeT>
int raft::sparse::solver::lanczos_compute_smallest_eigenvectors(raft::resources const &handle, lanczos_solver_config<ValueTypeT> const &config, raft::device_csr_matrix_view<ValueTypeT, IndexTypeT, IndexTypeT, IndexTypeT> A, std::optional<raft::device_vector_view<ValueTypeT, uint32_t, raft::row_major>> v0, raft::device_vector_view<ValueTypeT, uint32_t, raft::col_major> eigenvalues, raft::device_matrix_view<ValueTypeT, uint32_t, raft::col_major> eigenvectors)#

使用 Lanczos 求解器找到最小的特征对。

待办事项

添加最大特征值计算(issue #2483)

模板参数:
  • index_type_t – 用于索引的数据类型。

  • value_type_t – 用于权重、距离的数据类型。

参数:
  • handle – raft 句柄。

  • config – 用于设置超参数的 Lanczos 配置

  • A – CSR 格式的稀疏矩阵。

  • v0 – 可选的初始 Lanczos 向量

  • eigenvalues – 输出特征值

  • eigenvectors – 输出特征向量

返回值:

成功时返回零。否则返回非零值。

template<typename IndexTypeT, typename ValueTypeT>
int raft::sparse::solver::lanczos_compute_smallest_eigenvectors(raft::resources const &handle, lanczos_solver_config<ValueTypeT> const &config, raft::device_vector_view<IndexTypeT, uint32_t, raft::row_major> rows, raft::device_vector_view<IndexTypeT, uint32_t, raft::row_major> cols, raft::device_vector_view<ValueTypeT, uint32_t, raft::row_major> vals, std::optional<raft::device_vector_view<ValueTypeT, uint32_t, raft::row_major>> v0, raft::device_vector_view<ValueTypeT, uint32_t, raft::col_major> eigenvalues, raft::device_matrix_view<ValueTypeT, uint32_t, raft::col_major> eigenvectors)#

使用 Lanczos 求解器找到最小的特征对。

待办事项

添加最大特征值计算(issue #2483)

模板参数:
  • index_type_t – 用于索引的数据类型。

  • value_type_t – 用于权重、距离的数据类型。

参数:
  • handle – raft 句柄。

  • config – 用于设置超参数的 Lanczos 配置

  • rows – 稀疏矩阵行向量视图。

  • cols – 稀疏矩阵列向量视图。

  • vals – 稀疏矩阵值向量视图。

  • v0 – 可选的初始 Lanczos 向量

  • eigenvalues – 输出特征值

  • eigenvectors – 输出特征向量

返回值:

成功时返回零。否则返回非零值。

template<typename index_type_t, typename value_type_t, typename nnz_type_t> int raft::sparse::solver::computeSmallestEigenvectors (raft::resources const &handle, raft::spectral::matrix::sparse_matrix_t< index_type_t, value_type_t, nnz_type_t > const &A, index_type_t nEigVecs, index_type_t maxIter, index_type_t restartIter, value_type_t tol, bool reorthogonalize, index_type_t &iter, value_type_t *__restrict__ eigVals_dev, value_type_t *__restrict__ eigVecs_dev, unsigned long long seed=1234567)

计算对称矩阵的最小特征向量。计算最小正特征值和特征向量。如果矩阵是正定或半正定的,计算出的特征值在幅度上是最小的。最大特征值通过执行几次 Lanczos 迭代进行估计。然后将隐式重启 Lanczos 方法应用于 A+s*I,其中 s 是最大特征值的负值。

模板参数:
  • index_type_t – 用于索引的数据类型。

  • value_type_t – 用于权重、距离的数据类型。

参数:
  • handle – raft 句柄。

  • A – 矩阵。

  • nEigVecs – 要计算的特征向量数量。

  • maxIter – Lanczos 迭代的最大次数。不包括用于估计最大特征值的 Lanczos 步骤。

  • restartIter – 执行隐式重启前 Lanczos 系统的最大大小。应至少为 4。

  • tol – 收敛容差。当残差范数小于 tol*theta 时,Lanczos 迭代将终止,其中 theta 是最小不需要特征值(即第 (nEigVecs+1) 个最小特征值)的估计值。

  • reorthogonalize – 是否对 Lanczos 向量进行重新正交化。

  • iter – 退出时,指向执行的总 Lanczos 迭代次数的指针。不包括用于估计最大特征值的 Lanczos 步骤。

  • eigVals_dev – (输出,设备内存,nEigVecs 条目) 矩阵的最小特征值。

  • eigVecs_dev – (输出,设备内存,n*nEigVecs 条目) 对应于矩阵最小特征值的特征向量。向量作为列存储在一个维度为 n x nEigVecs 的列主序矩阵中。

  • seed – 随机种子。

返回值:

错误标志。

template<typename index_type_t, typename value_type_t, typename nnz_type_t> int raft::sparse::solver::computeLargestEigenvectors (raft::resources const &handle, raft::spectral::matrix::sparse_matrix_t< index_type_t, value_type_t, nnz_type_t > const &A, index_type_t nEigVecs, index_type_t maxIter, index_type_t restartIter, value_type_t tol, bool reorthogonalize, index_type_t &iter, value_type_t *__restrict__ eigVals_dev, value_type_t *__restrict__ eigVecs_dev, unsigned long long seed=123456)

计算对称矩阵的最大特征向量。计算最小正特征值和特征向量。如果矩阵是正定或半正定的,计算出的特征值在幅度上是最大的。最大特征值通过执行几次 Lanczos 迭代进行估计。然后将隐式重启 Lanczos 方法应用于 A+s*I,其中 s 是最大特征值的负值。

模板参数:
  • index_type_t – 用于索引的数据类型。

  • value_type_t – 用于权重、距离的数据类型。

参数:
  • handle – raft 句柄。

  • A – 矩阵。

  • nEigVecs – 要计算的特征向量数量。

  • maxIter – Lanczos 迭代的最大次数。不包括用于估计最大特征值的 Lanczos 步骤。

  • restartIter – 执行隐式重启前 Lanczos 系统的最大大小。应至少为 4。

  • tol – 收敛容差。当残差范数小于 tol*theta 时,Lanczos 迭代将终止,其中 theta 是最大不需要特征值(即第 (nEigVecs+1) 个最大特征值)的估计值。

  • reorthogonalize – 是否对 Lanczos 向量进行重新正交化。

  • iter – 退出时,指向执行的总 Lanczos 迭代次数的指针。不包括用于估计最大特征值的 Lanczos 步骤。

  • eigVals_dev – (输出,设备内存,nEigVecs 条目) 矩阵的最大特征值。

  • eigVecs_dev – (输出,设备内存,n*nEigVecs 条目) 对应于矩阵最大特征值的特征向量。向量作为列存储在一个维度为 n x nEigVecs 的列主序矩阵中。

  • seed – 随机种子。

返回值:

错误标志。

template<typename vertex_t, typename edge_t, typename weight_t, typename alteration_t = weight_t>
Graph_COO<vertex_t, edge_t, weight_t> raft::sparse::solver::mst(raft::resources const &handle, edge_t const *offsets, vertex_t const *indices, weight_t const *weights, vertex_t const v, edge_t const e, vertex_t *color, cudaStream_t stream, bool symmetrize_output = true, bool initialize_colors = true, int iterations = 0)

根据给定图的连通分量,计算最小生成树 (MST) 或最小生成森林 (MSF)。

模板参数:
  • vertex_t – 用于顶点索引精度的整型类型

  • edge_t – 用于边索引精度的整型类型

  • weight_t – 权重数组的类型

  • alteration_t – 用于随机修改的类型

参数:
  • handle

  • offsets – 行偏移量的 CSR inptr 数组 (大小 v+1)

  • indices – 列索引的 CSR 数组 (大小 e)

  • weights – 权重的 CSR 数组 (大小 e)

  • v – 图中的顶点数量

  • e – 图中的边数量

  • color – 存储 MSF 结果颜色的数组

  • stream – 用于排序操作的 cuda stream

  • symmetrize_output – 结果输出边列表是否应对称化?

  • initialize_colors – 颜色数组是否应在 MST 内部初始化?

  • iterations – 执行的最大迭代次数

返回值:

包含 MST 的边列表(或遇到 MSF 时保证在 MST 中的边的子集)

template<typename vertex_t, typename edge_t, typename weight_t>
struct Graph_COO#
template<typename ValueTypeT>
struct lanczos_solver_config#
#include <lanczos_types.hpp>

公共成员

int n_components#

要计算的特征值和特征向量的数量。必须满足 1 <= k < n。

int max_iterations#

最大迭代次数。

int ncv#

生成的 Lanczos 向量数量。必须满足 k + 1 < ncv < n。

ValueTypeT tolerance#

残差容差 ||Ax - wx||

uint64_t seed#

随机种子

template<typename vertex_t, typename edge_t, typename weight_t, typename alteration_t>
class MST_solver#