Faiss是一個庫,用於有效的相似性搜索和密集向量的聚類。它包含在任何大小的向量集中搜索的算法,最多可能不適合RAM。它還包含用於評估和參數調整的支持代碼。 Faiss用C ++編寫,其中包含Python/Numpy的完整包裝紙。 GPU上實現了一些最有用的算法。它主要是在Meta的基本AI研究小組中開發的。
有關最新功能的詳細信息,請參見ChangElog.md。
Faiss包含幾種相似性搜索的方法。它假設實例表示為向量並通過整數識別,並且可以將向量與L2(Euclidean)距離或點產品進行比較。類似於查詢矢量的向量是具有最低L2距離或具有查詢矢量的最高點產物的向量。它還支持餘弦的相似性,因為這是歸一化向量上的點產物。
某些方法,例如基於二進制向量和緊湊量化代碼的方法,僅使用向量的壓縮表示,而不需要保留原始向量。這通常是以較少精確的搜索為代價的,但是這些方法可以擴展到單個服務器上的主內存中數十億個向量。其他方法(例如HNSW和NSG)在原始向量的頂部添加了索引結構,以使搜索效率更高。
GPU實現可以接受CPU或GPU內存的輸入。在具有GPU的服務器上,GPU索引可以用於CPU索引(例如,用GpuIndexFlatL2
替換IndexFlatL2
)的置換式替換,並自動處理to to GPU內存的副本。結果將更快,但是如果輸入和輸出都居住在GPU上。支持單GPU的使用情況。
Faiss配備了Python的Anaconda的預編譯圖書館,請參閱Faiss-CPU和Faiss-GPU。該庫主要是在C ++中實現的,唯一的依賴性是BLAS實現。可選的GPU支持是通過CUDA或AMD ROCM提供的,並且Python界面也是可選的。它用cmake編譯。有關詳細信息,請參見install.md。
Faiss圍繞著存儲一組向量的索引類型構建,並提供了使用L2和/或DOT產品向量比較的函數。一些索引類型是簡單的基線,例如精確搜索。大多數可用的索引結構相對於各種權衡
可選的GPU實現提供了(截至2017年3月)的最快和近似(壓縮)最近的鄰居搜索實現,可用於高維矢量,最快的勞埃德的K-Means和最快的小型k -selection算法。此處詳細介紹了實施。
以下是文檔的切入點:
Faiss的主要作者是:
在研究論文中使用faiss時引用引用:
@article{douze2024faiss,
title={The Faiss library},
author={Matthijs Douze and Alexandr Guzhva and Chengqi Deng and Jeff Johnson and Gergely Szilvasy and Pierre-Emmanuel Mazaré and Maria Lomeli and Lucas Hosseini and Hervé Jégou},
year={2024},
eprint={2401.08281},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
對於GPU版本的Faiss,請引用:
@article{johnson2019billion,
title={Billion-scale similarity search with {GPUs}},
author={Johnson, Jeff and Douze, Matthijs and J{'e}gou, Herv{'e}},
journal={IEEE Transactions on Big Data},
volume={7},
number={3},
pages={535--547},
year={2019},
publisher={IEEE}
}
為了公開討論faiss或有關問題,在https://www.facebook.com/groups/faissusers/上有一個Facebook組
我們監視存儲庫的問題頁面。您可以報告錯誤,提出問題等。
FAISS已獲得MIT許可,請參閱頂級目錄中的許可證文件。
版權所有©Meta Platform,Inc。