VectorChord - 40만개 벡터를 PostgreSQL에 $1로 저장하기
(blog.pgvecto.rs)- 대규모 벡터를 비용 효율적으로 관리하기 위한 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에서 벡터 저장 하시는 분들은 참고하세요.