Faiss学习

Faiss

  Faiss是一个高效的相似搜索和密集向量聚类库。它包含了搜索任意大小的向量集合的算法,其中包括那些可能不适合RAM的向量。它还包含用于评估和参数调优的支持代码。Faiss是用c++编写的,带有针对Python/numpy的完整包装器。一些最有用的算法是在GPU上实现的。它是由Facebook人工智能研究公司开发的。

Introduction

  Faiss包含了几种相似搜索方法。它假设实例用向量表示,并用一个整数标识,并且这些向量可以与L2(欧几里得)距离或点积进行比较。与查询向量相似的向量是那些与查询向量有最低L2距离或最高点积的向量。它还支持余弦相似度,因为这是规范化向量的点积。

  大多数方法,如基于二进制矢量和紧凑型量化码的方法,只使用矢量的压缩表示,不需要保持原始矢量。这通常是以不太精确的搜索为代价的,但这些方法可以在单个服务器的主存中扩展到数十亿个向量。

  GPU实现可以接受来自CPU或GPU内存的输入。在一个有GPU的服务器上,GPU索引可以用来替代CPU索引(例如,将IndexFlatL2替换为GpuIndexFlatL2),并自动处理从GPU内存的复制。然而,如果输入和输出都留在GPU上,结果会更快。支持单gpu和多gpu使用。

Building

  这个库主要是用c++实现的,通过CUDA提供了可选的GPU支持,以及一个可选的Python接口。CPU版本需要BLAS库。它可以用Makefile编译,也可以打包到docker映像中。See INSTALL.md  for details.

How Faiss works

  Faiss是围绕一个索引类型构建的,该索引类型存储了一组向量,并提供了一个函数来使用L2和/或点积向量比较在其中进行搜索。有些索引类型是简单的基线,如精确搜索。大多数可用的索引结构对应于关于

  • search time
  • search quality
  • memory used per index vector
  • training time
  • need for external data for unsupervised training

  的各种权衡。

  可选的GPU实现提供了可能是(截至2017年3月)最快的精确和近似(压缩域)最近邻搜索实现高维向量,最快的Lloyd's k-means,以及已知最快的小k选择算法。这里详细介绍了实现。

Full documentation of Faiss

  The following are entry points for documentation:

 

posted @ 2021-11-23 15:29  神龙逗勇士  阅读(304)  评论(0编辑  收藏  举报