콘텐츠로 이동

Qwen-VL / Qwen2-VL

1. 개요

항목 내용
개발사 Alibaba Cloud (Qwen Team)
공개일 Qwen-VL: 2023.08, Qwen2-VL: 2024.08
모델 타입 Open Source (Apache 2.0 / Qwen License)
접근 방식 Hugging Face, ModelScope, DashScope API

Qwen-VL 시리즈는 Alibaba의 오픈소스 VLM으로, 특히 OCR, 다국어(중국어), 문서 이해에서 뛰어난 성능을 보인다. Qwen2-VL은 동적 해상도와 비디오 이해를 추가했다.

2. 모델 패밀리

2.1 Qwen-VL (v1)

모델 파라미터 Vision Encoder LLM
Qwen-VL 9.6B ViT-bigG (OpenCLIP) Qwen-7B
Qwen-VL-Chat 9.6B ViT-bigG (OpenCLIP) Qwen-7B

2.2 Qwen2-VL

모델 파라미터 Vision Encoder LLM
Qwen2-VL-2B-Instruct 2.2B ViT-600M Qwen2-1.5B
Qwen2-VL-7B-Instruct 8.3B ViT-600M Qwen2-7B
Qwen2-VL-72B-Instruct 73B ViT-600M Qwen2-72B

3. 아키텍처

3.1 Qwen-VL 구조

[이미지 448x448]
       |
       v
[ViT-bigG (Frozen)]
       |
       v
[Cross-Attention Adapter]
       |
       v
[Qwen LLM] <-- [텍스트 토큰]
       |
       v
[출력 토큰]

3.2 Qwen2-VL 구조 (개선)

[이미지 (동적 해상도)]
       |
       v
[Naive Dynamic Resolution]
       |
       v
[ViT-600M] -- Window Attention + Full Attention
       |
       v
[2D RoPE (M-RoPE)]
       |
       v
[Compression (4 tokens per 2x2 patches)]
       |
       v
[Qwen2 LLM] <-- [텍스트 토큰]
       |
       v
[출력 토큰]

3.3 핵심 컴포넌트 (Qwen2-VL)

컴포넌트 사양
Vision Encoder ViT-600M (자체 학습)
해상도 처리 Naive Dynamic Resolution
위치 인코딩 Multimodal RoPE (M-RoPE)
Attention Window + Full Attention 혼합
토큰 압축 2x2 → 1 토큰
LLM Qwen2 (1.5B / 7B / 72B)

3.4 M-RoPE (Multimodal RoPE)

3D 위치 정보를 1D로 분해: - 시간 차원 (비디오 프레임) - 높이 차원 (이미지) - 너비 차원 (이미지)

4. 이미지/비디오 처리

4.1 해상도 지원 (Qwen2-VL)

항목 사양
최소 해상도 제한 없음
최대 해상도 제한 없음 (토큰 수로 제한)
토큰 계산 (H/14) x (W/14) / 4
기본 설정 min_pixels=2562828, max_pixels=12802828

4.2 토큰 수 계산 예시

해상도 패치 수 압축 후 토큰
224x224 16x16 64
448x448 32x32 256
1344x1344 96x96 2,304

4.3 비디오 처리

항목 사양
지원 네이티브 비디오 이해
프레임 추출 기본 2 FPS
최대 길이 토큰 제한 내
시간적 이해 M-RoPE로 프레임 순서 인코딩

4.4 멀티 이미지

항목 지원
최대 이미지 수 컨텍스트 제한 내 무제한
이미지 인터리빙 지원
Few-shot 학습 지원

5. 벤치마크 성능

5.1 Qwen2-VL-72B-Instruct

벤치마크 점수 비고
MMMU (val) 64.5% 오픈소스 최고
MathVista 70.5% 수학 추론
DocVQA 96.5% 문서 이해 SOTA
ChartQA 88.3% 차트 이해
TextVQA 84.3% 텍스트 인식
OCRBench 866 OCR 최고 성능
RealWorldQA 68.9% 실세계 이해
AI2D 85.2% 다이어그램

5.2 Qwen2-VL-7B-Instruct

벤치마크 점수 비고
MMMU 54.1% -
DocVQA 94.5% -
ChartQA 83.0% -
TextVQA 84.3% -
OCRBench 845 -
RealWorldQA 66.7% -

5.3 Qwen2-VL-2B-Instruct

벤치마크 점수
MMMU 41.1%
DocVQA 90.1%
OCRBench 794
RealWorldQA 62.9%

5.4 비디오 이해 벤치마크

벤치마크 Qwen2-VL-72B 비고
Video-MME 71.2% 비디오 이해
MVBench 73.6% -
EgoSchema 66.7% 자아 시점

6. 사용 방법

6.1 Hugging Face Transformers

from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
from PIL import Image
import torch

model_id = "Qwen/Qwen2-VL-7B-Instruct"

model = Qwen2VLForConditionalGeneration.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto"
)
processor = AutoProcessor.from_pretrained(model_id)

image = Image.open("image.jpg")

messages = [
    {
        "role": "user",
        "content": [
            {"type": "image", "image": image},
            {"type": "text", "text": "이 이미지를 자세히 설명해주세요."}
        ]
    }
]

text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = processor(text=[text], images=[image], return_tensors="pt").to(model.device)

outputs = model.generate(**inputs, max_new_tokens=512)
result = processor.batch_decode(outputs, skip_special_tokens=True)
print(result[0])

6.2 비디오 처리

from qwen_vl_utils import process_vision_info

messages = [
    {
        "role": "user",
        "content": [
            {"type": "video", "video": "video.mp4", "fps": 1.0},
            {"type": "text", "text": "이 비디오를 요약해주세요."}
        ]
    }
]

text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
image_inputs, video_inputs = process_vision_info(messages)

inputs = processor(
    text=[text],
    images=image_inputs,
    videos=video_inputs,
    return_tensors="pt"
).to(model.device)

outputs = model.generate(**inputs, max_new_tokens=512)

6.3 해상도 제어

# 최소/최대 픽셀 수 설정
min_pixels = 256 * 28 * 28  # 200,704
max_pixels = 1280 * 28 * 28  # 1,003,520

processor = AutoProcessor.from_pretrained(
    model_id,
    min_pixels=min_pixels,
    max_pixels=max_pixels
)

6.4 vLLM 서빙

vllm serve Qwen/Qwen2-VL-7B-Instruct \
    --limit-mm-per-prompt image=10,video=2 \
    --max-model-len 32768

6.5 양자화 (AWQ)

model_id = "Qwen/Qwen2-VL-7B-Instruct-AWQ"

model = Qwen2VLForConditionalGeneration.from_pretrained(
    model_id,
    torch_dtype=torch.float16,
    device_map="auto"
)

7. VRAM 요구량

7.1 Qwen2-VL

모델 BF16 INT8 INT4
2B 6GB 3GB 2GB
7B 18GB 10GB 6GB
72B 150GB 78GB 42GB

7.2 추론 속도 (A100 80GB)

모델 BF16 AWQ
2B 85 tok/s 120 tok/s
7B 48 tok/s 70 tok/s
72B 8 tok/s 15 tok/s

8. 장점

장점 설명
OCR 최고 OCRBench 최고 성능
다국어 중국어, 한국어, 일본어 우수
동적 해상도 임의 크기 이미지 처리
비디오 지원 네이티브 비디오 이해
다양한 크기 2B ~ 72B 선택 가능
오픈소스 Apache 2.0 라이선스

9. 단점

단점 설명
72B 요구사양 고사양 GPU 필요
영어 대비 중국어 특화로 영어 약간 약함
복잡한 추론 GPT-4V 대비 약함
HF 의존성 qwen-vl-utils 필요

10. 사용 사례

10.1 적합한 사용 사례

  • 문서 OCR 및 정보 추출
  • 중국어/한국어 텍스트 인식
  • 영수증/인보이스 처리
  • 비디오 분석
  • 다국어 VQA
  • 차트/표 데이터 추출

10.2 부적합한 사용 사례

  • 초저사양 환경 (2B 제외)
  • 영어 전용 서비스 (다른 모델 권장)

11. API (DashScope)

11.1 가격 (2024.12)

모델 가격 (1K 토큰)
Qwen-VL-Plus ¥0.008
Qwen-VL-Max ¥0.02

11.2 DashScope 사용

from dashscope import MultiModalConversation

response = MultiModalConversation.call(
    model='qwen-vl-max',
    messages=[
        {
            'role': 'user',
            'content': [
                {'image': 'https://example.com/image.jpg'},
                {'text': 'Describe this image.'}
            ]
        }
    ]
)

12. 참고 자료