最近偶然发现了一个go调用faiss的封装库, 尝试后可以成功调用。 安装稍微麻烦,具体如下:
安装faiss
git clone https://github.com/facebookresearch/faiss.git
因为封装库使用的是过往版本的faiss,需要checkout到对应的版本
git checkout v1.6.3
克隆好项目后,进行编译,参考https://github.com/facebookresearch/faiss/blob/v1.6.3/INSTALL.md
我需要使用cpu环境,所以编译参数如下:
./configure --without-cuda
make
make install
faiss主体编译安装完成后,开始编译c接口
cd c_api
make
接口编译完成后,在c_api目录下会生成两个对我们有用的文件
libfaiss_c.a libfaiss_c.so
将其链接到lib目录中
ln -s /data/faiss/c_api/libfaiss_c.so /usr/local/lib/
ln -s /data/faiss/c_api/libfaiss_c.a /usr/local/lib/
运行示例代码
faiss安装完成后, 克隆封装库的代码
git clone https://github.com/41tair/go-faiss.git
运行示例代码
cd example
go run example.go
# 输出
Start insert
Insert finish
ID: 471319862 Distance: 18.642956
ID: 444848353 Distance: 19.184757
ID: 1455878618 Distance: 19.220947
ID: 1179290612 Distance: 19.921898
ID: 272479062 Distance: 20.307579
ID: 776950312 Distance: 20.549385
ID: 76215616 Distance: 20.987206
ID: 1986848913 Distance: 22.040276
ID: 740259201 Distance: 22.206093
ID: 548764935 Distance: 22.71563
调用成功。 这个库封装了faiss的工厂接口,后面的使用可以参考https://github.com/facebookresearch/faiss/wiki/The-index-factory
如果运行example时提示库找不到,可以通过如下方法修复:
vim /etc/ld.so.conf.d/user-lib.conf
# 增加 /usr/local/lib
cat /etc/ld.so.conf.d/user-lib.conf
# 输出
/usr/local/lib
ldconfig