命令列工具
facebookresearch/faiss avatar
facebookresearch/faiss

用 benchs 腳本重現 Faiss 基準測試結果

此專案圍繞「facebookresearch/faiss」建置,面向真實業務場景,提供可重複使用、可持續維運的開源實作。

40,905 個 Star4,524 個 ForkC++MIT

秒懂

它是什麼?
benchs 目錄為 Polysemous 和 GPU 論文提供了自包含的腳本,並附有外部資料集和範例輸出。
適合誰用?
適合需要評估 facebookresearch/faiss 文件所述能力的讀者,不適合把本文當成完整效能或安全測試報告。先依 README 的實際命令與檔案入口試跑,記下版本、輸入、輸出與錯誤,再決定是否納入正式流程。
可以商用嗎?
可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 1 天前。
用什麼語言寫的?
主要是 C++(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月14日)與我們的分析,不構成法律意見。

開源專案深度解析

benchs 目錄不是程式庫本身

benchs 目錄中的 README 描述的是 facebookresearch/faiss 儲存庫內的一組基準腳本。儲存庫中繼資料將 Faiss 標識為一個用 C++ 編寫、用於稠密向量相似性搜尋和聚類的程式庫,首頁為 faiss.ai。這些基準腳本是自包含的:它們只依賴 Faiss 以及必須存放在子目錄中的外部訓練資料。README 還提醒說,重現的數字,尤其是計時結果,會因實作變化和不同機器而略有不同。

以 facebookresearch/faiss 為中心閱讀素材,可確認的範圍是 README、倉庫欄位與發布紀錄;未在這些內容出現的效能、相容性或安全承諾不應自行補上。這種界線讓文章能區分作者明說的能力與仍待本地確認的假設。 本段專看第 1 個核對面向:把 facebookresearch/faiss 的名稱、版本與實際輸出放在同一筆紀錄中,才能在再次執行時辨識差異。

採用前可從 facebookresearch/faiss 的 README 指定入口開始,並把輸入、輸出和錯誤訊息留下來。若文件列出命令、設定檔或資料格式,應逐項對應;若文件未說明某個環節,這就是本專案目前的未知,不宜用其他工具的經驗代替。 對 facebookresearch/faiss 而言,這個觀察點必須連同本段列出的專案名一起閱讀,不能抽離成一般工具的保證。

針對 facebookresearch/faiss 的第 1 項紀錄,還要檢查命令是否在預期目錄執行、輸入格式是否與 README 相同、輸出是否可被下一步工具讀取,以及失敗時是否留下足夠錯誤訊息。這些觀察能把文件敘述轉成可追蹤的工程紀錄,也能指出哪些結果只是本機環境造成。

這些腳本針對的論文結果

腳本重現兩篇論文的結果。第一篇是 Douze、Jégou 和 Perronnin 在 ECCV 2016 發表的 Polysemous codes。第二篇是 Jeff Johnson、Matthijs Douze 和 Hervé Jégou 的 Billion-scale similarity search with GPUs,README 中標注為 arXiv:1702.08734。bench_polysemous_sift1m.py 對應 Polysemous 論文的圖 3,bench_polysemous_1bn.py 覆蓋該論文中十億向量的實驗,包括表 2 和附錄。GPU 腳本針對的是 GPU 論文。

實際核對時應把 main 分支與最近可見的發布標籤分開記錄。素材列出的最新標籤是 v1.15.0,其發布頁可對照變更內容。 文章只把這些資料當作時間點,不將 star 或 issue 數量當成品質證明。 本段專看第 2 個核對面向:把 facebookresearch/faiss 的名稱、版本與實際輸出放在同一筆紀錄中,才能在再次執行時辨識差異。

維護者需要特別檢查 facebookresearch/faiss 的依賴邊界與授權條件。素材標示的授權為 MIT;它只說明分發與修改時要閱讀的法律條件,不能代替第三方依賴盤點、組織政策審查或部署環境的風險評估。 對 facebookresearch/faiss 而言,這個觀察點必須連同本段列出的專案名一起閱讀,不能抽離成一般工具的保證。

針對 facebookresearch/faiss 的第 2 項紀錄,還要檢查命令是否在預期目錄執行、輸入格式是否與 README 相同、輸出是否可被下一步工具讀取,以及失敗時是否留下足夠錯誤訊息。這些觀察能把文件敘述轉成可追蹤的工程紀錄,也能指出哪些結果只是本機環境造成。

外部資料集和下載步驟

儲存庫不附帶任何資料集。SIFT1M 和 SIFT1B 需要從 corpus-texmex.irisa.fr 下載,並解壓到 sift1M 或 bigann 子目錄。Deep1B 的 ground truth 和查詢集來自一個 Yandex.Disk 連結,資料庫向量和訓練向量透過 GNOIMI 儲存庫中的 downloadDeep1B.py 下載,然後拼接為 base.fvecs 和 learn.fvecs。MNIST8m 來自 Léon Bottou 的 infinite MNIST 頁面。README 沒有提供這些檔案的校驗和,因此完整性驗證需要使用者自行處理。

採用前可從 facebookresearch/faiss 的 README 指定入口開始,並把輸入、輸出和錯誤訊息留下來。若文件列出命令、設定檔或資料格式,應逐項對應;若文件未說明某個環節,這就是本專案目前的未知,不宜用其他工具的經驗代替。 本段專看第 3 個核對面向:把 facebookresearch/faiss 的名稱、版本與實際輸出放在同一筆紀錄中,才能在再次執行時辨識差異。

這篇文章的判斷落在 facebookresearch/faiss 自身的工作流程:先用文件中的最小入口得到可觀察結果,再以 README、版本標籤和原始碼中的實際路徑核對差異。測試若只停留在首頁、範例截圖或宣傳描述,無法證明你的輸入與部署方式也成立。 對 facebookresearch/faiss 而言,這個觀察點必須連同本段列出的專案名一起閱讀,不能抽離成一般工具的保證。

針對 facebookresearch/faiss 的第 3 項紀錄,還要檢查命令是否在預期目錄執行、輸入格式是否與 README 相同、輸出是否可被下一步工具讀取,以及失敗時是否留下足夠錯誤訊息。這些觀察能把文件敘述轉成可追蹤的工程紀錄,也能指出哪些結果只是本機環境造成。

執行 Polysemous 十億實驗

bench_polysemous_1bn.py 需要資料集名稱、有效的 index_factory 鍵以及搜尋時參數。README 展示了一個 SIFT1000M 執行,使用 IMI2x12,PQ16,並透過花括號展開設定 nprobe、max_codes 和漢明閾值的網格。在這個記錄中,訓練約需兩分鐘,加入向量約需 3.1 小時,兩者都是多執行緒的。搜尋步驟本身不是多執行緒的。表 2 的結果選擇的是通過漢明檢查的程式碼比較百分比約為 20% 的執行點,在範例輸出中對應 ht=48。

維護者需要特別檢查 facebookresearch/faiss 的依賴邊界與授權條件。素材標示的授權為 MIT;它只說明分發與修改時要閱讀的法律條件,不能代替第三方依賴盤點、組織政策審查或部署環境的風險評估。 本段專看第 4 個核對面向:把 facebookresearch/faiss 的名稱、版本與實際輸出放在同一筆紀錄中,才能在再次執行時辨識差異。

當 facebookresearch/faiss 進入團隊流程後,應把本次核對的版本、命令、設定和輸出連同失敗案例保存。素材沒有提供的部分標成未說明,等實際維護時由負責人補上證據;這比把推測寫成固定功能更能支撐後續升級決定。 對 facebookresearch/faiss 而言,這個觀察點必須連同本段列出的專案名一起閱讀,不能抽離成一般工具的保證。

針對 facebookresearch/faiss 的第 4 項紀錄,還要檢查命令是否在預期目錄執行、輸入格式是否與 README 相同、輸出是否可被下一步工具讀取,以及失敗時是否留下足夠錯誤訊息。這些觀察能把文件敘述轉成可追蹤的工程紀錄,也能指出哪些結果只是本機環境造成。

GPU 搜尋、聚類和 k-NN 圖腳本

README 的 GPU 部分重現 GPU 論文在一張或四張 Titan X GPU 上的測量結果。bench_gpu_sift1m.py 在 SIFT1M 上執行精確和近似搜尋。bench_gpu_1bn.py 處理 SIFT1B 和 Deep1B 的多 GPU 搜尋,README 記錄了 -tempmem 等選項來限制臨時記憶體,以及 -altadd 來避免加入時 GPU 記憶體溢出。kmeans_mnist.py 對 MNIST8m 聚類,另一次 bench_gpu_1bn.py 呼叫會在 Deep1B 上建立 k-NN 圖。README 還建議小型資料集使用 GpuIVFFlat。

這篇文章的判斷落在 facebookresearch/faiss 自身的工作流程:先用文件中的最小入口得到可觀察結果,再以 README、版本標籤和原始碼中的實際路徑核對差異。測試若只停留在首頁、範例截圖或宣傳描述,無法證明你的輸入與部署方式也成立。 本段專看第 5 個核對面向:把 facebookresearch/faiss 的名稱、版本與實際輸出放在同一筆紀錄中,才能在再次執行時辨識差異。

以 facebookresearch/faiss 為中心閱讀素材,可確認的範圍是 README、倉庫欄位與發布紀錄;未在這些內容出現的效能、相容性或安全承諾不應自行補上。這種界線讓文章能區分作者明說的能力與仍待本地確認的假設。 對 facebookresearch/faiss 而言,這個觀察點必須連同本段列出的專案名一起閱讀,不能抽離成一般工具的保證。

針對 facebookresearch/faiss 的第 5 項紀錄,還要檢查命令是否在預期目錄執行、輸入格式是否與 README 相同、輸出是否可被下一步工具讀取,以及失敗時是否留下足夠錯誤訊息。這些觀察能把文件敘述轉成可追蹤的工程紀錄,也能指出哪些結果只是本機環境造成。

其他基準和授權條款

除論文重現外,目錄還包含許多獨立的 Faiss 元件基準:量化編解碼器、漢明距離核心、堆操作、HNSW 變體、IVF fastscan、成對距離、分割、乘積量化器表和向量運算。README 說其中一些可能已過時。儲存庫使用 MIT 授權,版權歸 Facebook, Inc. 及其關聯公司所有;授權允許使用、複製、修改、合併、發布、分發、再授權和出售副本,並聲明不提供任何擔保。README 沒有涉及的包括安裝、API 用法、驅動需求或預期硬體,這些仍需在別處確認。

當 facebookresearch/faiss 進入團隊流程後,應把本次核對的版本、命令、設定和輸出連同失敗案例保存。素材沒有提供的部分標成未說明,等實際維護時由負責人補上證據;這比把推測寫成固定功能更能支撐後續升級決定。 本段專看第 6 個核對面向:把 facebookresearch/faiss 的名稱、版本與實際輸出放在同一筆紀錄中,才能在再次執行時辨識差異。

實際核對時應把 main 分支與最近可見的發布標籤分開記錄。素材列出的最新標籤是 v1.15.0,其發布頁可對照變更內容。 文章只把這些資料當作時間點,不將 star 或 issue 數量當成品質證明。 對 facebookresearch/faiss 而言,這個觀察點必須連同本段列出的專案名一起閱讀,不能抽離成一般工具的保證。

針對 facebookresearch/faiss 的第 6 項紀錄,還要檢查命令是否在預期目錄執行、輸入格式是否與 README 相同、輸出是否可被下一步工具讀取,以及失敗時是否留下足夠錯誤訊息。這些觀察能把文件敘述轉成可追蹤的工程紀錄,也能指出哪些結果只是本機環境造成。

編輯結論

適合需要評估 facebookresearch/faiss 文件所述能力的讀者,不適合把本文當成完整效能或安全測試報告。先依 README 的實際命令與檔案入口試跑,記下版本、輸入、輸出與錯誤,再決定是否納入正式流程。對 facebookresearch/faiss 未說明的相容性、資源消耗與部署限制,應保留為待確認項目,不能由文章推定。

官方來源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社群筆記

社群筆記