结构体 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
)。 但是,当dim
是pq_dim
的倍数时,此转换不是必需的(dim == rot_dim
,因此无需添加“额外”数据列/特征)。默认情况下,如果
dim == rot_dim
,则旋转变换使用单位矩阵初始化。 当force_random_rotation == true
时,无论dim
和pq_dim
的值如何,都会生成随机正交变换矩阵。
-
bool conservative_memory_allocation = false
默认情况下,该算法为各个集群(
list_data
)分配比实际需要的更多空间。 这允许分摊内存分配的成本,并减少在重复调用extend
(扩展数据库)期间的数据复制次数。另一种选择是保守的分配行为; 启用后,该算法始终分配存储给定数量记录所需的最小内存量。 如果希望尽可能少地使用 GPU 内存来存储数据库,请将此标志设置为
true
。
-
uint32_t n_lists = 1024