Faiss란,
Faiss is a library for efficient similarity search and clustering of dense vectors. It contains algorithms that search in sets of vectors of any size, up to ones that possibly do not fit in RAM. It also contains supporting code for evaluation and parameter tuning. Faiss is written in C++ with complete wrappers for Python/numpy. Some of the most useful algorithms are implemented on the GPU. It is developed by Facebook AI Research.
Faiss의 특징
즉, dense vector databases에서 query vector와 가장 유사한 vector를 뽑는 효율적인 알고리즘이다.
CPU, GPU 기반으로 작동하게 할 수 있으며,
IVF(InVerted File index)를 활용
L2 distance, Dot product(L2 normalization하면 cosine similarity도 가능)가 가능
binary vectors and compact quantization vectors(PCA, Product Quantization사용)를 활용
따라서 original vectors를 keep하지 않아 낮은 RAM으로도 billions vector database에 적용 가능
Multi-GPU 사용도 제공
Batch processing 제공
L2, inner product, L1, Linf 등의 distance 제공
query vector의 radius 내의 모든 vectors in DB를 return할 수도 있음
index(=DB)를 RAM이 아니라 DISK에 store
Faiss 설치
pypi.org/project/faiss-gpu/#files
에서 환경에 맞는 whl파일을 받아(file.whl)
pip3 install file.whl을 치면 된다.
Faiss의 tutorial을 보며 각 용어들을 정리하자.
Tutorial(Getting started, IndexFlatL2 사용)
Tutorial(Faster search, IndexIVFFlat 사용)
IndexIVFFlat이란
"Index":index객체를 만들것인데
"IVF":각 vector(word)마다 voronoi cell(document)가 무엇인지 mapping하는 quantiser를 활용할 것이고
"Flat":product quantization으로 vector를 compress하지 않고 raw vector를 활용하는
Index객체를 만들 것이다.
Tutorial(Faster search, PCA사용)
Tutorial(Faster search, Product Quantization사용)
실제 사용에서는 Batch + GPU 등으로 돌리니, github->wiki에서 더 많은 tutorial, basics 등을 참고하자.
참고자료:
github.com/facebookresearch/faiss
pypi.org/project/faiss-gpu/#files
github.com/facebookresearch/faiss/tree/master/tutorial/python
github.com/facebookresearch/faiss/wiki/Getting-started
github.com/facebookresearch/faiss/wiki/Faster-search
medium.com/dotstar/understanding-faiss-part-2-79d90b1e5388
github.com/facebookresearch/faiss/wiki/Faiss-building-blocks:-clustering,-PCA,-quantization
'CS' 카테고리의 다른 글
(미완)[Python]습관을 바꾸어, 속도를 높이자. (0) | 2020.10.30 |
---|---|
[Python]List comprehension에서 if else 쓰기 (0) | 2020.10.30 |
파이썬에서 원소 체크를 자주한다면 list말고 set이나 dictionary를 쓰자. (0) | 2020.10.29 |
(미완)[Elasticsearch]특징 (0) | 2020.10.29 |
Inverted index 이해하기 (0) | 2020.10.29 |