VAGOsolutions/SauerkrautLM-ColQwen3-1.7b-Turbo-v0.1

Model

3

stars

5

commits

4

repos using this model

2

linked in READMEs

Aug 27, 2026

updated

colpali
colqwen3
conversational
document-retrieval
efficient
image-text-to-text
late-interaction
mteb
multi-vector
pruned
qwen3-vl
safetensors
sauerkrautlm-colpali
sentence-transformers
turbo
vidore
vision-language-model
visual-retrieval
Browse cluster: Multilingual Large Language Models β†’

README

SauerkrautLM-ColQwen3-1.7b-Turbo-v0.1

VAGO Solutions Logo

⚑ Turbo Edition | 23% Smaller, 88.89 ViDoRe v1

SauerkrautLM-ColQwen3-1.7b-Turbo-v0.1 is a pruned and optimized model created by applying structured pruning to Qwen3-VL-2B. Despite being 23% smaller, it achieves 88.89 NDCG@5 on ViDoRe v1 - still beating ColPali-v1.3 (84.75) by a large margin!

ViDoRe v1 Benchmark - 128-dim Models

🎯 Why Visual Document Retrieval?

Traditional OCR-based retrieval loses layout, tables, and visual context. Our visual approach:

  • βœ… No OCR errors - Direct visual understanding
  • βœ… Layout-aware - Understands tables, forms, charts
  • βœ… End-to-end - Single model, no pipeline complexity

✨ What Makes This "Turbo"?

Aspect2B Model1.7B TurboReduction
Parameters2.2B1.7B-23%
VRAM (bf16)~4.4 GB~3.4 GB-23%
ViDoRe v190.2488.89-1.35 pts
Inference SpeedBaseline~20% faster⚑

πŸ† Benchmark Results

BenchmarkScoreRank (128-dim)
ViDoRe v188.89#10
MTEB v1+v277.94#10
ViDoRe v348.76#7

Medium Category Comparison (1-3B, 128-dim)

ModelParamsDimViDoRe v1MTEB v1+v2ViDoRe v3
SauerkrautLM-ColQwen3-2b-v0.1 ⭐2.2B12890.2481.0254.32
colqwen2.5-v0.22.2B12889.5481.1252.44
colqwen2-v1.02.2B12889.2379.7444.18
SauerkrautLM-ColQwen3-1.7b-Turbo-v0.11.7B12888.8977.9448.76

vs. ColPali Baseline

ModelParamsViDoRe v1
ColQwen3-1.7b-Turbo1.7B88.89
colpali-v1.32.9B84.75
colpali-v1.22.9B83.15
colpali-v1.12.9B81.61

Turbo model beats ColPali-v1.3 by +4.14 points with 42% fewer parameters!

Detailed Benchmark Results

πŸ“Š ViDoRe v1 (NDCG@5) - Click to expand
TaskScore
ArxivQA91.09
DocVQA60.98
InfoVQA92.08
ShiftProject87.76
SyntheticDocQA-AI98.16
SyntheticDocQA-Energy97.49
SyntheticDocQA-Gov94.88
SyntheticDocQA-Health98.26
TabFQuAD87.03
TATDQA81.19
Average88.89
πŸ“Š MTEB v1+v2 (NDCG@5) - Click to expand

ViDoRe v1 Tasks:

TaskScore
ArxivQA91.09
DocVQA60.98
InfoVQA92.08
ShiftProject87.76
SyntheticDocQA-AI98.16
SyntheticDocQA-Energy97.49
SyntheticDocQA-Gov94.88
SyntheticDocQA-Health98.26
TabFQuAD87.03
TATDQA81.19

ViDoRe v2 Tasks (Multilingual):

TaskScore
ViDoRe-v2-2BioMed53.92
ViDoRe-v2-2Econ47.85
ViDoRe-v2-2ESG-HL57.23
ViDoRe-v2-2ESG43.27
Combined Average77.94
πŸ“Š ViDoRe v3 (NDCG@10) - Click to expand
TaskScore
ViDoRe-v3-CS67.14
ViDoRe-v3-Energy56.48
ViDoRe-v3-FinanceEn46.17
ViDoRe-v3-FinanceFr33.73
ViDoRe-v3-HR46.66
ViDoRe-v3-Industry39.44
ViDoRe-v3-Pharma55.31
ViDoRe-v3-Physics45.14
Average48.76

πŸ“‹ Summary Tables

128-dim Models Comparison

128-dim Models Summary

Comparison vs High-dim Models

High-dim Comparison

βš™οΈ Pruning Methodology

Structured Pruning

  1. Layer Pruning: Removed less important transformer layers based on gradient-based importance scoring
  2. Intermediate Size Reduction: Reduced FFN intermediate dimensions
  3. Result: 23% parameter reduction (2.2B β†’ 1.7B)

Recovery Training with mMARCO

After pruning, the model underwent recovery training:

Pruned Model β†’ mMARCO Pre-training β†’ Fine-tuning β†’ Final Model

The mMARCO pre-training was crucial to "heal" the model after pruning.

Model Details

PropertyValue
Original ModelQwen3-VL-2B
Parameters1.7B (-23%)
Embedding Dimension128
VRAM (bfloat16)~3.4 GB
Max Context Length262,144 tokens
Pruning MethodLayer + Intermediate Size
Recovery DatasetmMARCO
LicenseApache 2.0

Training

Hardware & Configuration

SettingValue
GPUs4x NVIDIA RTX 6000 Ada (48GB)
Effective Batch Size256
Precisionbfloat16

Training Pipeline

  1. Phase 1: Structured Pruning (gradient-based importance)
  2. Phase 2: mMARCO Recovery Training
  3. Phase 3: Retrieval Fine-tuning on standard datasets

Installation & Usage

Sentence Transformers

This model can be used with Sentence Transformers as a multi-vector (ColBERT-style late interaction) retriever via the MultiVectorEncoder:

pip install "sentence-transformers[image]>=6.0.0"
from sentence_transformers import MultiVectorEncoder

model = MultiVectorEncoder("VAGOsolutions/SauerkrautLM-ColQwen3-1.7b-Turbo-v0.1")

queries = [
    "What is the variable represented on the y-axis of the graph?",
    "Total outlay is maximum in which year?",
]
images = [
    "https://huggingface.co/datasets/sentence-transformers/example-documents/resolve/main/doc1.jpg",
    "https://huggingface.co/datasets/sentence-transformers/example-documents/resolve/main/doc2.jpg",
]

query_embeddings = model.encode_query(queries)
image_embeddings = model.encode_document(images)
print(query_embeddings[0].shape, image_embeddings[0].shape)
# torch.Size([25, 128]) torch.Size([1251, 128])

# Diagonal should have higher scores
scores = model.similarity(query_embeddings, image_embeddings)
print(scores)
# tensor([[14.5811, 11.6055],
#         [ 7.1665, 14.7393]], device='cuda:0')

SauerkrautLM ColPali

⚠️ Important: Install our package first before loading the model:

pip install git+https://github.com/VAGOsolutions/sauerkrautlm-colpali
import torch
from PIL import Image
from sauerkrautlm_colpali.models import ColQwen3, ColQwen3Processor

model_name = "VAGOsolutions/SauerkrautLM-ColQwen3-1.7b-Turbo-v0.1"

model = ColQwen3.from_pretrained(
    model_name,
    torch_dtype=torch.bfloat16,
    attn_implementation="flash_attention_2",
    device_map="cuda:0",
).eval()

processor = ColQwen3Processor.from_pretrained(model_name)

images = [Image.open("document.png")]
queries = ["What is the main topic?"]

batch_images = processor.process_images(images).to(model.device)
batch_queries = processor.process_queries(queries).to(model.device)

with torch.no_grad():
    image_embeddings = model(**batch_images)
    query_embeddings = model(**batch_queries)

scores = processor.score(query_embeddings, image_embeddings)

When to Use Turbo

βœ… Choose Turbo when:

  • Running on limited GPU memory (< 4GB available)
  • Need faster inference
  • Deploying on edge devices
  • Cost optimization is priority

❌ Choose 2B instead when:

  • Maximum accuracy required
  • Memory is not a constraint

πŸ“Š Additional Benchmark Visualizations

MTEB v1+v2 Benchmark (128-dim Models)

MTEB v1+v2 Benchmark - 128-dim Models

ViDoRe v3 Benchmark (128-dim Models)

ViDoRe v3 Benchmark - 128-dim Models

Our Models vs High-dim Models

ViDoRe v1 - Our Models vs High-dim

Citation

@misc{sauerkrautlm-colpali-2025,
  title={SauerkrautLM-ColPali: Multi-Vector Vision Retrieval Models},
  author={David Golchinfar},
  organization={VAGO Solutions},
  year={2025},
  url={https://github.com/VAGOsolutions/sauerkrautlm-colpali}
}

Contact

Contributors

DavidGF

4 commits

tomaarsen

1 commits

VAGOsolutions/SauerkrautLM-ColQwen3-1.7b-Turbo-v0.1

Model

3

stars

5

commits

4

repos using this model

2

linked in READMEs

Aug 27, 2026

updated

colpali
colqwen3
conversational
document-retrieval
efficient
image-text-to-text
late-interaction
mteb
multi-vector
pruned
qwen3-vl
safetensors
sauerkrautlm-colpali
sentence-transformers
turbo
vidore
vision-language-model
visual-retrieval
Browse cluster: Multilingual Large Language Models β†’

README

SauerkrautLM-ColQwen3-1.7b-Turbo-v0.1

VAGO Solutions Logo

⚑ Turbo Edition | 23% Smaller, 88.89 ViDoRe v1

SauerkrautLM-ColQwen3-1.7b-Turbo-v0.1 is a pruned and optimized model created by applying structured pruning to Qwen3-VL-2B. Despite being 23% smaller, it achieves 88.89 NDCG@5 on ViDoRe v1 - still beating ColPali-v1.3 (84.75) by a large margin!

ViDoRe v1 Benchmark - 128-dim Models

🎯 Why Visual Document Retrieval?

Traditional OCR-based retrieval loses layout, tables, and visual context. Our visual approach:

  • βœ… No OCR errors - Direct visual understanding
  • βœ… Layout-aware - Understands tables, forms, charts
  • βœ… End-to-end - Single model, no pipeline complexity

✨ What Makes This "Turbo"?

Aspect2B Model1.7B TurboReduction
Parameters2.2B1.7B-23%
VRAM (bf16)~4.4 GB~3.4 GB-23%
ViDoRe v190.2488.89-1.35 pts
Inference SpeedBaseline~20% faster⚑

πŸ† Benchmark Results

BenchmarkScoreRank (128-dim)
ViDoRe v188.89#10
MTEB v1+v277.94#10
ViDoRe v348.76#7

Medium Category Comparison (1-3B, 128-dim)

ModelParamsDimViDoRe v1MTEB v1+v2ViDoRe v3
SauerkrautLM-ColQwen3-2b-v0.1 ⭐2.2B12890.2481.0254.32
colqwen2.5-v0.22.2B12889.5481.1252.44
colqwen2-v1.02.2B12889.2379.7444.18
SauerkrautLM-ColQwen3-1.7b-Turbo-v0.11.7B12888.8977.9448.76

vs. ColPali Baseline

ModelParamsViDoRe v1
ColQwen3-1.7b-Turbo1.7B88.89
colpali-v1.32.9B84.75
colpali-v1.22.9B83.15
colpali-v1.12.9B81.61

Turbo model beats ColPali-v1.3 by +4.14 points with 42% fewer parameters!

Detailed Benchmark Results

πŸ“Š ViDoRe v1 (NDCG@5) - Click to expand
TaskScore
ArxivQA91.09
DocVQA60.98
InfoVQA92.08
ShiftProject87.76
SyntheticDocQA-AI98.16
SyntheticDocQA-Energy97.49
SyntheticDocQA-Gov94.88
SyntheticDocQA-Health98.26
TabFQuAD87.03
TATDQA81.19
Average88.89
πŸ“Š MTEB v1+v2 (NDCG@5) - Click to expand

ViDoRe v1 Tasks:

TaskScore
ArxivQA91.09
DocVQA60.98
InfoVQA92.08
ShiftProject87.76
SyntheticDocQA-AI98.16
SyntheticDocQA-Energy97.49
SyntheticDocQA-Gov94.88
SyntheticDocQA-Health98.26
TabFQuAD87.03
TATDQA81.19

ViDoRe v2 Tasks (Multilingual):

TaskScore
ViDoRe-v2-2BioMed53.92
ViDoRe-v2-2Econ47.85
ViDoRe-v2-2ESG-HL57.23
ViDoRe-v2-2ESG43.27
Combined Average77.94
πŸ“Š ViDoRe v3 (NDCG@10) - Click to expand
TaskScore
ViDoRe-v3-CS67.14
ViDoRe-v3-Energy56.48
ViDoRe-v3-FinanceEn46.17
ViDoRe-v3-FinanceFr33.73
ViDoRe-v3-HR46.66
ViDoRe-v3-Industry39.44
ViDoRe-v3-Pharma55.31
ViDoRe-v3-Physics45.14
Average48.76

πŸ“‹ Summary Tables

128-dim Models Comparison

128-dim Models Summary

Comparison vs High-dim Models

High-dim Comparison

βš™οΈ Pruning Methodology

Structured Pruning

  1. Layer Pruning: Removed less important transformer layers based on gradient-based importance scoring
  2. Intermediate Size Reduction: Reduced FFN intermediate dimensions
  3. Result: 23% parameter reduction (2.2B β†’ 1.7B)

Recovery Training with mMARCO

After pruning, the model underwent recovery training:

Pruned Model β†’ mMARCO Pre-training β†’ Fine-tuning β†’ Final Model

The mMARCO pre-training was crucial to "heal" the model after pruning.

Model Details

PropertyValue
Original ModelQwen3-VL-2B
Parameters1.7B (-23%)
Embedding Dimension128
VRAM (bfloat16)~3.4 GB
Max Context Length262,144 tokens
Pruning MethodLayer + Intermediate Size
Recovery DatasetmMARCO
LicenseApache 2.0

Training

Hardware & Configuration

SettingValue
GPUs4x NVIDIA RTX 6000 Ada (48GB)
Effective Batch Size256
Precisionbfloat16

Training Pipeline

  1. Phase 1: Structured Pruning (gradient-based importance)
  2. Phase 2: mMARCO Recovery Training
  3. Phase 3: Retrieval Fine-tuning on standard datasets

Installation & Usage

Sentence Transformers

This model can be used with Sentence Transformers as a multi-vector (ColBERT-style late interaction) retriever via the MultiVectorEncoder:

pip install "sentence-transformers[image]>=6.0.0"
from sentence_transformers import MultiVectorEncoder

model = MultiVectorEncoder("VAGOsolutions/SauerkrautLM-ColQwen3-1.7b-Turbo-v0.1")

queries = [
    "What is the variable represented on the y-axis of the graph?",
    "Total outlay is maximum in which year?",
]
images = [
    "https://huggingface.co/datasets/sentence-transformers/example-documents/resolve/main/doc1.jpg",
    "https://huggingface.co/datasets/sentence-transformers/example-documents/resolve/main/doc2.jpg",
]

query_embeddings = model.encode_query(queries)
image_embeddings = model.encode_document(images)
print(query_embeddings[0].shape, image_embeddings[0].shape)
# torch.Size([25, 128]) torch.Size([1251, 128])

# Diagonal should have higher scores
scores = model.similarity(query_embeddings, image_embeddings)
print(scores)
# tensor([[14.5811, 11.6055],
#         [ 7.1665, 14.7393]], device='cuda:0')

SauerkrautLM ColPali

⚠️ Important: Install our package first before loading the model:

pip install git+https://github.com/VAGOsolutions/sauerkrautlm-colpali
import torch
from PIL import Image
from sauerkrautlm_colpali.models import ColQwen3, ColQwen3Processor

model_name = "VAGOsolutions/SauerkrautLM-ColQwen3-1.7b-Turbo-v0.1"

model = ColQwen3.from_pretrained(
    model_name,
    torch_dtype=torch.bfloat16,
    attn_implementation="flash_attention_2",
    device_map="cuda:0",
).eval()

processor = ColQwen3Processor.from_pretrained(model_name)

images = [Image.open("document.png")]
queries = ["What is the main topic?"]

batch_images = processor.process_images(images).to(model.device)
batch_queries = processor.process_queries(queries).to(model.device)

with torch.no_grad():
    image_embeddings = model(**batch_images)
    query_embeddings = model(**batch_queries)

scores = processor.score(query_embeddings, image_embeddings)

When to Use Turbo

βœ… Choose Turbo when:

  • Running on limited GPU memory (< 4GB available)
  • Need faster inference
  • Deploying on edge devices
  • Cost optimization is priority

❌ Choose 2B instead when:

  • Maximum accuracy required
  • Memory is not a constraint

πŸ“Š Additional Benchmark Visualizations

MTEB v1+v2 Benchmark (128-dim Models)

MTEB v1+v2 Benchmark - 128-dim Models

ViDoRe v3 Benchmark (128-dim Models)

ViDoRe v3 Benchmark - 128-dim Models

Our Models vs High-dim Models

ViDoRe v1 - Our Models vs High-dim

Citation

@misc{sauerkrautlm-colpali-2025,
  title={SauerkrautLM-ColPali: Multi-Vector Vision Retrieval Models},
  author={David Golchinfar},
  organization={VAGO Solutions},
  year={2025},
  url={https://github.com/VAGOsolutions/sauerkrautlm-colpali}
}

Contact

Contributors

DavidGF

4 commits

tomaarsen

1 commits