멀티모달 언어 모델
멀티모달 언어 모델 (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-Nano와 nvidia/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_info가 has_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) 으로 폴백한다는 점을 유의하세요.