注意
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>
-
template<typename vertex_t, typename edge_t, typename weight_t, typename alteration_t>
class MST_solver#