在系列的第一部分中,介绍了IVF-PQ算法的概述,解释了其基于IVF-Flat算法的基础,并使用产品量化(PQ)来压缩索引和支持更大的数据集。在第二部分中,重点转向IVF-PQ性能调优的实际方面,这对于获得最佳结果尤为重要,尤其是在处理数十亿规模的数据集时。
索引构建的调优参数
IVF-PQ与IVF-Flat共享一些参数,例如粗级索引和搜索超参数。然而,IVF-PQ引入了控制压缩的额外参数。一个关键参数是n_lists
,它决定了输入数据集被聚类成的分区(倒排表)的数量。性能受到探测倒排表数量及其大小的影响。实验表明,对于不同的召回率水平,n_lists
在10K到50K之间表现出良好的性能,尽管这取决于数据集。
另一个关键参数是pq_dim
,它控制压缩。以数据集中特征数的四分之一开始,并逐步增加是调优该参数的一个好方法。原博文中的图2展示了QPS显著下降,这可能归因于如计算工作增加和每个CUDA块的共享内存需求等因素。
pq_bits
参数,范围从4到8,控制每个单个PQ编码中使用的比特数,影响码本大小和召回率。减少pq_bits
可以通过将查询表(LUT)适配到共享内存中来提高搜索速度,尽管这会以召回率为代价。
其他参数
codebook_kind
参数决定了二级量化器的码本如何构建,是为每个子空间还是为每个簇构建。这些选项的选择可能会影响训练时间、GPU共享内存使用和召回率。参数如kmeans_n_iters
和kmeans_trainset_fraction
也很重要,尽管它们很少需要调整。
搜索的调优参数
n_probes
参数在之前关于IVF-Flat的博文中讨论过,它对搜索准确性和吞吐量至关重要。IVF-PQ提供了额外的参数,如internal_distance_dtype
和lut_dtype
,它们分别控制搜索过程中距离或相似度的表示以及用于存储LUT的数据类型。调整这些参数可以显著影响性能,尤其是对于大维度的数据集。
通过精炼提高召回率
当调优参数不足以达到所需召回率时,精炼是一种有前景的替代方案。这个单独的操作在ANN搜索后执行,重新计算选定候选者的精确距离并重新排序。精炼操作可以显著提高召回率,如原博文中的图4所示,尽管它需要访问源数据集。
总结
加速向量搜索的倒排文件索引系列覆盖了两个cuVS算法:IVF-Flat和IVF-PQ。IVF-PQ通过PQ压缩扩展了IVF-Flat,使搜索更快,并能够在有限的GPU内存下处理十亿规模的数据集。通过精细调优索引构建和搜索的参数,数据从业者可以高效地获得最佳结果。RAPIDS cuVS库提供了一系列向量搜索算法,以满足各种用例,从精确搜索到低精度高吞吐量的ANN方法。
要实用调优IVF-PQ参数,请参考GitHub上的IVF-PQ教程笔记本。有关提供的API的更多细节,请参见cuVS文档。
Image source: Shutterstock