最近在玩faiss,運行這段代碼的時候報錯了:this
res = faiss.StandardGpuResources()
flat_config = 0
index = faiss.GpuIndexFlatL2(res,d,flat_config)prototype
報錯內容見上:接口
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "swigfaiss_gpu.py", line 2958, in __init__
this = _swigfaiss_gpu.new_GpuIndexFlatL2(*args)
NotImplementedError: Wrong number or type of arguments for overloaded function 'new_GpuIndexFlatL2'.
Possible C/C++ prototypes are:
faiss::gpu::GpuIndexFlatL2::GpuIndexFlatL2(faiss::gpu::GpuResources *,faiss::IndexFlatL2 *,faiss::gpu::GpuIndexFlatConfig)
faiss::gpu::GpuIndexFlatL2::GpuIndexFlatL2(faiss::gpu::GpuResources *,faiss::IndexFlatL2 *)
faiss::gpu::GpuIndexFlatL2::GpuIndexFlatL2(faiss::gpu::GpuResources *,int,faiss::gpu::GpuIndexFlatConfig)
faiss::gpu::GpuIndexFlatL2::GpuIndexFlatL2(faiss::gpu::GpuResources *,int)源碼
一開始懷疑是由於以前用conda安裝過 faiss,索性conda uninstall faiss-gpu。卸載後仍是報錯。it
找了半天也沒找到資料。最後看了底層代碼才解決。io
既然解決了就分享給你們:ast
解決的方法是:function
flat_config = faiss.GpuIndexFlatConfig()
flat_config.device = 0module
index = faiss.GpuIndexFlatL2(res, d, flat_config)下載
緣由是API接口有了變更,指定GPU卡號的方式不同了。
另外:
安裝faiss只要下載源碼安裝便可。不須要conda 安裝Python版本。
安裝的時候須要提早安裝swig。