Quantization
Quantization은 인덱스의 메모리 사용량과 검색 비용을 줄이면서, 허용 가능한 수준의 정확도를 유지하는 기법입니다.
AkasicDB는 세 가지 주요 방식을 지원합니다.
1. Scalar Quantization
- 개념
각 벡터 요소를 32비트 실수에서 8비트 부호 없는 정수(uint8)로 매핑 - 장점
- 최소한의 정확도 손실
- 메모리 사용량 대폭 절감
- 특히 HNSW 인덱스와 잘 어울림
- 예제
CREATE INDEX ON items
USING vectoron (embedding vector_l2_ops)
WITH (options = "[indexing.hnsw.quantization.scalar]");
-
옵션 설명
파라미터 설명 quantization.scalar.bits각 차원의 양자화된 값의 비트 수 지정 (예: 8)
2. Product Quantization
-
개념 원본 벡터를 여러 개의 서브스페이스로 분할하여, 각 부분에 대해서 코드북(codebook)을 학습한 뒤 인덱스 레이블로 대체
-
장점
- 고차원·대규모 데이터셋에 효과적
- 저장 공간과 메모리 절감 폭이 큼
-
예제
CREATE INDEX ON items USING vectoron (embedding vector_l2_ops) WITH (options = $$ [indexing.ivf] quantization.product.ratio = 8 $$); -
옵션 설명
파라미터 설명 quantization.product.ratio벡터가 분할되는 각 서브스페이스의 차원 크기 지정 (예: 2)quantization.product.bits각 서브스페이스 내 클러스터 중심의 비트 수 지정 (예: 8)
3. RabitQ Quantization
-
개념 Random Orthogonal Transformation을 통해 벡터를 Bi-valued Codebook에 투영하여 Inner Product의 Unbiased Estimator을 생성 및 인덱스로 사용
- 장점
- Theoretical Error Bound 보장
- Bitwise Operations 및 SIMD 기반의 고속 연산을 통한 Accuracy-Efficiency Trade-off 우수.
- 단일 벡터 검색 시 Bitwise Operations 덕분에 뛰어난 성능 제공.
- 예제
CREATE INDEX ON items
USING vectoron (embedding vector_l2_ops)
WITH (options = $$
[indexing.hnsw]
[indexing.hnsw.quantization.rabitq]
$$);
-
옵션 설명
이 양자화 방식은 현재 사용자 설정 파라미터가 없습니다.
4. 권장 워크플로우
-
Scalar Quantization 먼저 적용
- 정확도 손실이 작고 설정이 간단
-
추가 메모리 절감이 필요할 때
- Product Quantization 또는 RaBitQ Quantization으로 전환
ratio및bits을 조정하며 성능·정확도 실험
-
차원 축소(예: PCA)와 병행
- 인덱싱 전에 차원을 낮추면, Quantization 효율이 더욱 향상됩니다
이제 Quantization을 이용해 인덱스 크기를 관리하고, 대규모 벡터 워크로드에서도 효율적인 검색을 구현해 보세요!