

Wir veröffentlichen jina-vlm, ein Vision-Language-Modell mit 2,4 Milliarden Parametern, das im Bereich des multilingualen visuellen Frage-Antwortens unter den offenen VLMs im 2B-Bereich den neuesten Stand der Technik erreicht. Durch die Kombination eines SigLIP2-Vision-Encoders mit einem Qwen3-Language-Backbone über einen Attention-Pooling-Konnektor bietet jina-vlm eine starke Leistung in 29 Sprachen und ist gleichzeitig effizient genug, um auf Consumer-Hardware zu laufen.
| Model | Size | VQA Avg | MMMB | Multi. MMB | DocVQA | OCRBench |
|---|---|---|---|---|---|---|
| jina-vlm | 2.4B | 72.3 | 78.8 | 74.3 | 90.6 | 778 |
| Qwen2-VL-2B | 2.1B | 66.4 | 71.3 | 69.4 | 89.2 | 809 |
| Qwen3-VL-2B | 2.8B | 71.6 | 75.0 | 72.3 | 92.3 | 858 |
| InternVL3-2B | 2.2B | 69.2 | 73.6 | 71.9 | 87.4 | 835 |
| InternVL3.5-2B | 2.2B | 71.6 | 74.6 | 70.9 | 88.5 | 836 |





tagArchitektur
Zwei Herausforderungen haben den praktischen VLM-Einsatz eingeschränkt: Multilinguale Fähigkeiten verschlechtern sich oft während der Visionsanpassung, und hochwertige VLMs bleiben rechenintensiv. jina-vlm begegnet beiden Herausforderungen durch sorgfältige architektonische Entscheidungen – unser Attention-Pooling-Konnektor reduziert visuelle Tokens um das 4-fache bei minimaler Leistungseinbuße – und ein Trainingsrezept, das explizit die multilingualen Fähigkeiten bewahrt.
Die wichtigste architektonische Innovation ist unser Vision-Language-Konnektor. Anstatt alle 729 visuellen Tokens pro Kachel an das Sprachmodell weiterzugeben, wenden wir 2×2-Attention-Pooling an, das dies auf 182 Tokens reduziert – eine 4×-Reduktion mit minimalem Informationsverlust. Der Konnektor funktioniert wie folgt:
- Multi-Layer-Feature-Fusion: Wir verketten Features aus den ViT-Layern 18 und 24 (drittletzter und neuntletzter), um sowohl feinkörnige räumliche Details als auch High-Level-Semantik zu erfassen.
- Attention-Pooling: Für jede 2×2-Patch-Nachbarschaft berechnen wir eine Abfrage als Mittelwert der Nachbarschafts-Features und wenden dann Cross-Attention an, um eine einzelne gepoolte Darstellung zu erzeugen.
- SwiGLU-Projektion: Die gepoolten Features werden über eine Gated Linear Unit auf die Sprachmodell-Dimension projiziert.
Dieser Effizienzgewinn wird unten beschrieben:
| Metric | No Pooling | With Pooling | Reduction |
|---|---|---|---|
| Visual tokens (12 tiles + thumbnail) | 9,477 | 2,366 | 4.0× |
| LLM prefill FLOPs | 27.2 TFLOPs | 6.9 TFLOPs | 3.9× |
| KV-cache memory | 2.12 GB | 0.53 GB | 4.0× |
Da das ViT jede Kachel unabhängig vom Pooling identisch verarbeitet, gelten diese Einsparungen ausschließlich für das Sprachmodell, das die dominierenden Kosten während der Inferenz verursacht.
tagTrainingsverfahren
Ein häufiges Fehlermuster beim VLM-Training ist das katastrophale Vergessen: Das Sprachmodell verliert seine reinen Textfähigkeiten, während es sich an visuelle Eingaben anpasst. Dies ist besonders ausgeprägt bei multilingualen Modellen, bei denen die Visionsanpassung die Leistung in nicht-englischen Sprachen beeinträchtigen kann.
Wir begegnen dem mit einer zweistufigen Trainingspipeline mit expliziten multilingualen Daten und reiner Textkonservierung.
Stufe 1: Alignment-Training
Die erste Stufe konzentriert sich auf die sprachübergreifende semantische Verankerung mithilfe von Caption-Datensätzen, die verschiedene visuelle Bereiche abdecken: natürliche Szenen, Dokumente, Infografiken und Diagramme. Entscheidend ist, dass wir 15 % reine Textdaten einbeziehen, um das Sprachverständnis des Backbones aufrechtzuerhalten. Der Konnektor verwendet eine höhere Lernrate (2e-4) und ein kürzeres Warmup als Encoder und Decoder, sodass er sich schnell anpassen kann, während sich die vortrainierten Komponenten allmählich ändern.
Stufe 2: Instruction Fine-tuning
Die zweite Phase trainiert das Befolgen von Anweisungen für VQA- und Schlussfolgerungsaufgaben. Wir kombinieren öffentliche Datensätze, die akademische VQA, Dokumentenverständnis, OCR, Mathematik und Schlussfolgerungen abdecken, mit reinen Text-Anweisungsdaten, um die Sprachfähigkeiten zu erhalten.
Die kombinierten Daten umfassen ungefähr 5 Millionen multimodale Beispiele und 12 Milliarden Text-Tokens in 29 Sprachen, wobei etwa die Hälfte auf Englisch und der Rest auf Chinesisch, Arabisch, Deutsch, Spanisch, Französisch, Italienisch, Japanisch, Koreanisch, Portugiesisch, Russisch, Türkisch, Vietnamesisch, Thailändisch, Indonesisch, Hindi, Bengalisch und anderen Sprachen vorliegt.
tagErste Schritte
tagÜber die Jina API
Wir stellen eine OpenAI-kompatible API unter https://api-beta-vlm.jina.ai bereit.
tagBild von URL
| Format | Beispiel |
|---|---|
| HTTP/HTTPS-URL | https://example.com/image.jpg |
| Base64-Daten-URI | data:image/jpeg;base64,/9j/4AAQ... |
curl https://api-beta-vlm.jina.ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $JINA_API_KEY" \
-d '{
"model": "jina-vlm",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "Describe this image"},
{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
]
}]
}'
Lokales Bild (Base64)
curl https://api-beta-vlm.jina.ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $JINA_API_KEY" \
-d '{
"model": "jina-vlm",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "What is in this image?"},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,'$(base64 -i image.jpg)'"}}
]
}]
}'
Reine Textabfrage
curl https://api-beta-vlm.jina.ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $JINA_API_KEY" \
-d '{
"model": "jina-vlm",
"messages": [{"role": "user", "content": "What is the capital of France?"}]
}'
Streaming-Antwort
Fügen Sie "stream": true hinzu, um Tokens zu empfangen, während sie generiert werden:
curl https://api-beta-vlm.jina.ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $JINA_API_KEY" \
-d '{
"model": "jina-vlm",
"stream": true,
"messages": [{"role": "user", "content": "Write a haiku about coding"}]
}'
Wenn der Dienst kalt startet, erhalten Sie:
{
"error": {
"message": "Model is loading, please retry in 30-60 seconds. Cold start takes ~30s after the service scales up.",
"code": 503
}
}
Wiederholen Sie einfach Ihre Anfrage, nachdem Sie gewartet haben.
tagÜber die CLI
Das HuggingFace-Repository enthält ein infer.py-Skript für schnelle Experimente:
# Single image
python infer.py -i image.jpg -p "What's in this image?"
# Streaming output
python infer.py -i image.jpg -p "Describe this image" --stream
# Multiple images
python infer.py -i img1.jpg -i img2.jpg -p "Compare these images"
# Text-only
python infer.py -p "What is the capital of France?"tagÜber Transformers
from transformers import AutoModelForCausalLM, AutoProcessor
import torch
from PIL import Image
# Load model and processor
model = AutoModelForCausalLM.from_pretrained(
"jinaai/jina-vlm",
torch_dtype=torch.bfloat16,
trust_remote_code=True,
device_map="auto"
)
processor = AutoProcessor.from_pretrained(
"jinaai/jina-vlm",
trust_remote_code=True
)
# Load an image
image = Image.open("document.png")
# Create the conversation
messages = [
{
"role": "user",
"content": [
{"type": "image", "image": image},
{"type": "text", "text": "What is the main topic of this document?"}
]
}
]
# Process and generate
inputs = processor.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt"
).to(model.device)
outputs = model.generate(**inputs, max_new_tokens=256, do_sample=False)
response = processor.decode(outputs[0], skip_special_tokens=True)
print(response)tagFazit
jina-vlm zeigt, dass kleine VLMs durch sorgfältige Architektur- und Trainingsentscheidungen ein starkes, sprachübergreifendes visuelles Verständnis erreichen können. Der Attention-Pooling-Connector bietet eine 4-fache Token-Reduktion mit minimalen Auswirkungen auf die Leistung, und die Einbeziehung von reinen Textdaten während des multimodalen Trainings erhält die Sprachfähigkeiten, die sich sonst verschlechtern würden.
Wir weisen auf einige Einschränkungen des aktuellen Ansatzes hin:
- Tiling-Overhead: Die Verarbeitung skaliert linear mit der Anzahl der Kacheln. Bei sehr hochauflösenden Bildern kann dies erheblich werden. Darüber hinaus kann das Tiling Aufgaben beeinträchtigen, die ein ganzheitliches Szenenverständnis erfordern, wie z. B. das Zählen von Objekten oder räumliches Denken über Kachelgrenzen hinweg. Das globale Miniaturbild mildert dies teilweise, aber Ansätze mit nativer Auflösung sind möglicherweise besser für solche Aufgaben geeignet.
- Multi-Image-Reasoning: Die Leistung bei Multi-Image-Benchmarks ist aufgrund begrenzter Trainingsdaten in diesem Bereich schwächer. Die Optimierung für prägnante visuelle Antworten scheint mit erweitertem, mehrstufigem Reasoning zu konfligieren, wie die MMLU-Pro-Verschlechterung zeigt.
Zukünftige Arbeiten könnten eine effizientere Auflösungshandhabung, gezielte Verbesserungen für Zähl- und Raumaufgaben sowie die Untersuchung untersuchen, ob unser mehrsprachiges Trainingsrezept auf größere Modellskalen übertragbar ist.






