#index #clustering #vector-search #similarity #search-engine #cbir

faiss

对 Faiss(向量相似度搜索引擎)的高级绑定

11 个重大版本

0.12.1 2023 年 8 月 26 日
0.12.0 2023 年 1 月 29 日
0.11.0 2022 年 3 月 28 日
0.10.0 2021 年 6 月 21 日
0.3.0 2018 年 3 月 21 日

#222数据库接口

Download history 914/week @ 2024-04-06 632/week @ 2024-04-13 920/week @ 2024-04-20 548/week @ 2024-04-27 271/week @ 2024-05-04 588/week @ 2024-05-11 655/week @ 2024-05-18 349/week @ 2024-05-25 123/week @ 2024-06-01 149/week @ 2024-06-08 171/week @ 2024-06-15 99/week @ 2024-06-22 85/week @ 2024-06-29 93/week @ 2024-07-06 91/week @ 2024-07-13 66/week @ 2024-07-20

每月下载量 345

MIT/Apache

3MB
72K SLoC

C++ 38K SLoC // 0.1% comments Python 15K SLoC // 0.1% comments Rust 10K SLoC // 0.0% comments CUDA 9K SLoC // 0.1% comments BASH 622 SLoC // 0.1% comments C 176 SLoC // 0.1% comments Shell 109 SLoC // 0.3% comments Batch 27 SLoC // 0.3% comments

Faiss-rs

faiss at crates.io Continuous integration status Minimum Rust Version Stable dependency status

本项目为 Faiss(最先进的向量搜索和聚类库)提供 Rust 绑定。

使用动态链接安装

默认情况下,此包会与系统安装的 Faiss 库动态链接,因此不会自动为您构建 Faiss。要自行构建库

  1. 请按照此处的说明使用 CMake 构建 Faiss,启用变量 FAISS_ENABLE_C_APIBUILD_SHARED_LIBS。当前该包仅兼容版本 v1.7.2。请从此分支c_api_head)构建 Faiss,其中将包含对 C 接口的最新支持绑定。例如

    cmake -B build -DFAISS_ENABLE_C_API=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
    cmake --build build
    

    这将生成动态库 faiss_c(Linux 上的 "c_api/libfaiss_c.so"),需要将其安装到系统可以识别的位置(在 Linux 上,请尝试 "/usr/lib" 等环境变量中的某个位置,或者尝试向该变量添加新的路径)。对于 GPU 支持,不要忘记启用选项 FAISS_ENABLE_GPU注意: faiss_c 可能会动态链接到本机的 faiss 库,在这种情况下,您还需要安装主共享对象(faiss/libfaiss.so)。

  2. 现在您可以将此包作为依赖项包含

    [dependencies]
    "faiss" = "0.11.0"
    

如果您已使用 GPU 支持构建 Faiss,则可以包含 "gpu" Cargo 功能

[dependencies]
"faiss" = { version = "0.11.0", features = ["gpu"] }

使用静态链接安装

作为上述方法的替代方案,启用 "static" Cargo 功能,让 Rust 为您构建 Faiss。您仍然需要构建和运行 Faiss 所需的依赖项,这些依赖项在他们的 INSTALL.md 中有描述,即兼容的 C++ 编译器和 BLAS 实现。

[dependencies]
"faiss" = { version = "0.11.0", features = ["static"] }

使用 GPU 支持编译 Faiss 也是可能的。

[dependencies]
"faiss" = { version = "0.11.0", features = ["static", "gpu"] }

使用

以下是一个基本示例。请查看文档以获取更多信息。

use faiss::{Index, index_factory, MetricType};

let mut index = index_factory(64, "Flat", MetricType::L2)?;
index.add(&my_data)?;

let result = index.search(&my_query, 5)?;
for (i, (l, d)) in result.labels.iter()
    .zip(result.distances.iter())
    .enumerate()
{
    println!("#{}: {} (D={})", i + 1, *l, *d);
}

许可和归属声明

根据以下任一许可

您可选择。

除非您明确声明,否则您根据 Apache-2.0 许可定义的任何贡献,有意提交以包含在工作中的,应如上双重许可,不附加任何额外条款或条件。

此作品与 Facebook AI Research 或 Faiss 主软件无关。

依赖项