最近Facebook AI
实验室开源了相似性搜索库Faiss
。
Faiss
是用于有效的相似性搜索(similarity search
)和稠密矢量聚类(clustering of dense vectors
)的库。它包含了可在任何大小向量集合里进行搜索的算法,向量集合的大小甚至可达到RAM
容纳不下的地步。另外,它还包含了用于评估和参数调优的支持代码。Faiss
用C++
编写,有Python/numpy
的完整包装。其中最有用的一些算法则在GPU
上实现。
机器上没有安装HomeBrew
的,请参考让Mac也能拥有apt-get类似的功能——Brew。
下面,我们介绍一下如何在macOS Sierra (10.12.3)
上编译Faiss
。
1.下载Faiss
源代码
1 |
$ git clone https://github.com/facebookresearch/faiss.git |
2.安装编译需要的工具
1 |
$ brew install llvm |
3.修改调整源代码,准备编译
1 2 |
$ cd faiss $ cp example_makefiles/makefile.inc.Mac.brew makefile.inc |
4.编译
1 |
$ make all |
5.执行测试用例
1 2 3 4 |
#需要手工指定动态库的搜索路径,否则会提示“dyld: Library not loaded: @rpath/libomp.dylib”,导致进程无法启动 $ export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/opt/llvm/lib/ $ ./tests/demo_ivfpq_indexing |
其余的示例,参考源代码中的INSTALL
文件中的内容即可。
感谢,之前安装总是不对,就是因为没有解决路径问题~
我总是安装不对. string.h的那个报错,请问是什么原因呢?
不清楚你说的是哪个
/usr/local/Cellar/llvm/5.0.0/include/c++/v1/string.h:61:15: fatal error:
'string.h' file not found
#include_next
报错报的是这个,我的是macOS Sierra (10.13.1),不知道是不是系统版本原因,也不知道怎么解决。
To use the bundled libc++ please add the following LDFLAGS:
LDFLAGS="-L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib"
This formula is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.
If you need to have this software first in your PATH run:
echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.bash_profile
For compilers to find this software you may need to set:
LDFLAGS: -L/usr/local/opt/llvm/lib
CPPFLAGS: -I/usr/local/opt/llvm/include
更新一下你的代码,你的代码应该比较旧了。我看新的代码中已经增加这些选项了,要么你的代码太旧,要么你没有使用MacOSX上的MakeFile文件。
您好,请问您是在make all的时候,makefile.inc路径不正确的吗?我的是在那时候出现了,和下面我评论的那样的问题。求帮助的啊,也求博主帮助的啊。
我没有路径不正确,我贴出来的是执行 “ brew install llvm”的时候,最后输出的内容,他的目的是提示你最好设置一下路径。本质上,如果系统比较简单,没有乱七八糟安装过其他东西,这些路径是不需要修改的。
不是使用Apple自带的llvm进行编译,而是要使用 “ brew install llvm” 之后的llvm进行编译,哪怕两个llvm版本是相同的,都不可以。
我知道了,系统更新之后,他把我的/usr/include给删了。虽然配置的llvm中的文件夹下有 .h文件,但是/usr/include不见了,里面没有要执行的头文件 所以编译不成功。 = =
你好,我也遇到了跟你一样的问题,/usr/include没有了,请问你是怎么完成编译的?