diff --git a/qdrant-landing/content/course/multi-vector-search/module-3/quantization-techniques.md b/qdrant-landing/content/course/multi-vector-search/module-3/quantization-techniques.md index d3360f7cb..ce97a678e 100644 --- a/qdrant-landing/content/course/multi-vector-search/module-3/quantization-techniques.md +++ b/qdrant-landing/content/course/multi-vector-search/module-3/quantization-techniques.md @@ -8,7 +8,7 @@ weight: 2 # Vector Quantization Techniques -Vector quantization compresses vectors by reducing the precision of each component. Qdrant supports several quantization methods that can reduce memory usage by 4-32x with minimal quality loss. +Vector quantization compresses vectors by reducing the precision of each component. Qdrant supports several quantization methods that can reduce memory usage by 4-64x, sometimes with minimal quality loss. Choosing the right quantization method depends on your quality requirements and memory constraints. @@ -26,7 +26,7 @@ Choosing the right quantization method depends on your quality requirements and --- -**Follow along in Colab:** +**Follow along in Colab:** Open In Colab @@ -37,7 +37,7 @@ Choosing the right quantization method depends on your quality requirements and By default, embedding models produce vectors with **float32 precision** - each component uses 32 bits (4 bytes) of memory. For single-vector embeddings, this is manageable. But multi-vector models like **ColModernVBERT** change the equation dramatically. Consider a typical ColPali scenario using **ColModernVBERT**: -- **1024 vectors per document** (one per visual patch) +- **~1024 vectors per document** (one per visual patch) - **128 dimensions per vector** (model embedding size) - **float32 precision** (4 bytes per component) @@ -170,15 +170,53 @@ One of Qdrant's powerful features: **you can enable quantization on an existing ```python -# TODO: implement the code snippet -# Create collection with scalar quantization for ColModernVBERT +from qdrant_client import QdrantClient, models + +client = QdrantClient("http://localhost:6333") + +client.create_collection( + collection_name="colpali-scalar", + vectors_config={ + "colmodernvbert": models.VectorParams( + size=128, + distance=models.Distance.DOT, + multivector_config=models.MultiVectorConfig( + comparator=models.MultiVectorComparator.MAX_SIM, + ), + hnsw_config=models.HnswConfigDiff(m=0), # Disable HNSW for multi-vector + ), + }, + quantization_config=models.ScalarQuantization( + scalar=models.ScalarQuantizationConfig( + type=models.ScalarType.INT8, + quantile=0.99, # Exclude 1% outliers for better scaling + always_ram=True, + ), + ), +) ``` Enabling a different type of quantization requires setting a different quantization configuration. ```python -# TODO: implement the code snippet -# Configure binary quantization for ColModernVBERT +client.create_collection( + collection_name="colpali-binary", + vectors_config={ + "colmodernvbert": models.VectorParams( + size=128, + distance=models.Distance.DOT, + multivector_config=models.MultiVectorConfig( + comparator=models.MultiVectorComparator.MAX_SIM, + ), + hnsw_config=models.HnswConfigDiff(m=0), + ), + }, + quantization_config=models.BinaryQuantization( + binary=models.BinaryQuantizationConfig( + always_ram=True, + ), + ), +) ```