저희는 공개된 2B 규모의 VLM 중에서 최고의 다국어 시각 질의 응답을 달성하는 2.4B 파라미터 시각-언어 모델인 jina-vlm을 출시합니다. SigLIP2 시각 인코더와 Qwen3 언어 백본을 어텐션-풀링 커넥터를 통해 결합함으로써 jina-vlm은 소비자 하드웨어에서 실행할 수 있을 만큼 효율성을 유지하면서도 29개 언어에 걸쳐 강력한 성능을 제공합니다.
| 모델 | 크기 | VQA 평균 | MMMB | 다국어 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은 주의 깊은 아키텍처 선택(어텐션-풀링 커넥터는 성능에 미치는 영향이 최소화하면서 시각적 토큰을 4배 줄임)과 다국어 기능을 명시적으로 보존하는 학습 레시피를 통해 이러한 문제를 모두 해결합니다.
핵심적인 아키텍처 혁신은 시각-언어 커넥터입니다. 타일당 729개의 모든 시각적 토큰을 언어 모델에 전달하는 대신 2×2 어텐션 풀링을 적용하여 이를 182개의 토큰으로 줄입니다. 이는 정보 손실을 최소화하면서 4배 감소합니다. 커넥터는 다음과 같이 작동합니다.
- 다중 레이어 특징 융합: ViT 레이어 18과 24(마지막에서 세 번째 및 아홉 번째)의 특징을 연결하여 미세한 공간적 디테일과 고급 의미론을 모두 캡처합니다.
- 어텐션 풀링: 각 2×2 패치 이웃에 대해 이웃 특징의 평균으로 쿼리를 계산한 다음 교차 어텐션을 적용하여 단일 풀링된 표현을 생성합니다.
- SwiGLU 투영: 풀링된 특징은 게이트 선형 단위를 통해 언어 모델 차원으로 투영됩니다.
이 효율성 향상은 아래에 설명되어 있습니다.
| 메트릭 | 풀링 없음 | 풀링 사용 | 감소 |
|---|---|---|---|
| 시각적 토큰(12개 타일 + 썸네일) | 9,477 | 2,366 | 4.0× |
| LLM 프리필 FLOP | 27.2 TFLOP | 6.9 TFLOP | 3.9× |
| KV-캐시 메모리 | 2.12 GB | 0.53 GB | 4.0× |
ViT는 풀링 여부에 관계없이 각 타일을 동일하게 처리하므로 이러한 절감 효과는 추론 중에 지배적인 비용인 언어 모델에만 적용됩니다.
tag학습 절차
VLM 학습의 일반적인 실패 모드는 재앙적 망각입니다. 언어 모델은 시각적 입력에 적응하면서 텍스트 전용 기능을 잃게 됩니다. 이는 특히 비영어권 언어에서 시각 적응이 성능을 저하시킬 수 있는 다국어 모델의 경우에 심각합니다.
저희는 명시적인 다국어 데이터와 텍스트 전용 보존을 통해 2단계 학습 파이프라인을 통해 이를 해결합니다.
1단계: 정렬 학습
첫 번째 단계는 자연 장면, 문서, 인포그래픽 및 다이어그램과 같은 다양한 시각적 도메인에 걸쳐 있는 캡션 데이터 세트를 사용하여 교차 언어 의미론적 접지(grounding)에 중점을 둡니다. 중요한 점은 백본의 언어 이해도를 유지하기 위해 15%의 텍스트 전용 데이터를 포함한다는 것입니다. 커넥터는 인코더 및 디코더보다 더 높은 학습률(2e-4)과 더 짧은 워밍업을 사용하여 사전 훈련된 구성 요소가 점진적으로 변경되는 동안 빠르게 적응할 수 있습니다.
2단계: 명령 미세 조정
두 번째 단계에서는 VQA 및 추론 작업을 위한 명령어 추종을 학습합니다. 언어 능력을 유지하기 위해 학술 VQA, 문서 이해, OCR, 수학 및 추론을 다루는 공개 데이터 세트와 텍스트 전용 명령어 데이터를 결합합니다.
결합된 데이터는 약 5백만 개의 멀티모달 샘플과 29개 언어에 걸쳐 120억 개의 텍스트 词元으로 구성되며, 대략 절반은 영어이고 나머지는 중국어, 아랍어, 독일어, 스페인어, 프랑스어, 이탈리아어, 일본어, 한국어, 포르투갈어, 러시아어, 터키어, 베트남어, 태국어, 인도네시아어, 힌디어, 벵골어 등으로 이루어져 있습니다.
tag시작하기
tagJina API를 통해
https://api-beta-vlm.jina.ai에서 OpenAI 호환 API를 제공합니다.
tagURL에서 이미지 가져오기
| 형식 | 예시 |
|---|---|
| HTTP/HTTPS URL | https://example.com/image.jpg |
| Base64 데이터 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"}}
]
}]
}'
로컬 이미지 (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
}
}
잠시 기다린 후 요청을 다시 시도하세요.
tagCLI를 통해
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?"tagTransformers를 통해
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 저하에서 알 수 있듯이 확장된 다단계 추론과 충돌하는 것으로 보입니다.
향후 연구에서는 보다 효율적인 해상도 처리, 개수 세기 및 공간적 작업에 대한 대상 개선 사항을 탐색하고 다국어 학습 레시피가 더 큰 모델 규모로 전송되는지 조사할 수 있습니다.








