FAISS(Facebook AI Similarity Search)是 Meta AI 研究院于 2017 年开源的近似最近邻搜索库,核心解决「在海量高维向量中快速找到最相似 Top-K 个」的问题。它面向 L2 欧氏距离与内积两种度量,提供从精确暴力扫描(Flat)到倒排索引(IVF)、乘积量化(PQ)、图索引(HNSW)的完整索引谱系,并将查询复杂度从线性降到亚线性,单机内存即可承载十亿级向量的检索。FAISS 同时提供 CPU 与 GPU 双后端,支持单卡、多卡批量检索,是当前 RAG(检索增强生成)、语义搜索、推荐召回等领域使用最广的底层相似搜索库之一。 FAISS 定位是嵌入式索引库而非完整数据库,它不负责数据持久化、分布式调度与鉴权,这些需要使用者自行组装。正因如此,它足够轻、足够快,常被嵌入到 Milvus 等向量数据库内核,也被 LangChain、LlamaIndex 等 RAG 框架作为默认向量存储后端。本篇按「安装 → 上手 → 索引选型 → 生产部署」的顺序展开,覆盖官方文档与社区实践中的关键操作与坑点,读者按步骤执行即可跑通完整链路。

岗位关联

掌握 FAISS 是 AI 工程师构建 RAG、语义检索与推荐召回系统的必备技能——几乎所有向量数据库和主流 LLM 框架的相似检索层都直接或间接建立在其索引算法之上。

目录
  1. 为什么需要 FAISS:暴力扫描撑不住海量向量
  2. 安装与环境配置:3 步就绪
  3. 快速上手:5 分钟跑通首次检索
  4. 核心能力详解:4 大支柱
  5. 生产部署与监控:从上线到运维
  6. 版本迭代
  7. AI 应用场景
  8. 常见误区
  9. 面试题
  10. 参考来源
工具类型
向量相似搜索库(ANNS 近似最近邻,开源)
开发商
Meta AI(原 Facebook AI Research)
开源协议
MIT(可商用)
GitHub Stars
无
主要语言
C++(核心)/ Python(绑定)
当前版本
1.12.x(2025-06 发布)
安装方式
pip install faiss-cpu / faiss-gpu,或 conda-forge
下载地址
官方文档
上手难度
★★★☆☆(中等,需理解索引原理)
适合人群
RAG 工程师 · NLP 算法工程师 · 推荐系统工程师
同类工具
Milvus · Annoy · hnswlib
托管服务
无

速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。

为什么需要 FAISS:暴力扫描撑不住海量向量

向量检索的朴素做法是线性扫描:把查询向量与库中每一个向量计算距离,取最小的 K 个。这在万级数据量下勉强可用,但一旦进入百万、千万甚至十亿级,计算量随数据规模线性增长,单次查询耗时从毫秒恶化到秒级,内存与 CPU 双双告急。推荐召回、RAG 检索这类对延迟极度敏感的场景,无法接受这种复杂度。

FAISS 的核心价值是把「精确但昂贵」的全量比对替换为「近似但足够好」的逼近最近邻搜索(Approximate Nearest Neighbor Search, ANNS)。它通过三类手段压缩搜索空间:倒排索引(只搜最可能命中的若干分桶)、量化压缩(用码本下标代替原始浮点向量)、图索引(沿邻近图走查)。三者可组合出数十种索引结构,让使用者在召回率、查询延迟、内存占用三个维度上按需调配。官方在 SIFT1M 等基准上披露的对比显示,IVF 系列索引在保持 0.9 以上召回率时,查询吞吐可较暴力扫描提升一个数量级以上。

与同类库相比,FAISS 的气质是「算法全、后端全」:索引类型覆盖精确检索到高压缩检索的全谱系,同时提供 CPU/GPU 双实现,多卡可通过分片扩展。代价是学习曲线更陡——它要求使用者理解训练(train)、添加(add)、搜索(search)三阶段的数据流,而不是开箱即用。适合愿意为检索性能投入工程精力的团队。

安装与环境配置:3 步就绪

安装的第一步是分清 pip 包名。PyPI 上的官方包为 faiss-cpu 与 faiss-gpu,其中 faiss-gpu 仅在 Linux 平台提供预编译 wheel,且要求本地已装匹配版本的 CUDA 驱动。macOS 与 Windows 用户只能使用 faiss-cpu。

第二步是核对版本兼容性:Python 3.9–3.12 均可安装 1.7.4 及以上版本;若使用 Python 3.13+,需要对应 FAISS 1.12.x。GPU 版本还需注意 CUDA 版本与显卡架构匹配,conda 渠道(conda-forge)通常会自动解析 CPU/CUDA 依赖,比 pip 更省心。

第三步验证安装:导入 faiss 并打印版本号,同时构造随机向量跑一次 search,确认索引构建与检索链路正常。若在导入时出现 libfaiss.so 缺失报错,通常是 CUDA 运行时库未加入系统路径。

bash11 行
# 安装 CPU 版(通用)pip install faiss-cpu # 安装 GPU 版(Linux,需预先装好匹配的 CUDA)pip install faiss-gpu # 或使用 conda 自动解析依赖(推荐)conda install -c conda-forge faiss-cpu # 验证python -c "import faiss; print(faiss.__version__)"

快速上手:5 分钟跑通首次检索

最小可用流程只需三步:构造索引、添加向量、搜索 Top-K。先确定两个前提:向量维度 d 在所有索引与查询中必须一致;FAISS 要求输入为 float32 类型的 NumPy 二维数组,否则会静默转换或报类型错误。

以 1 万条随机向量为示例:先用 IndexFlatL2(d) 建立精确索引——它不做任何近似,实际上是全量数组存储加暴力扫描,可用作正确性基准。add 写入向量后,search 返回两件事:距离矩阵 D(形状为 nq×k)与索引矩阵 I(对应向量的内部序号)。随后将示例升级为 IVF:IndexIVFFlat 需要一个粗量化器(通常是 IndexFlatL2)、桶数量 nlist 和度量方式,且必须先用部分数据 train 生成桶中心,再 add。查询时通过 .nprobe 控制扫描桶数,兼顾召回与速度。核心代码不超过 30 行,完整可运行:

进阶技巧:真实项目中 xb 通常是 embedding 模型的输出,维度从 384 到 1536 不等。建议先建立 Flat 索引做小规模正确性验证,再切换到 IVF/HNSW 压测延迟,最后用 PQ 压缩控制内存。

python22 行
import faissimport numpy as np d = 128                      # 向量维度xb = np.random.random((10000, d)).astype('float32')   # 入库向量xq = np.random.random((10, d)).astype('float32')      # 查询向量 # 1) Flat:精确检索,无需训练index = faiss.IndexFlatL2(d)index.add(xb)D, I = index.search(xq, k=5)     # D: 距离,I: 内部ID # 2) IVF:训练 + 添加 + 搜索nlist = 100                    # 桶数量,经验值 ≈ 4*sqrt(N)quantizer = faiss.IndexFlatL2(d)index_ivf = faiss.IndexIVFFlat(quantizer, d, nlist, faiss.METRIC_L2)index_ivf.train(xb)            # 用 k-means 生成桶中心index_ivf.add(xb)index_ivf.nprobe = 10          # 查询扫描 10 个桶D2, I2 = index_ivf.search(xq, k=5) print(I2)                      # 每行是查询的 Top-5 结果内部ID

核心能力详解:4 大支柱

支柱一·索引谱系:从精确到高压缩全覆盖。 FAISS 的核心是分层设计的索引体系。IndexFlatL2 / IndexFlatIP 做精确搜索;IndexIVFFlat 加倒排分桶把搜索范围缩小到 top-nprobe 个桶;IndexIVFPQ 在倒排基础上叠加乘积量化,把每向量内存从 4×d 字节压缩到几十字节,支撑十亿级;IndexHNSWFlat 则用分层小世界图,以内存换极低延迟。不同索引可组合(如 OPQ 预处理 + IVF + PQ),官方文档的「Index」页提供完整选择树。

支柱二·三阶段数据流:train / add / search。 含量化器或聚类器的索引必须先用代表性数据训练(train),生成桶中心或码本;随后 add 阶段把向量映射到已训练的结构中;search 阶段复用结构检索。Flat 与 HNSW 无需训练。训练数据应覆盖真实分布,且数量通常要求数倍于聚类中心数,否则分桶不均导致召回骤降。

支柱三·GPU 加速与多卡扩展。 FAISS GPU 索引并非独立算法实现,而是把 CPU 索引迁移到 GPU 显存执行。index_cpu_to_gpu 按单卡迁移;index_cpu_to_gpu_multiple_py 配合 StandardGpuResources 可在多卡间按取模/分块切分数据。GPU 批量检索吞吐可提升一到两个数量级,但在单查询延迟上未必优于 CPU,小批请求需实测评估。

支柱四·内存与持久化控制。 索引对象常驻内存,write_index / read_index 提供二进制落盘与加载。配合 IndexIDMap 可把自有的字符串/数值 ID 映射到 FAISS 内部连续序号,避免删除与合并场景下的 ID 冲突。内存极度受限时,IVFPQ 与 IVFSQ(标量量化)可在损失少量召回的前提下把内存压到原始数据的几十分之一。

生产部署与监控:从上线到运维

单机服务化。 推荐用 FastAPI/Flask 封装索引为常驻服务。索引对象在进程启动时一次性加载,请求处理函数只做 search。由于 add 非线程安全,写入需加锁或采用「单写线程 + 定期重建索引」的模式;search 本身在多数索引上可并发执行。典型内存估算:原始 float32 向量占 4×d 字节/条,IVFPQ(M=64)可将单条压至约 64 字节。

持久化与更新。 生产环境需实现「落盘 - 加载 - 热更新」闭环:定期用新增数据重建索引并 write_index 写盘,加载时先读到临时索引对象,验证成功后原子替换内存中的服务索引;粗暴地边 add 边服务会带来不可控的内存增长和查询抖动。超大索引可考虑 IndexIVFPQ 的 mmap 外存模式,磁盘映射加载,显著降低内存占用。

可观测性。 上线前必须做离线评估:抽样查询集上对比近似索引与 Flat 基准的召回率(recall@k),并测量 P50/P99 延迟与吞吐 QPS。运行时监控内存占用(索引体积是常驻内存的关键指标)、查询延迟分布和 GPU 显存水位。召回率若低于业务阈值,优先调大 nprobe 或 efSearch 参数,而非更换索引类型。

<p class="para-label">避坑清单:</p>

<ul class="dash-list"><li>坑 1:pip 安装包名混淆——PyPI 上 faiss 包不是官方维护,必须用 faiss-cpu/faiss-gpu;GPU 版在非 Linux 平台无预编译 wheel,Windows/macOS 只能 CPU。</li><li>坑 2:训练数据不足导致分桶不均——train() 的样本量应远大于 nlist 聚类数(建议 10 倍以上),否则大量桶为空,查询召回显著下降。</li><li>坑 3:在服务中反复创建索引对象——add/search 高频场景务必复用单例索引,并在写入时加锁;不要在多线程里直接 add,FAISS 不保证写线程安全。</li></ul>

维度FAISSMilvusAnnoyhnswlib
定位Meta 开源的近似最近邻搜索库云原生分布式向量数据库Spotify 开源的随机投影森林库纯 HNSW 图索引的高性能库
部署形态嵌入式库,随应用进程运行独立服务,Standalone/Cluster 部署嵌入式库,索引文件只读加载嵌入式库,进程内运行
索引类型Flat/IVF/PQ/HNSW/OPQ 全谱系内置 FAISS/Knowhere 等,支持标量过滤仅随机投影森林仅 HNSW(图式索引)
规模支持单机内存十亿级(压缩索引)分布式百亿级以上千万级内存数百万级内存
语言支持C++ / Python多语言 SDK(Java/Go/Python 等)C++ / Python / GoC++ / Python
GPU 支持支持单卡/多卡批量检索部分版本支持 GPU 索引无无
LicenseMITApache-2.0Apache-2.0Apache-2.0
适合谁算法工程师自建检索层,RAG 团队需完整数据管理的平台团队小规模静态数据快速原型低延迟高召回、频繁增删的轻量场景

选型建议:索引类型要灵活、需要 GPU 加速、愿意自管持久化,选 FAISS;需要完整数据生命周期(增删改查、鉴权、水平扩展),直接上 Milvus;数据量千万以内且要最小依赖,Annoy 足够;只追求极低延迟、能接受单一索引类型,hnswlib 更轻更快。

版本迭代

FAISS 自 2017 年开源以来,主版本演进围绕「索引算法扩充、GPU 支持增强、构建与打包现代化」三条线推进。2024 年起的 1.8–1.10 系列重点修复量化器训练与索引序列化问题,1.12.0 则完成构建系统 CMake 化并支持 Python 3.13+。(截至训练数据,可能已有更新版本)

版本时间变化提升
v1.7.42023-05维护稳定版多项 bug 修复,完善 Python 3.11 支持
v1.8.02024-02量化与接口重构修复 OPQ 训练逻辑,清理废弃 API,改进类型标注
v1.9.02024-08索引与序列化优化改进部分索引的训练性能与序列化格式
v1.10.02024-11GPU 能力增强GPU 索引入显存按需加载,兼容新版 CUDA
v1.12.02025-06构建与打包现代化构建系统迁移至 CMake,支持 Python 3.13–3.18,精简依赖
结论

近三个大版本的重心从算法层(OPQ 修复)向工程层(GPU 加载、CMake 构建)转移,说明 FAISS 索引算法已趋成熟,当前选型重点应放在部署方式与依赖管理而非算法对比上。

AI 应用场景

RAG 知识库向量召回

阶段:RAG 管道构建(Embedding → 索引 → 检索)

解决的问题:大模型幻觉的常见缓解手段是检索增强,但知识库动辄百万条切块,暴力扫描会让问答延迟到不可用。FAISS 将切块 embedding 建索引,查询时毫秒级返回 Top-K 相关片段,作为上下文注入 LLM。传统精确匹配无法处理语义改写,向量检索弥补了这一空白。

具体案例:某客服知识库 300 万条 FAQ 切块,选用 IVFPQ(M=64)后索引内存约 1.8GB,单查询 P99 延迟从暴力扫描的数秒级降至 15ms 以内,召回率设定在 0.92(与 Flat 基准对比),可信度评估通过后上线。

大规模相似内容去重与聚类

阶段:文档智能(文本向量化 → 检索查重)

解决的问题:内容平台需要识别洗稿、重复文与近似图片,精确哈希无法处理「改写但语义相同」。FAISS 内积索引配合归一化向量,可在千万级内容中为每篇新稿找出相似度 Top-K,超过阈值即判重。

具体案例:某资讯平台对 2000 万篇历史文章做向量化后建立 HNSW32 索引,日新增 50 万篇的查重任务完成时间从全量比对的 6 小时压缩到 40 分钟,且支持实时增量加入索引。

推荐系统近实时召回

阶段:Agent 编排(Embedding 候选池 → 相似检索 → 精排)

解决的问题:双塔/多兴趣模型中,用户向量需要从数千万物品向量中快速圈定候选集。FAISS 的多卡 GPU 批量检索能力在一次请求中同时计算多路用户兴趣向量,将候选召回从全量算分的百毫秒级压到十毫秒级。

具体案例:某短视频推荐场景用 4 卡 A100 部署 IVF4096,PQ 索引,1 亿个视频向量常驻显存,单请求 128 路兴趣向量的召回耗时约 8ms,为精排阶段留出充足预算。

常见误区

误区我在很多教程里看到 `pip install faiss`,以为这就是官方推荐的安装命令,装完才发现导入时各种报错。

正解PyPI 上的 faiss 包名不受 Meta 官方维护,官方发布的包是 faiss-cpu(CPU 版)和 faiss-gpu(GPU 版,仅 Linux 且有 CUDA 依赖)。用错包名可能出现版本陈旧、API 缺失、与官方文档不一致的问题。conda 用户应使用 conda install -c conda-forge faiss-cpu。

为何常见:早期教程流传广,许多博客沿用了简化的 faiss 写法;且搜索引擎结果中该包名排位靠前,误导性很强。

误区我把 FAISS 当成向量数据库在用,以为向量存进去它就帮我管好持久化、副本和并发,出了问题才发现数据全在内存里,进程一挂全没。

正解FAISS 是嵌入式索引库,只负责「向量索引 + 搜索」这一层。它不做持久化、事务、多副本、鉴权与分布式调度,这些都需要自行封装:用 write_index/read_index 管理落盘,用外部数据库保存向量与元数据,用服务框架控制并发。需要开箱即用的完整向量数据库应选 Milvus 等产品。

为何常见:RAG 框架常把 FAISS 作为默认「向量存储」暴露给用户,名字里的存储(storage)让人误以为它具备数据库能力,掩盖了索引库的边界。

误区既然是精确检索,召回率 100%,我干脆所有场景都用 IndexFlatL2,省得调参数。

正解Flat 索引的召回率 100% 是以「全库逐条比对」为代价的。数据量到百万级后,单查询耗时随库大小线性增长,内存占用更是高达 4×d 字节每条。合理做法是先用 Flat 做小规模基准验证,再按数据规模与延迟预算切换到 IVF(万级到千万级)或 HNSW(千万级以内低延迟),用可接受的召回损失换一个数量级的吞吐提升。

为何常见:文档中 Flat 永远是第一个示例,且精确结果便于验证正确性,容易让人误以为它适合生产环境,忽略了复杂度分析。

误区我看到包名里有 gpu 就以为装完索引自动跑在显卡上,结果搜了十万条向量延迟一点没降,一看 GPU 利用率是 0%。

正解安装 faiss-gpu 只是让 Python 绑定包含 GPU 实现,默认构造出的索引仍是 CPU 索引。必须显式调用 faiss.index_cpu_to_gpu(单卡)或 faiss.index_cpu_to_gpu_multiple_py(多卡)把索引迁移到显存,且迁移前要确认本地 CUDA 驱动与 FAISS 编译时的 CUDA 版本兼容。

为何常见:「GPU 版」这个命名暗示了自动加速,而 FAISS 的设计原则是把设备选择权交给使用者,两类索引通过转换函数桥接,文档示例里也常省略迁移细节。

误区官方教程里 IndexIVFFlat 那段总是先 train 再 add,我就以为每个索引都要这样,对着 IndexFlatL2 也先跑一遍 train,结果报错说没有这个方法。

正解train() 只存在于带聚类中心或码本的索引(IVF、PQ 等);IndexFlatL2、IndexHNSWFlat 这类索引不需要训练,可直接 add。IVF 也只需在初始阶段训练一次,之后可持续增量 add 新向量,无需反复训练。判断是否需要训练,看索引构造函数是否接收 quantizer 或与码本相关的参数。

为何常见:所有官方示例都按「训练索引」的统一流程演示,初学者把流程片段当成了全部索引的通用协议,没有留意 Flat/HNSW 构造函数的差异。

面试题

Q1. FAISS 主要由哪个机构开源并维护?

单选题 · easy

  • A.由谷歌开发
  • B.由 Meta 开发← 正确答案
  • C.由微软开发
  • D.由亚马逊开发

答案:B。FAISS 全称 Facebook AI Similarity Search,由 Meta(原 Facebook)的 AI Research 团队于 2017 年开源,目前仍由 Meta AI 维护,采用 MIT 协议。谷歌、微软、亚马逊均有各自的向量检索方案(如 ScaNN、SPTAG),但并非 FAISS 的出品方。

Q2. 用 pip 安装 FAISS 官方 CPU 版,正确的包名是?

单选题 · easy

  • A.pip install faiss
  • B.pip install faiss-cpu← 正确答案
  • C.pip install faiss-ann
  • D.pip install faiss-lite

答案:B。PyPI 上官方维护的包是 faiss-cpu(CPU)与 faiss-gpu(Linux GPU),faiss 包名并非官方发布渠道,可能出现版本陈旧或与文档不一致。conda 用户可用 conda install -c conda-forge faiss-cpu。

Q3. 使用 IndexFlatL2 等未显式指定度量时,FAISS 默认采用哪种距离?

单选题 · easy

  • A.内积度量
  • B.汉明度量
  • C.欧氏距离← 正确答案
  • D.曼哈顿距离

答案:C。FAISS 索引构造时默认使用 METRIC_L2,即欧氏距离平方和(值越小越相似)。需要向量间夹角语义时用内积 METRIC_INNER_PRODUCT;汉明度量仅用于二进制向量。曼哈顿距离(L1)不在 FAISS 的默认度量集合内。

Q4. IndexFlatL2 与 IndexIVFFlat 的主要区别是什么?

单选题 · mid

  • A.前者精确全量比对,后者聚类分区后只搜部分← 正确答案
  • B.前者支持流式写入,后者必须离线训练
  • C.前者只支持 64 维以下,后者无维度限制
  • D.前者依赖 GPU,后者只能在 CPU 运行

答案:A。Flat 索引做全库线性扫描,结果精确但耗时随库大小线性增长;IVFFlat 先用 k-means 把向量分到 nlist 个桶,查询时只进最近的 nprobe 个桶,用少量召回损失换吞吐。IVF 的 train 只需一次,之后可增量 add;两者 CPU/GPU 均可运行,FAISS 对向量维度无 64 维限制。

Q5. 构建 IndexIVFFlat 时调用 train() 的作用是什么?

单选题 · mid

  • A.用聚类算法生成索引所用的 Voronoi 分区中心← 正确答案
  • B.对向量做 PCA 降维以提升检索精度
  • C.随机采样小部分数据以确定索引参数
  • D.为每个入库向量计算唯一的整数 ID

答案:A。train() 对传入的向量执行 k-means 聚类,生成 nlist 个 Voronoi 中心点,add 阶段按「离哪个中心最近」把向量分配进对应桶。PCA 降维是 IndexPreTransform 的职责;train 使用传入的全部数据而非随机子集;向量 ID 由调用方通过 IndexIDMap 或 add_with_ids 指定。

Q6. 在 FAISS 中实现余弦相似度检索,最推荐的方案是?

单选题 · mid

  • A.使用内置的 METRIC_COSINE 度量
  • B.先对向量做 L2 归一化,再用内积检索← 正确答案
  • C.用 IndexFlatL2 配合大的缩放常数
  • D.先把向量量化成二进制再算汉明距离

答案:B。FAISS 不提供直接的 Cosine 度量常量,官方推荐的做法是先把向量做 L2 归一化,再使用 METRIC_INNER_PRODUCT(内积)检索——归一化后内积与余弦相似度等价。A 选项中常量在标准 FAISS API 中不存在;C 不改变相对排序却增加计算开销;D 的二进制量化会导致精度严重下降。

Q7. 关于 PQ(乘积量化)压缩索引的核心原理,正确的是?

单选题 · hard

  • A.把向量拆分为子段,各子段独立聚类以码本下标近似← 正确答案
  • B.对整个向量空间聚类,仅用簇中心下标表示向量
  • C.对向量做哈达玛变换后截断低位字节
  • D.通过随机投影把高维向量映射到二值空间

答案:A。PQ 将 d 维向量切成 m 个子空间,对每个子空间独立做 k-means(通常 k=256),用各子空间码本下标(各 1 字节)拼接表示原向量,实现几十倍的压缩。B 描述的是粗量化(如 IVF 的分桶思想);C 是 OPQ 的预处理环节但非核心;D 是哈希/二值化方法,不属于 PQ。

Q8. 关于 IVF 索引的 nprobe 参数,下列说法正确的是?

单选题 · hard

  • A.nprobe 越大召回越高,查询延迟也越高← 正确答案
  • B.nprobe 越大召回越高且查询延迟越低
  • C.nprobe 只影响内存占用,不影响查询速度
  • D.nprobe 须在训练时固定,搜索时不可修改

答案:A。nprobe 表示查询时扫描的 Voronoi 桶数量。取值越大,覆盖的候选向量越多,召回率越高,但距离计算量随之上升,延迟增加。nprobe 是查询参数而非训练参数,可在每次 search 前动态调整,不存在「训练时固定」的限制。

Q9. FAISS 相比暴力精确检索,优势体现在哪些方面?

多选题 · hard

  • A.内存占用可随压缩级别显著降低← 正确答案
  • B.查询时间复杂度由线性降为亚线性← 正确答案
  • C.索引文件可直接作为主数据库使用
  • D.支持单卡/多卡 GPU 批量检索加速← 正确答案

答案:ABD。A 对:PQ/SQ 等量化索引能大幅压缩单条向量的内存占用;B 对:IVF 的倒排分桶和 HNSW 的图跳转把搜索范围从全库缩小到局部;D 对:GPU 后端在批量 Top-K 检索上吞吐远高于 CPU。C 错:FAISS 仅是索引库,不管理数据持久化、事务与并发控制,不能替代数据库。

Q10. 关于 FAISS 的 GPU 使用方式,下列说法正确的有?

多选题 · mid

  • A.安装 faiss-gpu 后即自动启用 GPU 加速
  • B.需调用 index_cpu_to_gpu 显式迁移索引← 正确答案
  • C.GPU 索引与 CPU 索引接口不同,需重写业务代码
  • D.多 GPU 可用 index_cpu_to_gpu_multiple_py 分配← 正确答案

答案:BD。安装 faiss-gpu 只代表绑定中包含了 GPU 实现,构造索引时默认仍是 CPU 索引,必须通过 index_cpu_to_gpu(单卡)或 index_cpu_to_gpu_multiple_py(多卡分片)显式迁移,A 错、B 与 D 正确。GPU 索引与 CPU 索引共享同一套搜索接口,业务代码无需重写,C 错。

参考来源