go 调用faiss服务
? 我們都知道,faiss是facebook開源的相似性搜索的開源項(xiàng)目,基于C++和python都有相應(yīng)的實(shí)現(xiàn),但是一直沒有g(shù)o版本,go要怎么去調(diào)用呢?可以直接通過go去調(diào)用c++的函數(shù)接口去實(shí)現(xiàn);
? go調(diào)用faiss的例子可以參考這個(gè)文檔:faiss package - github.com/DataIntelligenceCrew/go-faiss - Go Packages ,我這里主要說一下怎么通過C++源碼編譯到動(dòng)態(tài)庫供go調(diào)用的細(xì)節(jié);
? 首先官網(wǎng)的安裝文檔可以看這里:https://github.com/facebookresearch/faiss/blob/main/INSTALL.md
建議使用cmake編譯,按照官網(wǎng)的步驟你去編譯,當(dāng)然是會(huì)報(bào)錯(cuò)的,會(huì)需要科學(xué)計(jì)數(shù)庫,這個(gè)官網(wǎng)推薦是intel的,我這里也介紹intel的mkl庫怎么安裝,intel的mkl庫還挺難找,記住我們需要安裝的是i這個(gè)東西Parallel Studio XE Runtime,在官網(wǎng)通過這個(gè)關(guān)鍵字搜索,去找到安裝方法,我這里就發(fā)出來ubuntu通過apt的安裝方法:Installing Intel? Parallel Studio XE Runtime 2020 Using APT Repository
通過添加apt源之后,我們可以安裝這個(gè)runtime庫里的任何軟件包了,直接安裝intel-mkl-runtime包就好,其他包faiss用不上, apt-get install intel-mkl-runtime
安裝好之后,這里也是個(gè)比較容易遇到問題的地方,你在用cmake去編譯,還是會(huì)報(bào)缺少數(shù)學(xué)庫,那是因?yàn)閙kl安裝的位置默認(rèn)是在/opt/intel/psxe_runtime/linux/mkl/ 下面,安裝版本不同,psxe_runtime的名字可能有不同,這時(shí)候我們運(yùn)行一下該命令:source /opt/intel/oneapi/setvars.sh intel64 ,把安裝的目錄設(shè)置到環(huán)境變量,讓cmake編譯的時(shí)候找得到mkl的依賴,當(dāng)然你也可以直接去/etc/ld.so.conf.d/ 目錄下,添加mkl安裝的動(dòng)態(tài)庫路徑,例如我安裝的動(dòng)態(tài)庫路徑/opt/intel/psxe_runtime/linux/mkl/lib/intel64_lin/ , 然后再執(zhí)行l(wèi)dconfig
? 安裝后數(shù)學(xué)庫之后,下一個(gè)就要安裝swig了,因?yàn)闊o論是python還是go,都需要用swig這個(gè)工具,進(jìn)行動(dòng)態(tài)庫的編譯,如果你之前用conda安裝了低版本的faiss,那你系統(tǒng)肯定有swig,安裝最新版本的時(shí)候,大概率會(huì)報(bào)不支持-doxygen參數(shù)的錯(cuò)誤,這時(shí)候,我們直接去源碼安裝最新的swig,官網(wǎng)地址: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.
按照官網(wǎng)安裝說明編譯安裝即可,記得選最新的release tag安裝,如果使用configure方式安裝,記得安裝好所有的autoconf,autotools的那一系列工具,然后通過項(xiàng)目的autogen.sh腳本生成configure進(jìn)行預(yù)編譯。
? 安裝完swig之后,我們就可以繼續(xù)編譯faiss的接口了,如果之前機(jī)器上有swig,那編譯的時(shí)候一定要帶上新安裝的swig庫地址,所以最后的編譯參數(shù)是:
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默認(rèn)會(huì)安裝到/usr/local/lib/ 目錄里面,如果你的默認(rèn)庫目錄沒有這個(gè)目錄,記得通過ldconfig配置一下,或者直接在/usr/lib下設(shè)一個(gè)軟鏈。
? 所有安裝完成,,按照例子go get一下go-faiss這個(gè)項(xiàng)目安裝go調(diào)用c++的庫,最后可以直接參照go-faiss項(xiàng)目的例子進(jìn)行faiss測(cè)試了
總結(jié)
以上是生活随笔為你收集整理的go 调用faiss服务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通信模块RF测试
- 下一篇: VS code前端编辑浏览器自动刷新