在faiss中使用出现以下问题的:
原先的faiss检索方式:
dim=768
gpu_id=0
index = faiss.IndexFlatL2(dim)
res = faiss.StandardGpuResources()
self.index = faiss.index_cpu_to_gpu(res, gpu_id, index)
出现上述问题是IndexFlatL2是暴力检索,数据量比较大时,GPU内存占用比较大,
解决方法:
dim=768
m=8
nlist=100
d=8
gpu_id=0
quantizer = faiss.IndexFlatL2(dim)
index = faiss.IndexIVFPQ(quantizer,dim, nlist,m,d)
res = faiss.StandardGpuResources()
indexs = faiss.index_cpu_to_gpu(res, gpu_id, index)
indexs.train(x)
indexs.add(x)
IndexIVFPQ能够减少内存占用大小,但是准确度相比于IndexFlatL2准确度会有所下降。