go 调用faiss服务

  我们都知道,faiss是facebook开源的相似性搜索的开源项目,基于C++和python都有相应的实现,但是一直没有go版本,go要怎么去调用呢?可以直接通过go去调用c++的函数接口去实现;

  go调用faiss的例子可以参考这个文档:faiss package - github.com/DataIntelligenceCrew/go-faiss - Go Packages ,我这里主要说一下怎么通过C++源码编译到动态库供go调用的细节;

  首先官网的安装文档可以看这里:https://github.com/facebookresearch/faiss/blob/main/INSTALL.md

建议使用cmake编译,按照官网的步骤你去编译,当然是会报错的,会需要科学计数库,这个官网推荐是intel的,我这里也介绍intel的mkl库怎么安装,intel的mkl库还挺难找,记住我们需要安装的是i这个东西Parallel Studio XE Runtime,在官网通过这个关键字搜索,去找到安装方法,我这里就发出来ubuntu通过apt的安装方法:Installing Intel® Parallel Studio XE Runtime 2020 Using APT Repository

通过添加apt源之后,我们可以安装这个runtime库里的任何软件包了,直接安装intel-mkl-runtime包就好,其他包faiss用不上, apt-get install intel-mkl-runtime

安装好之后,这里也是个比较容易遇到问题的地方,你在用cmake去编译,还是会报缺少数学库,那是因为mkl安装的位置默认是在/opt/intel/psxe_runtime/linux/mkl/ 下面,安装版本不同,psxe_runtime的名字可能有不同,这时候我们运行一下该命令:source /opt/intel/oneapi/setvars.sh intel64 ,把安装的目录设置到环境变量,让cmake编译的时候找得到mkl的依赖,当然你也可以直接去/etc/ld.so.conf.d/ 目录下,添加mkl安装的动态库路径,例如我安装的动态库路径/opt/intel/psxe_runtime/linux/mkl/lib/intel64_lin/ , 然后再执行ldconfig

  安装后数学库之后,下一个就要安装swig了,因为无论是python还是go,都需要用swig这个工具,进行动态库的编译,如果你之前用conda安装了低版本的faiss,那你系统肯定有swig,安装最新版本的时候,大概率会报不支持-doxygen参数的错误,这时候,我们直接去源码安装最新的swig,官网地址:GitHub - swig/swig: SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages.

按照官网安装说明编译安装即可,记得选最新的release tag安装,如果使用configure方式安装,记得安装好所有的autoconf,autotools的那一系列工具,然后通过项目的autogen.sh脚本生成configure进行预编译。

  安装完swig之后,我们就可以继续编译faiss的接口了,如果之前机器上有swig,那编译的时候一定要带上新安装的swig库地址,所以最后的编译参数是:

cmake -B ./ -DFAISS_ENABLE_GPU=OFF -DFAISS_ENABLE_C_API=ON -DBUILD_SHARED_LIBS=ON -DSWIG_DIR=/usr/local/share/swig/4.1.0 -DSWIG_EXECUTABLE=/usr/local/bin/swig

  make && make install之后,libfaiss_c.so默认会安装到/usr/local/lib/ 目录里面,如果你的默认库目录没有这个目录,记得通过ldconfig配置一下,或者直接在/usr/lib下设一个软链。

  所有安装完成,,按照例子go get一下go-faiss这个项目安装go调用c++的库,最后可以直接参照go-faiss项目的例子进行faiss测试了

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值