22P by xguru 21일전 | favorite | 댓글 1개
  • 대규모 벡터를 비용 효율적으로 관리하기 위한 PostgreSQL용 새로운 벡터 검색 확장
  • 768차원의 1억 개 벡터에 대해 상위 10개 쿼리에서 QPS 131, 정확도 0.95 달성 가능
    • 월 $250으로 단일 머신에서 실행 가능
  • 400,000개 벡터를 $1에 저장 가능:
    • Pinecone(저장소 최적화 인스턴스) 대비 6배 저렴
    • pgvector 대비 26배 저렴

HNSW(Hierarchical Navigable Small Worlds) 기반 벡터 데이터베이스의 문제점

  • 긴 인덱스 생성 시간: 500만 레코드에 대해 2시간 이상 소요
  • 높은 메모리 요구량: 1천만 벡터 저장 시 최대 40GB 필요

VectorChord의 혁신적 솔루션: 디스크 친화적인 IVF+RaBitQ

  • **IVF(역 파일 색인)**와 RaBitQ 양자화를 사용
    • 32비트 벡터를 압축된 비트 표현으로 변환해 계산 비용 감소
    • 대부분의 비교는 압축 벡터를 사용하고, 정확도 보장을 위해 소수 벡터에 대해 전체 정밀 계산 수행
  • HNSW보다 빠르고 효율적인 검색:
    • RaBitQ는 벡터를 1비트로 압축, 계산 속도 100배 증가
    • 높은 정확도를 유지하면서 속도 최적화 가능

주요 벤치마크 결과

GIST 데이터셋 (1M, 960차원)

  • VectorChord는 pgvector 대비 QPS가 2배 더 높음
  • KMeans 클러스터링을 외부 GPU에서 수행 후 PostgreSQL로 가져오는 방식을 활용
  • AWS i4i.large 인스턴스(2 vCPUs, 16GB RAM)에서 70만 벡터 인덱싱 소요 시간: 186초
    • pgvector 대비 16배 빠름
    • 삽입 속도도 14배 더 빠름

LAION 5M 데이터셋

  • r6a.xlarge 머신에서 실험(4 vCPUs, 32GB RAM, 200GB EBS):
    • 높은 정확도에서도 빠른 응답 유지
    • $165.56/월 비용으로 유사 성능을 제공하며, 경쟁 플랫폼 대비 비용 효율적

LAION 100M 데이터셋

  • AWS i4i.xlarge 인스턴스(4 vCPUs, 32GB RAM, 937GB SSD):
    • QPS 16.2 @ recall 0.95 (상위 10개 결과 기준)
    • 멀티 스레드 환경에서 요청 증가에 따라 선형적인 QPS 증가 관찰

VectorChord의 주요 장점

  • PostgreSQL의 물리적 복제 및 기타 기능과 호환
  • 외부 인덱스 생성 지원:
    • 더 강력한 머신에서 인덱스를 생성한 뒤, 이를 소규모 머신으로 가져와 질의 실행
    • 단일 머신에서 수십억 개 벡터 지원 가능
  • 저비용, 고성능: 경쟁 플랫폼 대비 월 비용 크게 절감

요약 및 추가 정보

  • VectorChord는 PostgreSQL 환경에서 효율적인 벡터 검색을 제공
  • IVF 및 RaBitQ 양자화를 통해 속도와 메모리 사용을 최적화하여 대규모 데이터셋에 적합
  • 클라우드 관리 서비스: PGVecto.rs Cloud
    • 손쉬운 배포 및 확장 가능

Vector는 PostgreSQL의 새 JSON 입니다
위 글에서 인용한 pgvector 와 이 VectorChord의 전신인 pgvecto.rs 는 다른 확장입니다.
pgvector vs. pgvecto.rs in 2024: A Comprehensive Comparison for Vector Search in PostgreSQL

pgvecto.rs 를 만든 팀이 VectorChord를 만들어서 같이 관리중이고, 아직 기능이 VectorChord로 다 넘어오지 않았고요. 내년쯤에는 pgvecto.rs를 지원중단하고 VectorChord로 넘어간다고 합니다.

Postgres에서 벡터 저장 하시는 분들은 참고하세요.