BQ 이진 양자화
BQ 이진 양자화 (실전)
BQ(Binary Quantization) 는 벡터의 크기를 줄이는 벡터 압축 기법이에요. 컬렉션 생성 때 활성화하고 데이터를 넣으면 동작합니다. 특히 Flat 인덱스에서 검색 속도를 높이는 데 유용합니다.
상황부터 — 기본 압축 설정
v1.33부터 DEFAULT_QUANTIZATION 환경변수로 새 컬렉션의 기본 양자화를 정할 수 있어요. 기본은 미설정(압축 미적용)이며, 설정하면(예: 8-bit RQ) 새 컬렉션 전체에 적용됩니다. 컬렉션에 설정한 양자화는 끌 수 없고, 인덱스 타입 미지원이면 적용되지 않아요(PQ·SQ는 Flat 미지원).
BQ 활성화 (컬렉션 생성 시)
컬렉션 정의로 BQ를 켭니다.
from weaviate.classes.config import Configure
client.collections.create(
name="MyCollection",
vector_config=Configure.Vectors.text2vec_openai(
name="default",
quantizer=Configure.VectorIndex.Quantizer.bq(),
),
)
BQ 활성화 (기존 컬렉션)
v1.31부터 추가 — 컬렉션 생성 후에도 BQ 압축을 활성화할 수 있어요.
컬렉션 정의를 업데이트해 켭니다.
from weaviate.classes.config import Reconfigure
collection = client.collections.use("MyCollection")
collection.config.update(
vector_config=Reconfigure.Vectors.update(
name="default",
vector_index_config=Reconfigure.VectorIndex.flat(
quantizer=Reconfigure.VectorIndex.Quantizer.bq(
rescore_limit=20,
),
),
),
)
BQ 파라미터
vectorIndexConfig 아래의 BQ 파라미터:
| 파라미터 | 타입 | 기본값 | 설명 |
|---|---|---|---|
bq.enabled |
boolean | false | BQ 활성화. true면 BQ 압축 사용. (Python v4 클라이언트는 enabled를 안 씀 — 컬렉션 정의에서 quantizer로 설정) |
bq.rescoreLimit |
integer | -1 | rescore 전에 가져올 후보의 최소 수. 기본 -1은 Weaviate가 정함. (Flat 인덱스 전용) |
bq.cache |
boolean | false | 벡터를 메모리에 캐시할지. (Flat 인덱스 전용) |
vectorCacheMaxObjects |
integer | 1e12 | 메모리 캐시 최대 객체 수. 기본 1조(1e12). |
HNSW 인덱스 아래에선 BQ에
rescoreLimit설정이 없어요. HNSW에서 값을 넣어도 API가 수용하지만 조용히 무시되고, 컬렉션 정의를 다시 읽어도 나타나지 않습니다.
예시 — rescore와 캐시 설정:
from weaviate.classes.config import Configure
client.collections.create(
name="MyCollection",
vector_config=Configure.Vectors.text2vec_openai(
name="default",
quantizer=Configure.VectorIndex.Quantizer.bq(
rescore_limit=200,
cache=True,
),
vector_index_config=Configure.VectorIndex.flat(
vector_cache_max_objects=100000,
),
),
)
네임드 벡터·멀티벡터와 함께 쓰기
컬렉션은 여러 네임드 벡터(named vectors) 를 가질 수 있어요. 각 벡터는 자체 설정을 가지며, 압축도 벡터마다 독립적으로 활성화해야 합니다. 벡터마다 PQ·BQ·RQ·SQ 또는 무압축을 골라 쓸 수 있어요.
v1.30부터 — ColBERT·ColPali·ColQwen 같은 모델로 구현한 멀티벡터 임베딩(객체·쿼리를 여러 벡터로 표현)도 단일 벡터와 마찬가지로 PQ·BQ·RQ·SQ 또는 무압축을 지원합니다.
초기 검색 단계에서는 압축된 벡터로 효율을 얻고, MaxSim 연산을 계산할 때에는 비압축 벡터를 사용해 유사도 계산의 정밀도를 확보해요. 이렇게 검색 효율(압축)과 최종 점수 정확도(비압축)를 균형 있게 맞춥니다.
요약
- BQ는 벡터를 이진(1비트) 표현으로 줄여 메모리와 저장을 크게 절감.
- 컬렉션 생성 때(
quantizer=...bq()) 또는 기존 컬렉션 업데이트(v1.31+)로 활성화. rescoreLimit·cache는 Flat 인덱스 전용. HNSW에선 rescoreLimit이 조용히 무시됨.- 네임드 벡터·멀티벡터는 벡터마다 압축을 따로 설정.