深入理解Faiss 原理&源碼 (一) 編譯


深入理解Faiss 原理&源碼 (一) 編譯

Faiss系列, 從單機lib到構建大規模分布式向量檢索系統, 且聽我娓娓道來

Faiss是什么?

Faiss是Facebook AI團隊開源的針對聚類和相似性搜索庫,為稠密向量提供高效相似度搜索和聚類,支持十億級別向量的搜索,是目前最為成熟的近似近鄰搜索庫。它包含多種搜索任意大小向量集(備注:向量集大小由RAM內存決定)的算法,以及用於算法評估和參數調整的支持代碼。Faiss用C++編寫,並提供與Numpy完美銜接的Python接口。除此以外,對一些核心算法提供了GPU實現

mac下安裝

安裝mac xcode工具包

xcode-select --install

因為是通過源碼編譯, 需要依賴gcc系列工具包, 所以要先執行這一步

安裝 openblas

brew install openblas

BLAS是 Basic Linear Algebra Subprograms (基本線性代數子程序)的首字母縮寫,主要用來做基礎的矩陣計算,或者是向量計算。它分為三級:

  • BLAS 1級,主要做向量與向量間的dot或乘加運算,對應元素的計算;

  • BLAS 2級,主要做矩陣和向量,就類似PPT中藍色部分所示,矩陣A*向量x, 得到一個向量y。除此之外,可能還會有對稱的矩陣變形;

  • BLAS 3級,主要是矩陣和矩陣的計算,最典型的是A矩陣B矩陣,得到一個C矩陣。由矩陣的寬、高,得到一個mn的C矩陣。

為什么BLAS是一個非常重要的庫或者接口,是因為它是很多科學計算的核心之一。每年做超級計算機的排行榜,都要做LINPACK測試,該測試很多部分就是做BLAS 3級矩陣和矩陣的計算。此外,還有很多科學和工程的模擬,在轉換后都變成了一種矩陣上的操作。如果你把矩陣優化的特別好的話,對整個應用的提升,都是非常有幫助的。

安裝swig

brew install swig

簡單包裝界面產生器(英語:Simplified Wrapper and Interface Generator, SWIG)是一個開源軟件工具,用來將C語言或C++寫的計算機程序或函式庫,連接腳本語言,例如Lua, Perl, PHP, Python, R, Ruby, Tcl, 和其它語言,例如C#, Java, JavaScript, Go, D, OCaml, Octave, Scilab以及Scheme. 也可以輸出成XML格式。

安裝libomp

brew install libomp

OpenMP(Open Multi-Processing)是一套支持跨平台共享內存方式的多線程並發的編程API,使用C,C++和Fortran語言,可以在大多數的處理器體系和操作系統中運行,包括Solaris, AIX, HP-UX, GNU/Linux, Mac OS X, 和Microsoft Windows。包括一套編譯器指令、庫和一些能夠影響運行行為的環境變量。

編譯faiss

  • 下載代碼, 此處選擇最新v1.7.1 tag
git clone https://github.com/facebookresearch/faiss.git

cd faiss

git checkout v1.7.1
  • cmake參數選擇
vim CMakeLists.txt

此處不需要gpu索引和python版本, 修改CMakeLists.txt 對應設置

option(FAISS_OPT_LEVEL "" "generic")
option(FAISS_ENABLE_GPU "Enable support for GPU indexes." OFF)
option(FAISS_ENABLE_PYTHON "Build Python extension." OFF)
option(FAISS_ENABLE_C_API "Build C API." ON)

cmake 依賴校驗

cmake -B build .
  • 開始編譯
make -C build -j faiss

533cd0d20bfddb78d2d0e27a25d1f8bb.png

  • 生成c++ lib
make -C build install

ec21f321b2aea0d19c07ee877309d173.png

  • 跑下測試用例
make -C build install

889a995935a98d97f913161e6940269c.png

  • 跑下 ivfpq的例子
make -C build demo_ivfpq_indexing

66b2e729e089b8dbc4c74581528cbd4e.png

至此, 安裝驗證完成, 下一篇將會剖析下 c++版本 flat索引 原理+源碼

對向量檢索感興趣以及對搜索&推薦感興趣的小伙伴的歡迎加qq 564790073 討論, 一線大廠搜索中心長期招人

github: https://github.com/hashyong

未經允許禁止轉載 謝謝

附錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM