멀티모달 언어 모델

멀티모달 언어 모델 (Vision·Audio 지원)

SGLang은 이미지나 오디오 같은 여러 종류의 입력을 함께 받아 텍스트를 내보내는 멀티모달 모델을 폭넓게 지원해요. 이 모델들은 언어 모델에 이미지·오디오 인코더를 덧붙여서, 텍스트만으로는 처리할 수 없는 정보까지 받아들일 수 있게 해 줘요.

출처: 공식문서

서버 띄우는 명령

멀티모달 모델도 일반 LLM처럼 launch_server로 띄우면 돼요. 모델 경로만 자신이 쓰는 VLM으로 바꿔 주면 되죠.

python3 -m sglang.launch_server \
  --model-path meta-llama/Llama-3.2-11B-Vision-Instruct \  # example HF/local path
  --host 0.0.0.0 \
  --port 30000 \

사용법은 OpenAI APIs 비전 문서에서 요청을 어떤 식으로 보내는지 확인할 수 있어요.

지원 모델

어떤 모델이 지원되는지는 아래 표에 정리돼 있어요. 만약 특정 아키텍처가 구현돼 있는지 잘 모르겠다면 GitHub에서 직접 검색해 볼 수 있는데, 예를 들어 Qwen2_5_VLForConditionalGeneration을 찾고 싶다면 GitHub 검색창에 아래 표현을 넣어 보세요.

repo:sgl-project/sglang path:/^python\/sglang\/srt\/models\// Qwen2_5_VLForConditionalGeneration
모델 계열 (변형) 예시 Hugging Face 식별자 설명 참고
Qwen-VL Qwen/Qwen3-VL-235B-A22B-Instruct 알리바바의 Qwen 비전-언어 확장 버전이에요. 예를 들어 Qwen2.5-VL(7B 이상 변형)은 이미지 내용을 분석하고 대화할 수 있어요.
DeepSeek-VL2 deepseek-ai/deepseek-vl2 DeepSeek의 비전-언어 변형(전용 이미지 프로세서 포함)으로, 이미지와 텍스트 입력에 대해 고급 멀티모달 추론을 할 수 있어요.
DeepSeek-OCR / OCR-2 deepseek-ai/DeepSeek-OCR-2 문서 이해와 텍스트 추출에 특화된 DeepSeek OCR 모델이에요. --trust-remote-code 사용
Janus-Pro (1B, 7B) deepseek-ai/Janus-Pro-7B 이미지 이해와 생성이 모두 가능한 DeepSeek의 오픈소스 멀티모달 모델이에요. 시각 인코딩 경로를 분리한 구조로 두 작업 모두의 성능을 높였어요.
MiniCPM-V / MiniCPM-o openbmb/MiniCPM-V-2_6 MiniCPM-V(2.6, ~8B)는 이미지 입력을, MiniCPM-o는 오디오/비디오까지 지원해요. 모바일·엣지 기기에서 돌리기 좋게 최적화된 멀티모달 LLM이에요.
Llama 3.2 Vision (11B) meta-llama/Llama-3.2-11B-Vision-Instruct Llama 3(11B)의 비전 지원 변형으로, 시각 질문 답변 등 멀티모달 작업을 위해 이미지 입력을 받아요.
LLaVA (v1.5 & v1.6) ) liuhaotian/llava-v1.5-13b LLaMA/Vicuna(예: LLaMA2 13B)에 이미지 인코더를 붙인 오픈 비전 채팅 모델로, 멀티모달 지시 프롬프트를 따르도록 만들어졌어요.
LLaVA-NeXT (8B, 72B) lmms-lab/llava-next-72b 시각 지시 수행을 개선하고 멀티모달 벤치마크 정확도를 높인 개선판 LLaVA(8B Llama3 버전과 72B 버전)예요.
LLaVA-OneVision lmms-lab/llava-onevision-qwen2-7b-ov Qwen을 백본으로 통합한 개선판 LLaVA 변형으로, OpenAI Vision API 호환 형식으로 여러 이미지(심지어 비디오 프레임)를 입력받을 수 있어요.
Gemma 3 (Multimodal) google/gemma-3-4b-it Gemma 3의 큰 모델(4B, 12B, 27B)은 이미지(이미지당 256 토큰으로 인코딩)를 텍스트와 함께 128K-토큰 결합 컨텍스트 안에서 받아요.
Kimi-VL (A3B) moonshotai/Kimi-VL-A3B-Instruct 이미지에서 텍스트를 이해하고 생성할 수 있는 Kimi-VL 멀티모달 모델이에요.
Mistral-Small-3.1-24B mistralai/Mistral-Small-3.1-24B-Instruct-2503 Mistral 3.1은 텍스트나 이미지 입력에서 텍스트를 생성하는 멀티모달 모델이에요. 도구 호출과 구조화된 출력도 지원해요.
Phi-4-multimodal-instruct microsoft/Phi-4-multimodal-instruct Phi-4-mini의 멀티모달 변형으로, LoRA로 멀티모달 능력을 강화했어요. SGLang에서 텍스트·비전·오디오 모달리티를 지원해요.
MiMo-VL (7B) XiaomiMiMo/MiMo-VL-7B-RL 샤오미의 작지만 강력한 비전-언어 모델로, 세밀한 시각 정보를 담는 네이티브 해상도 ViT 인코더와 교차 모달 정렬용 MLP 프로젝터, 복잡한 추론에 최적화된 MiMo-7B 언어 모델로 구성돼 있어요.
GLM-4.5V (106B) / GLM-4.1V(9B) zai-org/GLM-4.5V GLM-4.5V와 GLM-4.1V-Thinking: 확장 가능한 강화학습으로 다재다능한 멀티모달 추론을 지향해요. --chat-template glm-4v 사용
PaddleOCR-VL (0.9B, 1.5, 1.6) PaddlePaddle/PaddleOCR-VL-1.6 바이두의 0.9B 문서 파싱 VLM이에요. ERNIE-4.5-0.3B 백본에 NaViT 방식 동적 해상도 SigLIP 인코더를 붙여 109개 언어의 텍스트·표·수식·차트·도장을 처리해요. 쿡북 페이지를 참고하세요. 작업은 프롬프트로 선택해요(OCR:, Table Recognition: 등). --trust-remote-code는 꺼 두세요 — transformers가 이 아키텍처를 네이티브 지원하고 이미지 프로세서도 더 빠르거든요.
GLM-OCR zai-org/GLM-OCR 빠르고 정확한 범용 OCR 모델이에요.
DotsVLM (General/OCR) rednote-hilab/dots.vlm1.inst 레드노트의 비전-언어 모델로, 1.2B 비전 인코더와 DeepSeek V3 LLM을 결합했어요. 처음부터 학습한 NaViT 비전 인코더에 동적 해상도를 지원하고, 구조화된 이미지 데이터 학습으로 OCR 능력을 강화했어요.
DotsVLM-OCR rednote-hilab/dots.ocr 광학 문자 인식에 특화된 DotsVLM 변형으로, 텍스트 추출과 문서 이해 능력을 강화했어요. --trust-remote-code 사용 금지
NVILA (8B, 15B, Lite-2B, Lite-8B, Lite-15B) Efficient-Large-Model/NVILA-8B chatml NVILA는 멀티모달 설계의 전체 스택 효율을 탐구해, 더 저렴한 학습·더 빠른 배포·더 나은 성능을 이뤄내요.
NVIDIA Nemotron Nano 2.0 VL nvidia/NVIDIA-Nemotron-Nano-12B-v2-VL-BF16 멀티이미지 추론과 비디오 이해, 강력한 문서 지능, 시각 Q&A·요약 능력을 지원해요. 하이브리드 Mamba-Transformer LLM인 Nemotron Nano V2를 기반으로 긴 문서·비디오 시나리오에서 더 높은 추론 처리량을 얻어요. --trust-remote-code 사용. 메모리 제약에 맞게 --max-mamba-cache-size(기본 512)를 조정해야 할 수 있어요.
NVIDIA Cosmos3 Reasoner (Nano) nvidia/Cosmos3-Nano NVIDIA Cosmos3 월드 모델의 이해 타워(Qwen3-VL 기반 리저너)로, 통합된 diffusers 레이아웃 체크포인트에서 이미지·비디오 이해를 위한 독립 VLM으로 서빙돼요. 생성(diffusion) 타워는 로드 시 제거돼요. --model-type llm으로 실행; Cosmos3 LLM 서빙 참고. 텍스트 전용 서빙은 --language-model-only 전달.
NVIDIA Cosmos3-Edge (4B) nvidia/Cosmos3-Edge Cosmos3-Edge의 4B 밀집 이해 타워예요. Arcee 구조 텍스트 모델에 SigLIP2 비전 타워와 Edge 전용 spatial-merge 프로젝터를 붙여 이미지·비디오 이해를 지원해요. --model-type llm으로 실행; Cosmos3 LLM 서빙 참고. 텍스트 전용은 --language-model-only.
Ernie4.5-VL baidu/ERNIE-4.5-VL-28B-A3B-PT 바이두의 비전-언어 모델(28B, 424B)이에요. 이미지·비디오 이해를 지원하고 씽킹(thinking)도 지원해요.
JetVLM Jet-Nemotron 기반으로 고성능 멀티모달 이해·생성 작업을 위해 설계된 비전-언어 모델이에요. 곧 제공 예정
Step3-VL (10B) stepfun-ai/Step3-VL-10B 시각 인지·복잡한 추론·인간 정렬에 뛰어난 스텝펀의 경량 오픈소스 10B 파라미터 VLM이에요.
Qwen3-ASR (0.6B, 1.7B) Qwen/Qwen3-ASR-1.7B 52개 언어를 지원하는 알리바바의 자동 음성 인식 모델이에요. /v1/audio/transcriptions 엔드포인트로 서빙돼요.
Qwen3-Omni Qwen/Qwen3-Omni-30B-A3B-Instruct 알리바바의 omni-modal MoE 모델이에요. 현재 Thinker 구성요소(텍스트·이미지·오디오·비디오 멀티모달 이해)는 지원하지만 Talker 구성요소(오디오 생성)는 아직 지원하지 않아요.
LFM2-VL LiquidAI/LFM2.5-VL-1.6B Liquid AI의 비전-언어 모델로, SigLIP2 NaFlex 비전 인코더(가변 해상도, 네이티브 종횡비)와 LFM2 하이브리드 gated short conv + GQA 언어 모델을 결합했어요. 다중 이미지 입력을 지원해요.
LocateAnything (3B) nvidia/LocateAnything-3B NVIDIA의 시각 그라운딩/탐지 모델(MoonViT 비전 인코더 + Qwen2 백본)로, \[0, 1000]으로 정규화된 좌표를 갖는 <ref>label</ref><box>...</box> 출력을 내뱉어요. 객체 탐지·구문 그라운딩·장면 텍스트 탐지·GUI 그라운딩·포인팅을 다룬다. --trust-remote-code 사용. 출력에 <ref>/<box> 그라운딩 토큰을 살리려면 skip_special_tokens=false 설정. 제약 <box> 디코딩은 클라이언트 측 옵트인: 서버를 --enable-custom-logit-processor로 시작한 뒤 custom_logit_processor(최상위 요청 필드)와 custom_params(sampling_params 안쪽)를 함께 전달하세요. LocateAnythingBoxGrammarLogitProcessor.build_sampling_params(config)로 config 토큰 id로부터 둘을 만들 수 있어요.

오디오 전사 (Audio Transcription)

SGLang은 OpenAI 호환 /v1/audio/transcriptions 엔드포인트로 오디오 전용 ASR(음성 인식) 모델을 지원해요. 오디오 파일을 올리면 전사 결과를 받을 수 있죠.

서버 실행 명령

sglang serve \
  --model-path Qwen/Qwen3-ASR-1.7B \
  --served-model-name qwen3-asr \
  --trust-remote-code \
  --host 0.0.0.0 --port 30000

예시 요청

curl http://localhost:30000/v1/audio/transcriptions \
  -F [email protected] \
  -F model=qwen3-asr \
  -F response_format=verbose_json
모델 계열 예시 식별자 참고
Whisper openai/whisper-large-v3 OpenAI의 음성 인식 모델이에요.
Qwen3-ASR (0.6B, 1.7B) Qwen/Qwen3-ASR-1.7B --trust-remote-code 사용. 52개 언어를 지원해요.

비디오 입력 지원

SGLang은 비전-언어 모델(VLM)에 비디오 입력도 지원해요. 비디오 질문 답변, 캡셔닝, 전체 장면 이해 같은 시간적 추론 작업이 가능해지죠. 비디오 클립을 디코딩하고, 키 프레임을 샘플링하고, 결과 텐서를 텍스트 프롬프트와 함께 배칭해서 멀티모달 추론이 시각·언어 맥락을 함께 통합하도록 해 줘요.

모델 계열 예시 식별자 비디오 참고
Qwen-VL (Qwen2-VL, Qwen2.5-VL, Qwen3-VL, Qwen3-Omni) Qwen/Qwen3-VL-235B-A22B-Instruct 프로세서가 video_data를 모으고 Qwen의 프레임 샘플러를 실행한 뒤, 결과 피처를 텍스트 토큰과 합쳐서 추론 전에 통합해요.
Ling-VL (Ling-3.0-flash-VL) inclusionAI/Ling-3.0-flash-VL InclusionAI의 KDA/MLA 하이브리드 MoE VLM(총 125B / 활성 ~5.1B)으로, Ling-3.0-flash 백본에 Qwen3-ViT 계열 비전 타워를 얹었어요. Bailing 프로세서가 중앙 mRoPE 위치로 이미지·비디오 입력을 확장해요. --trust-remote-code 필요. 오디오는 미지원이에요.
GLM-4v (4.5V, 4.1V, MOE) zai-org/GLM-4.5V 비디오 클립을 Decord로 읽어 텐서로 변환하고, rotary-position 처리를 위한 메타데이터와 함께 모델에 전달해요.
NVILA (Full & Lite) Efficient-Large-Model/NVILA-8B 런타임이 클립당 8프레임을 샘플링해 video_data가 있을 때 멀티모달 요청에 붙여요.
LLaVA video 변형 (LLaVA-NeXT-Video, LLaVA-OneVision) lmms-lab/LLaVA-NeXT-Video-7B 프로세서가 비디오 프롬프트를 LlavaVid 비디오 지원 아키텍처로 라우팅하고, 예제는 sgl.video(...) 클립으로 조회하는 방법을 보여줘요.
NVIDIA Nemotron Nano 2.0 VL nvidia/NVIDIA-Nemotron-Nano-12B-v2-VL-BF16 모델 학습에 따라 프로세서가 최대 128프레임에서 2 FPS로 샘플링해요. 비디오 임베딩에서 중복 토큰을 제거하는 가지치기 기법 EVS를 사용하며, 기본 video_pruning_rate=0.7이에요. 예를 들어 --json-model-override-args '{"video_pruning_rate": 0.0}'로 EVS를 끌 수 있어요.
JetVLM 런타임이 클립당 8프레임을 샘플링해 video_data가 있을 때 멀티모달 요청에 붙여요.

SGLang 프로그램에서 프롬프트를 만들 때는 sgl.video(path, num_frames)로 클립을 붙이면 돼요.

비디오 클립을 보내는 OpenAI 호환 요청 예시:

import requests

url = "http://localhost:30000/v1/chat/completions"

data = {
    "model": "Qwen/Qwen3-VL-30B-A3B-Instruct",
    "messages": [
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "What’s happening in this video?"},
                {
                    "type": "video_url",
                    "video_url": {
                        "url": "https://github.com/sgl-project/sgl-test-files/raw/refs/heads/main/videos/jobs_presenting_ipod.mp4"
                    },
                },
            ],
        }
    ],
    "max_tokens": 300,
}

response = requests.post(url, json=data)
print(response.text)

Cosmos3 체크포인트의 LLM 타워 서빙하기

nvidia/Cosmos3-Nanonvidia/Cosmos3-Edge는 diffusers 레이아웃으로 된 통합 월드 모델 체크포인트라서, sglang serve는 기본적으로 이들을 diffusion 런타임으로 라우팅해요(미디어 생성은 Cosmos3 쿡북 페이지 참고). 이해 타워를 비전-언어 모델로 서빙하고 싶다면 --model-type llm으로 LLM 백엔드를 강제하면 돼요.

sglang serve \
  --model-path nvidia/Cosmos3-Nano \
  --model-type llm \
  --host 0.0.0.0 --port 30000

같은 명령에서 모델 경로만 바꾸면 nvidia/Cosmos3-Edge도 서빙돼요. 둘 다 OpenAI 호환 API로 이미지·비디오 입력을 받아요.

curl http://localhost:30000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nvidia/Cosmos3-Nano",
    "messages": [{
      "role": "user",
      "content": [
        {"type": "text", "text": "Describe this image."},
        {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/sgl-project/sglang/main/examples/assets/example_image.png"}}
      ]
    }],
    "max_tokens": 128
  }'

텍스트 모델만 서빙하고 싶다면(비전 타워를 완전히 건너뜀) --language-model-only를 추가하세요. 이 모드에선 /model_infohas_image_understanding: false를 보고하고, 이미지나 비디오 입력을 담은 요청은 거부돼요.

sglang serve \
  --model-path nvidia/Cosmos3-Nano \
  --model-type llm \
  --language-model-only \
  --host 0.0.0.0 --port 30000

사용 시 참고사항

성능 최적화

멀티모달 모델에선 --keep-mm-feature-on-device 플래그로 지연 시간을 최적화할 수 있어요. 단 GPU 메모리 사용량은 늘어나죠.

  • 기본 동작: 처리 후 멀티모달 피처 텐서를 CPU로 옮겨서 GPU 메모리를 아껴요.
  • --keep-mm-feature-on-device 사용 시: 피처 텐서가 GPU에 남아 device-to-host 복사 오버헤드를 줄여 지연을 개선하지만 GPU 메모리를 더 써요.

GPU 메모리가 충분하고 멀티모달 추론 지연을 최소화하고 싶을 때 이 플래그를 쓰면 돼요.

멀티모달 입력 제한

  • --mm-process-config '{"image":{"max_pixels":1048576},"video":{"fps":3,"max_pixels":602112,"max_frames":60}}'를 사용하세요: image, video, audio 입력 한도를 설정할 수 있어요.

이렇게 하면 GPU 메모리 사용을 줄이고 추론 속도를 높여 OOM을 피하는 데 도움이 되지만, 모델 성능에 영향을 줄 수 있어요. 플래그 설정은 HuggingFace 프로세서에 images_kwargs, videos_kwargs, audio_kwargs로 전달되므로 각 모달리티의 설정이 서로 겹치지 않고 분리돼요. 모델 프로세서의 가용 파라미터는 HuggingFace 문서를 참고하세요.

멀티모달 모델 서빙에서의 양방향 어텐션

Gemma-3 멀티모달 모델 서빙 시 참고:

Hugging Face 블로그에서 언급하듯, Gemma-3는 프리필 단계에서 이미지 토큰 사이에 양방향 어텐션을 사용해요. 현재 SGLang은 Triton 어텐션 백엔드를 쓸 때만 양방향 어텐션을 지원하는데, CUDA Graph나 Chunked Prefill과는 호환되지 않아요.

양방향 어텐션을 켜려면 TritonAttnBackend를 쓰면서 CUDA Graph와 Chunked Prefill을 꺼야 해요. 예시 실행 명령:

python -m sglang.launch_server \
  --model-path google/gemma-3-4b-it \
  --host 0.0.0.0 --port 30000 \
  --enable-multimodal \
  --dtype bfloat16 --triton-attention-reduce-in-fp32 \
  --attention-backend triton \ # Use Triton attention backend
  --disable-cuda-graph \ # Disable Cuda Graph
  --chunked-prefill-size -1 # Disable Chunked Prefill

더 높은 서빙 성능이 필요하고 어느 정도의 정확도 손실을 감수할 수 있다면 다른 어텐션 백엔드를 쓰고 CUDA Graph나 Chunked Prefill 같은 기능도 켤 수 있어요. 다만 모델이 양방향 어텐션 대신 인과 어텐션(causal attention) 으로 폴백한다는 점을 유의하세요.

더 알아보기 (Learn more)