카테고리 없음

최신 LLM 추론 서버 비교: vLLM, TensorRT-LLM, SGLang + Triton

강담비 2026. 4. 17. 20:26
반응형

 

 

개요

대규모 언어 모델(LLM) 서빙을 위한 추론 서버들이 빠르게 발전하고 있습니다. 이 글에서는 가장 인기 있는 솔루션인 vLLM, TensorRT-LLM, SGLang을 비교하고, 기존 Triton Inference Server와의 차이점도 알아봅니다.
 


 

 

1. vLLM (PagedAttention 기반)

 

특징

PagedAttention

  • 기존 방식: max_seq_len=2048로 설정하면 실제 100토큰만 생성해도 2048토큰 분량 메모리 할당 (80% 낭비)
  • vLLM: 실제 사용한 만큼만 메모리 할당 → 동일 GPU로 4배 더 많은 요청 동시 처리

Continuous Batching

  • 기존 Static Batching: 8개 요청 중 가장 긴 요청(30초) 끝날 때까지 전체 대기
  • vLLM: 요청 완료 즉시 새 요청 투입 → GPU 유휴 시간 95% 감소

OpenAI 호환 API

vllm serve meta-llama/Llama-2-7b-hf --host 0.0.0.0 --port 8000

 

사용 예시

from vllm import LLM, SamplingParams

# 모델 로드
llm = LLM(
    model="meta-llama/Llama-2-7b-hf",
    tensor_parallel_size=2,
    gpu_memory_utilization=0.9
)

# 대량 요청 처리
prompts = ["Hello!"] * 100
outputs = llm.generate(prompts, SamplingParams(max_tokens=100))
# HuggingFace 대비 10~20배 빠름

 

양자화 지원

# AWQ 양자화 (메모리 75% 절약)
llm = LLM(model="TheBloke/Llama-2-7B-AWQ", quantization="awq")

# GPTQ 양자화
llm = LLM(model="TheBloke/Llama-2-7B-GPTQ", quantization="gptq")

# FP8 양자화
llm = LLM(model="meta-llama/Llama-2-7b-hf", quantization="fp8")

 

장단점

높은 처리량 (HuggingFace 대비 13.5x) 초기 로딩 시간 다소 김
메모리 효율성 (PagedAttention) 대용량 모델은 여전히 충분한 GPU 필요
간단한 설치 및 사용  
다양한 모델 지원  
활발한 오픈소스 커뮤니티  

 


 

 

2. TensorRT-LLM (NVIDIA 최적화)

 

특징

 
NVIDIA 전용 커널 최적화

  • cuBLAS, cuDNN, FlashAttention 등 NVIDIA GPU 전용 커널 통합
  • GEMM(행렬 연산)을 GPU 아키텍처에 맞게 자동 튜닝
  • A100/H100에서 최대 2.5배 추가 성능 향상

다양한 양자화 지원

FP8 50% 1.5x 거의 없음
INT8 50% 2x 미세함
INT4 75% 3x 일부 있음

 
In-flight Batching

  • vLLM의 Continuous Batching과 유사
  • GPU 유휴 시간 95% 감소

Multi-GPU Tensor Parallelism

  • 모델을 여러 GPU에 분산
  • A100 8대로 Llama-70B 실행 가능

 

사용 예시

# 1단계: 체크포인트 변환
python convert_checkpoint.py \
    --model_dir ./llama-2-7b-hf \
    --output_dir ./llama-2-7b-trt

# 2단계: 엔진 빌드
trtllm-build \
    --checkpoint_dir ./llama-2-7b-trt \
    --output_dir ./llama-2-7b-engine \
    --quantization int8 \
    --max_batch_size 128
# 3단계: 추론
from tensorrt_llm.runtime import ModelRunner

runner = ModelRunner.from_dir("./llama-2-7b-engine")
outputs = runner.generate(input_ids, max_new_tokens=100)

 

장단점

NVIDIA GPU에서 압도적 성능 (vLLM 대비 1.5~2배) NVIDIA GPU 전용
지연 시간 10~50ms (실시간 앱 가능) 복잡한 워크플로우 (변환 → 빌드 → 실행)
INT4/INT8/FP8 양자화 완벽 지원 사용하기 어려움, 진입 장벽이 높음
NVIDIA 공식 지원 엔진 빌드에 10~30분 소요

 


 

 

3. SGLang (Structured Generation Language)

 

특징

구조화된 생성

  • JSON, XML 등 구조화된 출력에 특화
  • JSON Schema 준수 보장

RadixAttention

  • KV Cache 공유로 효율성 향상
  • 동일 프롬프트 prefix를 가진 요청들 간 캐시 공유

Python DSL

  • 직관적인 문법으로 복잡한 프롬프트 파이프라인 작성

 

사용 예시

import sglang as sgl

@sgl.function
def multi_turn_chat(s, question):
    s += "System: You are a helpful assistant.\n"
    s += "User: " + question + "\n"
    s += "Assistant:" + sgl.gen("answer", max_tokens=100)

    # JSON 형식 출력 강제
    s += "\nJSON:" + sgl.gen("json", regex=r'\{.*\}')

result = multi_turn_chat.run(question="What is AI?")
print(result["answer"])
print(result["json"])

장단점

구조화된 출력에 최적화 상대적으로 새로운 프로젝트
복잡한 프롬프트 파이프라인 쉽게 구현 커뮤니티 규모가 작음
빠른 개발 속도  
JSON Schema 준수 용이  

 


4. Triton Inference Server와의 관계

 

Triton이란?

Triton은 범용 모델 서빙 플랫폼입니다:

  • TensorFlow, PyTorch, ONNX, TensorRT 등 다양한 백엔드 지원
  • REST/gRPC API 제공
  • 동적 배치, 모델 버전 관리
  • 멀티모델 서빙

 

핵심 차이

목적 범용 모델 서빙 플랫폼 LLM 전용 추론 엔진
모델 범위 모든 ML 모델 LLM만
최적화 백엔드에 의존 LLM 특화 최적화 내장
사용 방식 서빙 플랫폼 추론 엔진 (서빙 포함 가능)

 

+ Triton은 TensorRT-LLM을 백엔드로 사용할 수 있습니다
 


5. 성능 비교

 

A100 GPU 기준 (Llama-2-7B)

처리량 (tokens/sec) 210 2,850 4,200
지연 시간 (100 req) 142초 9.1초 5.8초
GPU 메모리 활용률 35% 94% 95%
동시 요청 수 16개 128개 128개

 

양자화 비교

AWQ O X
GPTQ O X
INT8 X O
INT4 X (AWQ로 대체) O
FP8 O O

 
 


6. 정리

 

빠른 개발/프로토타이핑 vLLM
NVIDIA GPU + 최고 성능 TensorRT-LLM
구조화된 출력 필요 SGLang
여러 모델 타입 혼합 서빙 Triton + TensorRT-LLM Backend
기존 Triton 환경 활용 Triton + TensorRT-LLM Backend
AMD GPU 사용 vLLM
메모리 부족 vLLM (AWQ) 또는 TensorRT-LLM (INT4)

 
 

  • vLLM: 범용성, 사용 편의성, 높은 처리량. 시작하기에 가장 좋은 선택
  • TensorRT-LLM: NVIDIA GPU에서 최고 성능. 프로덕션 대용량 서비스에 적합
  • SGLang: 구조화된 출력, 에이전트 워크플로우에 특화
  • Triton: 범용 서빙 플랫폼. 다양한 모델 타입을 통합 서빙할 때 적합

 
추천 접근: vLLM으로 시작하고, 성능이 중요해지면 TensorRT-LLM으로 마이그레이션. 이미 Triton을 사용 중이라면 TensorRT-LLM Backend를 추가.