已关闭
IndexFlatIP 在 search 时内积结果未做最大内积等价转换,返回排序方向与 CPU 相反 #17
崇理战队创建于 7月8日关闭于 7月9日
xiangjie10
7月8日 评论:
7月8日 评论:
👋 您好,感谢向 faiss 提交 Issue!
🎉 我们已收到您的反馈,感谢你对开源社区的支持!
📅 处理时效 维护团队将在工作日 24 小时内查看并回复您的问题。
🔍 自助排查(推荐优先查看) 在等待回复期间,您可以先查阅仓库README以及历史 Issue 中相似问题的解决方案,多数问题可快速解决。
💡 为了更快定位问题,请您确保 Issue 包含:
- 清晰的问题描述
- 可复现的操作步骤
- 相关日志、截图或环境信息
我们会尽快跟进,感谢您的理解与配合!


xiangjie10
7月8日 评论:
7月8日 评论:
/label add triaged


7月8日 添加了label:triaged
Qanly
7月9日 评论:
7月9日 评论:
您好,首先感谢您的关注,但是 faiss-npu 不是这样调用的,请参考相关文档。


7月9日 issue状态由 TODO 改变为 DONE
7月9日 关闭了 issue
7月9日 添加了label:resolved
在用 faiss_npu FlatIndex 做向量检索,测距方式 METRIC_INNER_PRODUCT。
在 CPU faiss 里,IP 搜索结果按内积从大到小排序(越大越相似)。但 NPU 侧的 FlatIndex search 返回的结果是按内积从小到大排序的。
对比验证:
import faiss import faiss_npu d = 128 xb = np.random.randn(1000, d).astype(np.float32) xq = np.random.randn(1, d).astype(np.float32) cpu_index = faiss.IndexFlatIP(d) cpu_index.add(xb) D_cpu, I_cpu = cpu_index.search(xq, 10) # D_cpu 递减 npu_index = faiss_npu.IndexFlatIP(d) npu_index.add(xb) D_npu, I_npu = npu_index.search(xq, 10) # D_npu 递增(?)看了 #16 说到 FlatIndex 在 reserve/add 阶段未区分 L2 和 IP,应该也是同一类问题——IP 的搜索结果排序和 L2 统一用了升序。
NPU 侧做 IP reduce 时,如果直接找最小值(相当于 L2 的逻辑),肯定是反的。建议 IP 模式下在 search 出口处翻转排序方向,或者用 max reduce 替代 min reduce。