

Мы выпускаем jina-vlm, модель vision-language с 2,4 миллиардами параметров, которая достигает современного уровня многоязычного визуального ответа на вопросы среди открытых VLM масштаба 2B. Благодаря объединению vision encoder SigLIP2 с языковым ядром Qwen3 через attention-pooling connector, jina-vlm обеспечивает высокую производительность на 29 языках, оставаясь при этом достаточно эффективной для работы на потребительском оборудовании.
| 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 |





tagАрхитектура
Две проблемы ограничивают практическое развертывание VLM: многоязычные возможности часто ухудшаются во время адаптации к видению, и высококачественные VLM остаются вычислительно дорогими. jina-vlm решает обе проблемы благодаря тщательному архитектурному выбору — наш attention-pooling connector уменьшает количество визуальных tokens в 4 раза с минимальным влиянием на производительность — и рецепту обучения, который явно сохраняет многоязычные возможности.
Ключевым архитектурным нововведением является наш vision-language connector. Вместо того, чтобы передавать все 729 визуальных tokens на плитку в языковую модель, мы применяем attention pooling 2×2, что уменьшает их количество до 182 tokens — уменьшение в 4 раза с минимальной потерей информации. Connector работает следующим образом:
- Многослойное слияние признаков: Мы объединяем признаки из слоев ViT 18 и 24 (третий с конца и девятый с конца), захватывая как детализированные пространственные детали, так и семантику высокого уровня.
- Attention pooling: Для каждой окрестности патча 2×2 мы вычисляем запрос как среднее значение признаков окрестности, а затем применяем перекрестное внимание для получения единого объединенного представления.
- SwiGLU projection: Объединенные признаки проецируются в размерность языковой модели через gated linear unit.
Этот прирост эффективности описан ниже:
| 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× |
Поскольку ViT обрабатывает каждую плитку одинаково независимо от pooling, эта экономия применяется исключительно к языковой модели, которая является доминирующей стоимостью во время вывода.
tagПроцедура обучения
Распространенным режимом сбоя при обучении VLM является катастрофическое забывание: языковая модель теряет свои текстовые возможности по мере адаптации к визуальным входным данным. Это особенно остро для многоязычных моделей, где адаптация к видению может ухудшить производительность на неанглийских языках.
Мы решаем эту проблему с помощью двухэтапного конвейера обучения с явными многоязычными данными и сохранением только текста.
Этап 1: Alignment Training
Первый этап фокусируется на кросс-языковом семантическом обосновании с использованием наборов данных подписей, охватывающих различные визуальные домены: природные сцены, документы, инфографика и диаграммы. Крайне важно, чтобы мы включили 15% данных, предназначенных только для текста, чтобы поддерживать понимание языка ядром. Connector использует более высокую скорость обучения (2e-4) и более короткий прогрев, чем encoder и decoder, что позволяет ему быстро адаптироваться, в то время как предварительно обученные компоненты меняются постепенно.
Этап 2: Instruction Fine-tuning
Второй этап обучает следованию инструкциям для VQA и задач рассуждения. Мы объединяем общедоступные наборы данных, охватывающие академический VQA, понимание документов, OCR, математику и рассуждения, с данными инструкций, предназначенными только для текста, чтобы сохранить языковые возможности.
Объединенные данные содержат приблизительно 5 миллионов мультимодальных примеров и 12 миллиардов текстовых токенов на 29 языках, примерно половина из которых на английском языке, а остальные охватывают китайский, арабский, немецкий, испанский, французский, итальянский, японский, корейский, португальский, русский, турецкий, вьетнамский, тайский, индонезийский, хинди, бенгали и другие.
tagНачало работы
tagЧерез Jina API
Мы предоставляем API, совместимый с OpenAI, по адресу https://api-beta-vlm.jina.ai.
tagИзображение из URL
| Формат | Пример |
|---|---|
| HTTP/HTTPS URL | https://example.com/image.jpg |
| URI данных Base64 | 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"}}
]
}]
}'
Локальное изображение (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)'"}}
]
}]
}'
Запрос только текста
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?"}]
}'
Потоковая передача ответа
Добавьте "stream": true, чтобы получать токены по мере их создания:
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"}]
}'
Когда служба запускается в холодном режиме, вы получите:
{
"error": {
"message": "Model is loading, please retry in 30-60 seconds. Cold start takes ~30s after the service scales up.",
"code": 503
}
}
Просто повторите запрос после ожидания.
tagЧерез CLI
Репозиторий HuggingFace содержит скрипт infer.py для быстрых экспериментов:
# 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Через 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)tagЗаключение
jina-vlm демонстрирует, что небольшие VLM могут достигать высокого уровня кросс-лингвистического визуального понимания благодаря тщательному выбору архитектуры и обучения. Коннектор объединения внимания обеспечивает 4-кратное сокращение токенов с минимальным влиянием на производительность, а включение данных, предназначенных только для текста, во время мультимодального обучения сохраняет языковые возможности, которые в противном случае ухудшились бы.
Мы отмечаем несколько ограничений текущего подхода:
- Накладные расходы на разбивку: Обработка масштабируется линейно с количеством плиток. Для изображений с очень высоким разрешением это может стать значительным. Кроме того, разбивка может ухудшить выполнение задач, требующих целостного понимания сцены, таких как подсчет объектов или пространственное рассуждение через границы плиток. Глобальная миниатюра частично смягчает это, но подходы с собственным разрешением могут быть лучше приспособлены для таких задач.
- Рассуждение по нескольким изображениям: Производительность на эталонных тестах с несколькими изображениями ниже из-за ограниченного количества обучающих данных в этом режиме. Оптимизация для лаконичных визуальных ответов, по-видимому, противоречит расширенному многоэтапному рассуждению, о чем свидетельствует ухудшение MMLU-Pro.
В будущей работе можно было бы изучить более эффективную обработку разрешения, целевые улучшения для подсчета и пространственных задач, а также исследовать, переносится ли наш многоязычный рецепт обучения на более крупные масштабы моделей.






