#faiss #api-wrapper #version

sys faiss-next-sys

facebookresearch/faiss 库 C 接口的轻量级 Rust 封装

2 个不稳定版本

0.2.0 2024 年 2 月 2 日
0.1.1 2024 年 1 月 23 日

#177 in #api-wrapper


faiss-next 中使用

MIT 许可证

395KB
11K SLoC

faiss-next-sys

faiss-next-sys 使用 c_api 封装 faiss 并通过 bindgen 转换为 rust.

目前支持的 faiss 版本是 v1.7.4

从源代码构建 faiss

faiss-next-sys 需要 faiss 使用 FAISS_ENABLE_C_API=ONBUILD_SHARED_LIBS=ON 编译。

一些 facebookresearch/faiss 分发版,如 Mac 上的 brew,不提供 faiss_c 库。

因此,有时需要从源代码构建 faiss

facebookresearch/faiss 提供了官方的安装文档,指导如何从源代码构建 faiss

但是,在 windows 上,由于 msvc C++ 编译器对 C++17 语法实现的问题,构建 faiss 将失败:问题

因此,制作了一个经过测试的 v1.7.4 版本:[链接](https://github.com/yexiangyu/faiss/archive/refs/heads/v1.7.4-win.zip) 以解决这个问题。

如果目标平台不是 windows,则只需克隆 faiss 并检出 v1.7.4 分支即可。

  • 链接:[经过测试的版本](https://github.com/yexiangyu/faiss/archive/refs/heads/v1.7.4-win.zip)
  • 链接:[官方版本](https://github.com/facebookresearch/faiss/archive/refs/tags/v1.7.4.zip)

选择上述之一,下载、解压,然后开始构建

macOS

需要 xcodebrew,请提前安装。

# install cmake openblas and llvm
brew install cmake openblas llvm

# configure
cmake -B build -DCMAKE_C_COMPILER=/opt/homebrew/opt/llvm/bin/clang -DCMAKE_CXX_COMPILER=/opt/homebrew/opt/llvm/bin/clang++  -DFAISS_ENABLE_C_API=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DFAISS_ENABLE_GPU=OFF -DFAISS_ENABLE_PYTHON=OFF -DBUILD_TESTING=OFF

# compile
cmake --build build --config Release

# install
cmake --install build --prefix=$HOME/faiss
cp build/c_api/libfaiss_c.dylib $HOME/faiss/lib/

Linux

需要 gcccmakeintelmklcuda,请提前安装。

# configure
cmake -B build -DFAISS_ENABLE_C_API=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DFAISS_ENABLE_GPU=ON -DFAISS_ENABLE_PYTHON=OFF -DBUILD_TESTING=OFF

# compile
 cmake --build build --config Release

# install
 cmake --install build --prefix=$HOME/faiss
 cp build/c_api/libfaiss_c.so $HOME/faiss/lib/

Windows

需要安装 Visual Studio 2022cmakeintelmklcuda,请提前安装。

# configure
cmake -B build -DFAISS_ENABLE_C_API=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DFAISS_ENABLE_GPU=ON -DFAISS_ENABLE_PYTHON=OFF -DBUILD_TESTING=OFF

# compile
 cmake --build build --config Release

# install
cmake --install build --prefix=%USERPROFILE%\faiss
copy build\c_api\Release\faiss_c.dll %USERPROFILE%\faiss\bin
copy build\c_api\Release\faiss_c.lib %USERPROFILE%\faiss\lib\

绑定

绑定是在 faiss-next-sys 文件夹下运行以下命令生成的

cargo build --features bindgen

或者,启用 gpu 生成绑定

cargo build --features bindgen,gpu

生成的绑定如下

└── src
    ├── lib.rs
    ├── linux
       ├── bindings.rs      #linux cpu bindings
    │   └── bindings_gpu.rs  #linux gpu bindings
    ├── macos
    │   └── bindings.rs      #macos cpu bindings, gpu is not supported
    └── windows
        ├── bindings.rs	     #windows cpu bindings 
        └── bindings_gpu.rs  #windows gpu bindings

无运行时依赖

~0–1.8MB
~36K SLoC