파이스 (FAISS)

IT 위키

파이스(FAISS, Facebook AI Similarity Search)는 벡터 유사도 검색(Nearest Neighbor Search)을 빠르고 효율적으로 수행할 수 있게 해주는 Facebook AI Research가 개발한 오픈소스 라이브러리이다. 고차원 벡터 공간에서 대규모 데이터의 검색과 클러스터링에 최적화되어 있으며, 자연어 처리, 추천 시스템, 검색 기반 생성(RAG) 등 다양한 분야에서 활용된다.

1 개요[편집 | 원본 편집]

FAISS는 GPU 및 CPU 모두에서 동작하며, 수백만 개 이상의 벡터에 대해 빠른 근접 이웃 검색을 가능하게 한다. 일반적인 유클리드 거리뿐만 아니라 코사인 유사도, 내적 등 다양한 거리 함수 기반으로 유사한 벡터를 찾아준다.

2 특징[편집 | 원본 편집]

  • 빠른 최근접 이웃 검색(ANN)
    • 고차원 벡터 공간에서 유사한 벡터를 빠르게 찾을 수 있음
  • 다양한 인덱스 구조 제공
    • Flat, IVF, HNSW, PQ 등 다양한 알고리즘 선택 가능
  • GPU 지원
    • 대규모 벡터 데이터셋에 대해 CUDA 기반 병렬 검색 가능
  • Python과 C++ API 제공
    • 파이썬 환경에서 사용이 간편하며 C++로 고성능 처리도 가능
  • 벡터 삽입/삭제/병합
    • 유동적인 인덱스 업데이트 기능 제공

3 설치[편집 | 원본 편집]

CPU 전용 버전:

pip install faiss-cpu

GPU 지원 버전:

pip install faiss-gpu

4 기본 사용 예제[편집 | 원본 편집]

다음은 FAISS를 이용하여 간단한 벡터 검색을 수행하는 예제이다.

import faiss
import numpy as np

# 128차원 벡터 1000개 생성
d = 128
nb = 1000
query = 5

np.random.seed(0)
xb = np.random.random((nb, d)).astype('float32')
xq = np.random.random((query, d)).astype('float32')

# 인덱스 생성 (L2 거리 기반)
index = faiss.IndexFlatL2(d)
index.add(xb)  # 벡터 추가

# 검색 (query 벡터 기준으로 3개씩 가장 가까운 벡터 찾기)
D, I = index.search(xq, 3)

print("거리(D):", D)
print("인덱스(I):", I)

5 주요 인덱스 종류[편집 | 원본 편집]

  • IndexFlatL2 — 가장 단순하고 정확한 인덱스 (모든 벡터를 직접 비교)
  • IndexIVFFlat — IVF(역 파일) 구조로 빠른 근접 탐색
  • IndexHNSW — HNSW 알고리즘 기반 그래프 구조 사용
  • IndexPQ — 제품 양자화(Product Quantization)로 메모리 사용량 절감
  • IndexIDMap — ID와 함께 벡터를 저장해 외부 참조 가능

6 활용[편집 | 원본 편집]

  • RAG 시스템에서 문서 임베딩 검색
  • 이미지 검색 및 유사 이미지 추천
  • 텍스트 유사도 기반 검색 (문장 임베딩 기반)
  • 사용자 행동 벡터 기반 추천 시스템
  • 클러스터링 및 군집 분석

7 같이 보기[편집 | 원본 편집]

8 참고 문헌[편집 | 원본 편집]