向量数据库FAISS之六:如何让FAISS更快

1.速度与精度指标参数

1.选择索引家族

2.选择索引参数

通过 faiss.index_factory() 调用实例化索引是很常见的。但这种实例化方式将索引参数设置为安全值,同时存在许多与速度相关的参数。许多 Faiss 组件可以利用:

  • 编码时使用的迭代算法;迭代次数越多,召回率就越高
    • HNSW: efConstruction
    • ResidualQuantizer: niter_codebook_refine
    • LocalSearchQuantizer: encode_ils_iters, icm_iters, train_iters, encode_ils_iters (for vector codecs)
  • 启发式方法限制训练或搜索过程中考虑的可能候选者的数量,例如 束搜索。评估的候选越多,召回率就越高。
    • IndexBinaryIVF: nprobe, max_codes
    • IndexIVF: nprobe, max_codes
    • ResidualQuantizer: max_beam_size
    • HNSW: efSearch
  • 其他可选版本,例如基于 LUT 的近似值;他们允许以速度换取准确性
    • IndexIVFPQ: do_polysemous_training, polysemous_ht, use_precomputed_table
    • IndexIVFPQFastScan: use_precomputed_table
    • IndexPQ: do_polysemous_training, polysemous_ht, search_type
    • ResidualQuantizer: use_beam_LUT, approx_topk_mode, train_type
    • LocalSearchQuantizer: update_codebooks_with_double
  • 针对特定情况优化的计算,例如大批量 IVF 搜索。
  • 用于处理块输入数据的各种内部缓冲区;见下文。
  • 随机数生成器;这些用于确保结果可以重现。

在大多数情况下,默认索引参数应该工作得相当好。但强烈建议研究可用参数,以便在您的特定速度与精度与 RAM 情况下找到最佳点。

秘诀:研究所选 index 及其 subindexes 的可用参数。

3.K-均值聚类

K-means 聚类是 Faiss 内部经常使用的工具。默认情况下,faiss/Clustering.h 中的 k-means 实现使用 25 次迭代(niter 参数)和每个集群所需的输入数据集中最多 256 个样本(max_points_per_centroid 参数)。样本是随机选择的。

例如,默认的 PQx12 训练比 PQx10 训练慢约 4 倍,比 PQx8 训练慢约 16 倍,因为输入数据集中使用的样本数量比例较高。

基于 IVF 的索引默认使用 10 次 k 均值迭代(faiss/IndexIVF.h、faiss/IndexBinaryIVF.h、faiss/gpu/GpuIndexIVF.cu)。

秘诀:使用 k 均值聚类 nitermax_points_per_centroid 参数。

4.查询批次

Faiss 针对批量样本的处理进行了优化,而不是逐个处理样本。

在内部,Faiss 以比调用者执行并行化更有效的方式对批处理元素进行并行化。

秘诀:如果合适的话,尝试分批处理样本

5.PQ训练的train_shared训练模式

考虑对 PQ 使用 Train_shared 训练模式,该模式用于为所有子量化器训练单个码本,而不是为每个子量化器训练单独的码本。

这显着减少了 10 位或 12 位 PQ 的训练时间,但代价是准确性。

相关推荐
海市公约2 小时前
MySQL更新语句执行全流程:从Buffer Pool修改到二阶段提交
数据库·mysql·binlog·innodb·undo log·二阶段提交·update执行原理
颂love2 小时前
MySQL的执行流程
android·数据库·mysql
程序leo源3 小时前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#
这个DBA有点耶3 小时前
COUNT进阶:超大表的近似计数与HyperLogLog
数据库·sql·程序人生·学习方法·dba·改行学it
武子康3 小时前
调查研究-138 全球机器人产业深度调研报告【01 篇】:市场规模、竞争格局与商业化成熟 2026
服务器·数据库·ai·chatgpt·机器人·具身智能
zhojiew3 小时前
在本地PostgreSQL使用pgvector构建生成式 AI 应用的实践
数据库·人工智能·postgresql
Yushan Bai4 小时前
EXADATA X5数据库一体机节点login: failure forking: Cannot allocate memory问题处理
数据库·oracle·vr
KaMeidebaby4 小时前
卡梅德生物技术快报|噬菌体肽库展示技术构建 Mhp168‑Hsp70 定向随机肽库:流程、质控与数据结果
前端·数据库·其他·百度·新浪微博
SelectDB4 小时前
Agent 时代,为什么传统的可观测方案不适用了?
大数据·数据库·数据分析
snowfoootball5 小时前
解决低版本navicat连接PostgreSQl的不兼容报错问题
数据库·postgresql