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. 권장 워크플로우

  1. Scalar Quantization 먼저 적용

    • 정확도 손실이 작고 설정이 간단
  2. 추가 메모리 절감이 필요할 때

    • Product Quantization 또는 RaBitQ Quantization으로 전환
    • ratiobits을 조정하며 성능·정확도 실험
  3. 차원 축소(예: PCA)와 병행

    • 인덱싱 전에 차원을 낮추면, Quantization 효율이 더욱 향상됩니다

이제 Quantization을 이용해 인덱스 크기를 관리하고, 대규모 벡터 워크로드에서도 효율적인 검색을 구현해 보세요!


This site uses Just the Docs, a documentation theme for Jekyll.