Quantization¶
Quantization은 인덱스의 메모리 사용량과 검색 비용을 줄이면서, 허용 가능한 수준의 정확도를 유지하는 기법입니다.
AkasicDB는 세 가지 주요 방식을 지원합니다.
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) |
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) |
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]
$$);
- 옵션 설명
이 양자화 방식은 현재 사용자 설정 파라미터가 없습니다.
권장 워크플로우¶
-
Scalar Quantization 먼저 적용
-
정확도 손실이 작고 설정이 간단
-
추가 메모리 절감이 필요할 때
-
Product Quantization 또는 RaBitQ Quantization으로 전환
ratio및bits을 조정하며 성능·정확도 실험-
차원 축소(예: PCA)와 병행
-
인덱싱 전에 차원을 낮추면, Quantization 효율이 더욱 향상됩니다
이제 Quantization을 이용해 인덱스 크기를 관리하고, 대규모 벡터 워크로드에서도 효율적인 검색을 구현해 보세요!