Model reference · open weights
granite-vision-3.3-embedding is an open-weight embedding model from ibm-granite. AxForge deploys and operates it for you on dedicated EU-owned hardware — with the licence handled where one is required.
Available as managed deployment — configured and operated for you on dedicated EU hardware, quoted per deployment.
What it is
| Released by | IBM |
|---|---|
| Published under | ibm-granite |
| Type | Embedding models |
| Task | Embeddings |
| Parameters (lead) | 3.0B |
| Context | 128k tokens |
| Runs with | transformers |
| Based on | ibm-granite/granite-vision-3.3-2b |
| Released | 2025-06-03 |
| Popularity | 642 downloads / month |
| Licence | Open weights |
About
Model Summary: Granite-vision-3.3-2b-embedding is an efficient embedding model based on granite-vision-3.3-2b. This model is specifically designed for multimodal document retrieval, enabling queries on documents with tables, charts, infographics, and complex layouts. The model generates ColBERT-style multi-vector representations of pages. By removing the need for OCR-based text extractions, granite-vision-3.3-2b-embedding can help simplify and accelerate RAG pipelines.
Evaluations: We evaluated granite-vision-3.3-2b-embedding alongside other top colBERT style multi-modal embedding models in the 1B-4B parameter range using two benchmark: Vidore2 and Real-MM-RAG-Bench which aim to specifically address complex multimodal document retrieval tasks.
| Collection \ Model | ColPali-v1.3 | ColQwen2.5-v0.2 | ColNomic-3b | ColSmolvlm-v0.1 | granite-vision-3.3-2b-embedding |
|---|---|---|---|---|---|
| ESG Restaurant Human | 51.1 | 68.4 | 65.8 | 62.4 | 65.3 |
| Economics Macro Multilingual | 49.9 | 56.5 | 55.4 | 47.4 | 51.2 |
| MIT Biomedical | 59.7 | 63.6 | 63.5 | 58.1 | 61.5 |
| ESG Restaurant Synthetic | 57.0 | 57.4 | 56.6 | 51.1 | 56.6 |
| ESG Restaurant Synthetic Multilingual | 55.7 | 57.4 | 57.2 | 47.6 | 55.7 |
| MIT Biomedical Multilingual | 56.5 | 61.1 | 62.5 | 50.5 | 55.5 |
| Economics Macro | 51.6 | 59.8 | 60.2 | 60.9 | 58.3 |
| Avg (ViDoRe2) | 54.5 | 60.6 | 60.2 | 54.0 | 57.7 |
| Collection \ Model | ColPali-v1.3 | ColQwen2.5-v0.2 | ColNomic-3b | ColSmolvlm-v0.1 | granite-vision-3.3-2b-embedding |
|---|---|---|---|---|---|
| FinReport | 55 | 66 | 78 | 65 | 73 |
| FinSlides | 68 | 79 | 81 | 55 | 79 |
| TechReport | 78 | 86 | 88 | 83 | 87 |
| TechSlides | 90 | 93 | 92 | 91 | 93 |
| Avg (REAL-MM-RAG) | 73 | 81 | 85 | 74 | 83 |
Intended Use: The model is intended to be used in enterprise applications that involve retrieval of visual and text data. In particular, the model is well-suited for multi-modal RAG systems where the knowledge base is composed of complex enterprise documents, such as reports, slides, images, canned doscuments, manuals and more. The model can be used as a standalone retriever, or alongside a text-based retriever.
pip install -q torch torchvision torchaudio
pip install transformers==4.50
Then run the code:
from io import BytesIO
import requests
import torch
from PIL import Image
from transformers import AutoProcessor, AutoModel
from transformers.utils.import_utils import is_flash_attn_2_available
device = "cuda" if torch.cuda.is_available() else "cpu"
model_name = "ibm-granite/granite-vision-3.3-2b-embedding"
model = AutoModel.from_pretrained(
model_name,
trust_remote_code=True,
torch_dtype=torch.float16,
device_map=device,
attn_implementation="flash_attention_2" if is_flash_attn_2_available() else None
).eval()
processor = AutoProcessor.from_pretrained(model_name, trust_remote_code=True)
# ─────────────────────────────────────────────
# Inputs: Image + Text
# ─────────────────────────────────────────────
image_url = "https://huggingface.co/datasets/mishig/sample_images/resolve/main/tiger.jpg"
print("\nFetching image...")
image = Image.open(BytesIO(requests.get(image_url).content)).convert("RGB")
text = "A photo of a tiger"
print(f"Image and text inputs ready.")
# Process both inputs
print("Processing inputs...")
image_inputs = processor.process_images([image])
text_inputs = processor.process_queries([text])
# Move to correct device
image_inputs = {k: v.to(device) for k, v in image_inputs.items()}
text_inputs = {k: v.to(device) for k, v in text_inputs.items()}
# ─────────────────────────────────────────────
# Run Inference
# ─────────────────────────────────────────────
with torch.no_grad():
print("🔍 Getting image embedding...")
img_emb = model(**image_inputs)
print("✍️ Getting text embedding...")
txt_emb = model(**text_inputs)
# ─────────────────────────────────────────────
# Score the similarity
# ─────────────────────────────────────────────
print("Scoring similarity...")
similarity = processor.score(txt_emb, img_emb, batch_size=1, device=device)
print("\n" + "=" * 50)
print(f"📊 Similarity between From the published model card. Full card on the HuggingFace links in the sidebar.
Using it via the API
Once AxForge deploys granite-vision-3-3-embedding for you, it answers on the OpenAI-compatible API — the same base URL and keys as every other model. (granite-vision-3-3-embedding below is illustrative; you get the exact model name on deployment.)
$ curl -sS https://api.axforge.ai/v1/embeddings \
-H "Authorization: Bearer $AXFORGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"granite-vision-3-3-embedding","input":"text to embed"}'
Create an account — your API key is available in the console. 3M free tokens every 30 days with every new account.