结构体 faiss::gpu::IVFPQBuildCagraConfig

struct IVFPQBuildCagraConfig

公共成员

uint32_t n_lists = 1024

倒排列表(簇)的数量

提示:每个簇的向量数(n_rows/n_lists)应约为 1,000 到 10,000。

uint32_t kmeans_n_iters = 20

搜索 K-means 中心(索引构建)的迭代次数。

double kmeans_trainset_fraction = 0.5

在迭代 K-means 构建期间使用的数据比例。

uint32_t pq_bits = 8

通过 PQ 压缩后向量元素的位长。

可能的值:[4, 5, 6, 7, 8]。

提示:“pq_bits”越小,索引大小越小,搜索性能越好,但召回率越低。

uint32_t pq_dim = 0

通过 PQ 压缩后向量的维度。 当为零时,使用启发式方法选择最佳值。

注意:pq_dim /// pq_bits 必须是 8 的倍数。

提示:较小的“pq_dim”会导致较小的索引大小和更好的搜索性能,但召回率较低。 如果“pq_bits”为 8,“pq_dim”可以设置为任何数字,但 8 的倍数是理想的,以获得良好的性能。 如果“pq_bits”不是 8,“pq_dim”应为 8 的倍数。 为了获得良好的性能,“pq_dim”最好是 32 的倍数。 理想情况下,“pq_dim”也应该是数据集维度的除数。

codebook_gen codebook_kind = codebook_gen::PER_SUBSPACE

如何创建 PQ 码本。

bool force_random_rotation = false

即使 dim % pq_dim == 0,也在输入数据和查询上应用随机旋转矩阵。

注意:如果 dim 不是 pq_dim 的倍数,则始终将随机旋转应用于输入数据和查询,以将工作空间从 dim 转换为 rot_dim,后者可能略大于原始空间,并且是 pq_dim 的倍数(rot_dim % pq_dim == 0)。 但是,当 dimpq_dim 的倍数时,此转换不是必需的(dim == rot_dim,因此无需添加“额外”数据列/特征)。

默认情况下,如果 dim == rot_dim,则旋转变换使用单位矩阵初始化。 当 force_random_rotation == true 时,无论 dimpq_dim 的值如何,都会生成随机正交变换矩阵。

bool conservative_memory_allocation = false

默认情况下,该算法为各个集群(list_data)分配比实际需要的更多空间。 这允许分摊内存分配的成本,并减少在重复调用 extend(扩展数据库)期间的数据复制次数。

另一种选择是保守的分配行为; 启用后,该算法始终分配存储给定数量记录所需的最小内存量。 如果希望尽可能少地使用 GPU 内存来存储数据库,请将此标志设置为 true