프로젝트 소개

Faiss는 밀집 벡터의 효율적인 유사도 검색과 클러스터링을 위한 라이브러리로, 주로 Meta의 Fundamental AI Research 그룹에서 개발되었습니다. 인스턴스가 정수로 식별되는 벡터로 표현되고, L2(유클리드) 거리 또는 내적(dot product)으로 비교된다고 가정합니다. 코사인 유사도는 정규화된 벡터에 대한 내적을 통해 지원됩니다. 이 라이브러리는 RAM에 맞지 않을 수 있는 집합을 포함하여 모든 크기의 벡터 집합에서 검색하는 알고리즘을 포함합니다. 또한 평가 및 파라미터 튜닝을 위한 지원 코드도 포함합니다. Faiss는 C++로 작성되었으며 Python/numpy용 완전한 래퍼를 제공하고, 가장 유용한 알고리즘 중 일부는 GPU에서 구현됩니다. 인덱스 유형은 단순한 정확 검색(exact-search) 기준선부터 검색 시간, 검색 품질, 인덱스 벡터당 메모리, 훈련 시간, 추가 시간, 비지도 훈련을 위한 외부 데이터 필요성 간의 균형을 맞추는 구조까지 다양합니다. 이진 벡터와 압축 양자화 코드에 기반한 방법은 압축된 표현만 사용하며 원래 벡터를 유지할 필요가 없습니다. 일반적으로 검색 정밀도는 낮아지지만 단일 서버의 주 메모리에서 수십억 개의 벡터로 확장할 수 있습니다. HNSW 및 NSG와 같은 다른 방법은 원시 벡터 위에 인덱싱 구조를 추가하여 검색을 더 효율적으로 만듭니다. GPU 구현은 CPU 또는 GPU 메모리의 입력을 모두 허용합니다. GPU가 있는 서버에서 GPU 인덱스는 CPU 인덱스의 드롭인 교체(drop-in replacement)로 사용할 수 있습니다(예: IndexFlatL2를 GpuIndexFlatL2로 교체). GPU 메모리로의 복사와 GPU 메모리로부터의 복사는 자동으로 처리됩니다. 입력과 출력이 모두 GPU에 상주하면 결과가 더 빠릅니다. 단일 GPU 및 다중 GPU 사용이 지원됩니다. 설치: Python용 Anaconda에서 사전 컴파일된 라이브러리(faiss-cpu, faiss-gpu, faiss-gpu-cuvs)를 사용할 수 있습니다. 이 라이브러리는 대부분 C++로 구현되어 있으며 유일한 의존성은 BLAS 구현입니다. 선택적 GPU 지원은 CUDA 또는 AMD ROCm을 통해 제공되며, Python 인터페이스는 선택 사항입니다. NVIDIA cuVS의 백엔드 GPU 구현도 선택적으로 활성화할 수 있습니다. cmake로 컴파일됩니다. 자세한 내용은 INSTALL.md를 참조하세요. 문서 진입점으로는 프로젝트 위키(시작하기 튜토리얼, FAQ, 문제 해결 섹션 포함), 코드 주석에서 추출한 클래스별 정보를 제공하는 faiss.ai의 doxygen 문서, 그리고 Polysemous codes, Billion-scale similarity search with GPUs, Link and code와 같은 연구 논문의 결과를 재현하기 위한 벤치마크 README가 있습니다. Faiss는 MIT 라이선스로 배포됩니다. 공개 토론은 GitHub Discussions에서 이루어지며, 이슈 페이지는 버그 신고와 질문을 위해 모니터링됩니다.