왜 지금 봐야 하나
LLM 서빙 스택을 운영하다 보면 vLLM 하나로 모든 요구사항을 충족하기 어렵다는 상황을 만난다. VLM(Vision-Language Model) 지원이 부족하거나, InternLM·Qwen 계열 모델이 특정 프레임워크에서 정확하게 동작하지 않거나, Anthropic 호환 API가 필요하거나, 경량 GPU(T4, A10G)에서 메모리 사용량을 최대한 줄여야 하는 경우가 그렇다.
LMDeploy는 상하이 AI Lab(Shanghai AI Laboratory)의 InternLM 팀이 개발한 오픈소스 LLM 추론 툴킷이다. TurboMind와 PyTorch 두 가지 백엔드를 동시에 제공하며, vLLM과 다른 설계 철학을 갖는다. 2026년 6월 24일 릴리스된 v0.14.0은 FP8 KV 캐시 양자화, Qwen3 Omni 멀티모달 지원, OpenAI Responses 호환 엔드포인트를 핵심으로 추가했다.
vLLM·SGLang과의 비교가 아니라 언제 LMDeploy를 선택해야 하는지, 그리고 운영자 관점에서 v0.14.0의 변화가 무엇인지를 다룬다.
배경: LMDeploy의 설계 목표
LMDeploy가 vLLM과 나란히 자리잡은 이유는 두 가지 기술적 선택에서 비롯된다.
첫째, TurboMind 전용 CUDA 커널. vLLM이 FlashInfer나 CUTLASS 기반 커널을 채택한 반면, LMDeploy는 자체 C++ TurboMind 커널을 유지한다. TurboMind는 W4A16(4-bit 가중치·16-bit 활성)과 W8A8(8-bit 가중치·8-bit 활성) 양자화 경로를 커널 레벨에서 직접 구현해 중간 변환 없이 양자화 추론이 가능하다.
둘째, 멀티모달 퍼스트. InternVL 시리즈와 Qwen-VL 계열이 LMDeploy에서 먼저 지원된다. OpenAI 호환 멀티모달 API를 통해 이미지·오디오·비디오 입력을 단일 서버로 처리한다.
v0.14.0 기준, LMDeploy는 세 가지 배포 형태를 제공한다.
# LLM 채팅 (TurboMind)
lmdeploy serve api_server internlm/internlm3-8b-instruct
# VLM (이미지+텍스트)
lmdeploy serve api_server Qwen/Qwen3-VL-7B-Instruct
# 멀티모달 오디오/비디오 (Qwen3 Omni)
lmdeploy serve api_server Qwen/Qwen3-Omni-7B이중 엔진 아키텍처
/chat/completions
/v1/messages
/v1/responses
스트리밍·배치
KV 캐시 스케줄러
/get_ppl 엔드포인트
B200
(경량 배포)
TurboMind 엔진
LMDeploy의 핵심 엔진이다. C++로 작성된 커스텀 CUDA 커널을 사용한다. 장점은 양자화된 모델에서 높은 처리량이다. 단점은 지원 모델 범위가 PyTorch보다 좁다.
TurboMind가 빛나는 순간은 W4A16 양자화 모델이다. AWQ(Activation-aware Weight Quantization)로 양자화된 모델을 FP16 대비 약 2배 처리량으로 서빙할 수 있다. 이는 TurboMind가 역양자화 연산(dequantization)을 어텐션 커널과 fuse해 메모리 이동을 줄이기 때문이다.
PyTorch 엔진
HuggingFace Transformers 기반으로 동작한다. 새 모델 아키텍처가 등장했을 때 TurboMind보다 먼저 지원되는 경우가 많다. 성능은 TurboMind보다 낮지만 개발·디버깅 주기가 빠르다.
v0.14.0에서 PyTorch 엔진의 접두사 캐싱(prefix caching) 구현이 수정됐다. 접두사 캐싱은 시스템 프롬프트처럼 반복되는 토큰의 KV 캐시를 재사용해 첫 응답 지연(TTFT)을 줄이는 기법이다.
엔진 선택 기준
| 상황 | 권장 엔진 |
|---|---|
| 고처리량, InternLM·Qwen3 계열 | TurboMind |
| AWQ/GPTQ 양자화 모델 서빙 | TurboMind |
| 신규 또는 커스텀 모델 아키텍처 | PyTorch |
| 빠른 프로토타이핑·디버깅 | PyTorch |
| Qwen3 Omni (오디오·비디오) | TurboMind |
v0.14.0 핵심 변화
FP8 KV 캐시 양자화
v0.14.0의 가장 큰 추가는 FP8 KV 캐시 양자화다. KV 캐시를 FP8(E4M3 포맷)으로 저장해 메모리 사용량을 줄인다.
기존에도 INT4/INT8 KV 양자화가 있었다. FP8은 INT보다 정밀도 손실이 적으면서 FP16보다 메모리를 절반으로 쓴다는 이점이 있다.
# FP8 KV 캐시 활성화 예시
lmdeploy serve api_server internlm3-8b-instruct \
--quant-policy 8 \ # KV 캐시 양자화 비트
--kv-cache-dtype fp8 # FP8 포맷 지정주의: FP8 KV 캐시는 Hopper(H100) 이상 GPU에서 효과가 크다. Ampere(A100)에서는 FP8 연산 지원이 제한되어 소프트웨어 경로로 처리된다.
| KV 캐시 유형 | 정밀도 손실 | 메모리 절감 | GPU 요건 |
|---|---|---|---|
| FP16 (기본) | 없음 | 0% | 모든 GPU |
| INT8 | 소 | 50% | 모든 GPU |
| INT4 | 중 | 75% | 모든 GPU |
| FP8 (v0.14 신규) | 최소 | 50% | H100 권장 |
OpenAI Responses API 엔드포인트
OpenAI의 Responses API(/v1/responses)는 기존 Chat Completions API와 달리 대화 상태를 서버에 보관한다. 클라이언트가 매 요청마다 전체 대화 이력을 전송할 필요가 없어 긴 에이전트 루프에서 토큰 비용을 줄인다.
v0.14.0에서 LMDeploy API 서버가 이 엔드포인트를 지원한다. OpenAI에서 자체 서버로 마이그레이션할 때 클라이언트 코드 수정 없이 호스트만 바꾸는 경로가 열린다.
# OpenAI SDK로 LMDeploy Responses API 사용
from openai import OpenAI
client = OpenAI(base_url="http://localhost:23333/v1", api_key="")
response = client.responses.create(
model="internlm3-8b-instruct",
input=[{"role": "user", "content": "안녕하세요"}]
)
print(response.output_text)Anthropic 호환 엔드포인트 (v0.13 도입)
v0.13.0에서 추가된 /v1/messages 엔드포인트는 Anthropic SDK와 호환된다. 텍스트 출력, 추론 블록(thinking blocks), 도구 호출 출력을 모두 지원한다.
import anthropic
client = anthropic.Anthropic(
base_url="http://localhost:23333",
api_key=""
)
message = client.messages.create(
model="internlm3-8b-instruct",
max_tokens=512,
messages=[{"role": "user", "content": "안녕하세요"}]
)
print(message.content[0].text)/get_ppl 엔드포인트
모델 평가 시 자주 쓰이는 Perplexity(혼잡도)를 직접 계산하는 엔드포인트다. 텍스트 품질 측정, 파인튜닝 모델 평가, 프롬프트 비교 시 유용하다.
curl -X POST http://localhost:23333/get_ppl \
-H "Content-Type: application/json" \
-d '{
"model": "internlm3-8b-instruct",
"input": "한국어 텍스트의 복잡도를 측정합니다."
}'양자화 옵션 전체 지형
LMDeploy의 양자화 지원은 다른 서빙 프레임워크와 비교해 가장 넓은 편이다.
가중치 양자화
| 방식 | 엔진 | 비트 폭 | 특성 |
|---|---|---|---|
| AWQ | TurboMind | W4A16 | 활성화 인식, 정밀도 손실 최소 |
| GPTQ | TurboMind | W4A16 | Hessian 기반, 범용 |
| W8A8 | TurboMind | 8bit | 속도·정밀도 균형 |
| BitsAndBytes | PyTorch | 4/8bit | HF 생태계 호환 |
KV 캐시 양자화
# lmdeploy convert로 AWQ 양자화 모델 변환
lmdeploy lite auto_awq internlm/internlm3-8b-instruct \
--work-dir ./internlm3-8b-instruct-w4a16
# 변환된 모델 서빙
lmdeploy serve api_server ./internlm3-8b-instruct-w4a16 \
--model-format awq \
--kv-cache-dtype int8Qwen3 Omni 멀티모달 지원
v0.14.0은 Qwen3 Omni (텍스트·이미지·오디오·비디오 동시 입력) 모델을 TurboMind 백엔드에서 지원한다.
LMDeploy의 멀티모달 서빙은 단일 API 서버에서 다양한 모달리티를 처리한다. 이미지 인코더, 오디오 인코더, 비디오 샘플러를 별도 서비스로 분리하지 않고 통합 서빙 인스턴스로 동작한다.
# Qwen3 Omni 오디오+텍스트 서빙
lmdeploy serve api_server Qwen/Qwen3-Omni-7B \
--tp 2 # 텐서 병렬
--session-len 8192 # 최대 세션 길이
--model-format hf현재 제약: Qwen3 Omni의 음성 출력(TTS) 기능은 아직 LMDeploy에서 완전히 지원되지 않는다. 텍스트 출력 경로만 안정적이며 음성 출력은 Open question 상태다.
운영 배포 가이드
엔진 선택 및 확인
# TurboMind 사용 여부 로그에서 확인
lmdeploy serve api_server internlm3-8b-instruct --log-level INFO
# 출력: "Using TurboMind engine" 또는 "Using PyTorch engine"
# 특정 엔진 강제 지정
lmdeploy serve api_server internlm3-8b-instruct \
--backend turbomind # 또는 pytorchKubernetes 배포
LMDeploy는 공식 Docker 이미지를 제공한다. CUDA 12.8 이상을 권장한다(v0.13.0부터 기본 PyPI 휠이 CUDA 12.8 기반).
containers:
- name: lmdeploy
image: openmmlab/lmdeploy:v0.14.0-cu121
command:
- lmdeploy
- serve
- api_server
- /models/internlm3-8b-instruct
- --kv-cache-dtype
- fp8
resources:
limits:
nvidia.com/gpu: "1"헬스체크
v0.14.0에서 헬스 모니터링 시스템이 강화됐다. /health 엔드포인트가 엔진 상태를 포함해 응답한다.
curl http://localhost:23333/health
# {"status": "ok", "engine": "turbomind", "gpu_memory_used": "14.2 GB"}v0.14.0 운영 체크리스트
- [ ] FP8 KV 캐시를 활성화한다면 GPU가 Hopper(H100/H200) 이상인지 확인한다. Ampere에서는 INT8을 유지한다.
- [ ] OpenAI Responses API 마이그레이션 시
base_url만 변경하고 클라이언트 코드를 우선 테스트한다. - [ ] Anthropic 호환 엔드포인트를 사용한다면 thinking block 응답 형식이 기대한 구조와 일치하는지 확인한다.
- [ ] Qwen3 Omni 배포 시 텍스트 출력 경로만 프로덕션에 두고, 음성 출력은 스테이징에서 별도 검증한다.
- [ ] AWQ 양자화 전환 전에
/get_ppl로 기준 perplexity를 측정해 품질 손실 기준선을 확보한다. - [ ]
--session-len파라미터가 실제 에이전트 대화 길이를 수용할 수 있는지 확인한다. 초과 시 오류가 아닌 조용한 자름(truncation)이 발생할 수 있다. - [ ] CUDA 12.8 기반 휠로 전환 시 기존 환경의 CUDA 드라이버 버전(≥525.x)을 확인한다.
한 문장으로
LMDeploy 0.14.0은 TurboMind 자체 CUDA 커널 위에 FP8 KV 캐시·OpenAI Responses·Anthropic 호환 엔드포인트를 올려, InternLM·Qwen 계열 모델과 멀티모달 VLM을 단일 서버로 서빙하는 vLLM 대안이다.
References
- LMDeploy GitHub: https://github.com/InternLM/lmdeploy
- LMDeploy v0.14.0 릴리스: https://github.com/InternLM/lmdeploy/releases/tag/v0.14.0
- LMDeploy v0.13.0 릴리스: https://github.com/InternLM/lmdeploy/releases/tag/v0.13.0
- LMDeploy 공식 문서: https://lmdeploy.readthedocs.io/en/latest/
- KV Cache 양자화 가이드: https://lmdeploy.readthedocs.io/en/latest/quantization/kv_quant.html
- TurboMind 엔진 설명: https://lmdeploy.readthedocs.io/en/latest/inference/turbomind.html
- Spheron Blog — LMDeploy GPU 클라우드 배포: https://www.spheron.network/blog/deploy-lmdeploy-gpu-cloud-turbomind-inference/
- LMDeploy 상태 (Made By Agents): https://www.madebyagents.com/inference-engines/lmdeploy