Post

(폐쇄망 LLM 4) vLLM, Ollama, llama.cpp

폐쇄망/내부망에서 로컬 LLM 서버를 구축할 때 어떤 서빙 프레임워크를 선택해야 하는지 비교합니다. vLLM, SGLang, llama.cpp, Ollama의 장단점을 정리합니다.

(폐쇄망 LLM 4) vLLM, Ollama, llama.cpp

이전 글: 추론 속도와 MoE 모델

이 글은 망분리 환경 AI 배포 시리즈의 네 번째 글입니다.

다음 글: 양자화와 정밀도 선택

서빙 프레임워크가 뭔가요?

모델을 골랐으면 이제 실제로 돌려야겠죠?

서빙 프레임워크는 쉽게 말해 모델을 API로 띄워주는 도구입니다. 모델 파일만 있으면 추론이 되는 게 아니거든요. 모델을 메모리에 올리고, 요청이 들어오면 처리하고, 여러 요청을 효율적으로 배치 처리하는 등의 작업이 필요합니다.

대표적인 프레임워크로 vLLM, SGLang, llama.cpp, Ollama가 있습니다. 하나씩 살펴보겠습니다.


llama.cpp: 가볍고 어디서든 돌아간다

llama.cpp 로고 - C/C++로 작성된 경량 LLM 추론 엔진

llama.cpp는 순수 C/C++로 작성된 추론 엔진입니다. GGUF라는 자체 모델 포맷을 사용하고, CPU에서도 꽤 괜찮은 속도가 나옵니다. 가장 큰 장점은 이식성입니다. Windows, Linux, macOS는 물론이고 라즈베리 파이에서도 돌아갑니다. GPU가 없는 환경이나 엣지 디바이스에서 LLM을 돌려야 한다면 사실상 유일한 선택지입니다.

1
2
3
4
# 서버 실행 예시
# -m : model.gguf : 모델 파일 경로
# -ngl : number of gpu layer 의 약자 -1 은 전부 gpu 사용
./llama-server -m model.gguf -ngl -1 --port 8080

양자화 옵션도 Q2부터 Q8까지 다양해서, 메모리가 부족하면 품질을 좀 희생하고 더 작은 모델을 돌릴 수 있습니다. 다만 동시에 여러 요청을 처리하는 데는 최적화가 덜 되어 있어서, 혼자 쓰기엔 좋지만 여러 명이 동시에 쓰는 서버용으로는 부적합합니다.


Ollama: 5분 만에 시작하기

Ollama 로고 - Docker처럼 간편하게 로컬 LLM을 실행하는 도구

Ollama는 llama.cpp 기반으로 사용성을 극대화한 도구입니다. 추론 엔진은 llama.cpp를 사용합니다. Docker처럼 ollama run llama3.3 한 줄이면 모델 다운로드부터 실행까지 알아서 됩니다.

1
2
3
4
5
6
7
# 이게 끝입니다
ollama run llama3.3

# OpenAI 호환 API도 기본 제공
curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "llama3.3", "messages": [{"role": "user", "content": "Hello"}]}'

로컬에서 빠르게 모델을 테스트해보고 싶을 때 최고입니다. 다만 llama.cpp 기반이라 동시 처리 성능은 마찬가지로 제한적이고, 세밀한 설정이 어렵습니다. 개발 중 테스트용으로는 좋지만, 본운영에 쓰기엔 아쉽습니다.


vLLM: 프로덕션의 표준

vLLM 로고 - PagedAttention 기반 고처리량 LLM 서빙 프레임워크

vLLM은 UC Berkeley에서 개발한 고처리량 서빙 프레임워크입니다. 핵심은 PagedAttention이라는 기술인데, KV Cache 메모리를 운영체제의 페이징처럼 관리합니다.

1
2
3
4
5
6
7
8
9
10
┌─────────────────────────────────────────────┐
│           PagedAttention Concept            │
├─────────────────────────────────────────────┤
│  Before: Contiguous memory per request      │
│  → Memory fragmentation, waste              │
│                                             │
│  PagedAttention: Block-based management     │
│  → Non-contiguous memory utilization        │
│  → Optimized for concurrent requests        │
└─────────────────────────────────────────────┘

쉽게 말해, 여러 사람이 동시에 쓸 때 메모리를 효율적으로 나눠 쓴다는 겁니다. 4명이 동시에 긴 대화를 해도 KV Cache가 효율적으로 관리됩니다. vLLM 은 저희가 실전 예제로 나중에 사용해 볼 모델이기 때문에 옵션을 조금 자세히 적어 보겠습니다. 나중에는 훨씬 옵션이 방대해 집니다 ^^;

1
2
3
4
5
6
7
# vllm serve [모델명] : HuggingFace 모델 또는 로컬 경로
vllm serve mistralai/Devstral-Small-2-24B-Instruct-2512 \
    --dtype auto \                   # 데이터 타입 자동 선택 (fp16/bf16)
    --max-model-len 4096 \           # 최대 컨텍스트 길이
    --tensor-parallel-size 2 \       # 텐서 병렬화 GPU 수 (2개 GPU 사용)
    --max-batch-size 8 \             # 동시 처리할 최대 요청 수
    --max_num_batched_tokens 2048    # 한 번에 처리할 최대 토큰 수 

2025년 1월에 V1이 출시되면서 이전 버전 대비 1.7배 빨라졌고, HuggingFace Transformers 대비 최대 24배 높은 처리량을 보여줍니다. Red Hat 같은 기업에서도 프로덕션용으로 vLLM을 권장하고 있습니다.


SGLang: 가장 빠른 신예

SGLang 로고 - Stanford에서 개발한 단일 요청 최고 속도의 LLM 서빙 프레임워크

SGLang은 Stanford LMSYS 팀에서 개발한 프레임워크입니다. 단일 요청 처리 속도가 가장 빠릅니다. 일반적으로 vLLM대비 SGLang 이 단일 요청에서 30%정도 빠른 속도를 보여 주는것 같습니다.

1
2
3
4
5
# Python 서버 실행 예시
python -m sglang.launch_server \
    --model-path mistralai/Devstral-Small-2-24B-Instruct-2512 \
    --dtype auto \  # 데이터 타입 자동 선택
    --tp 2          # 텐서 병렬화 GPU 수 (2개 GPU 사용)

다만 vLLM에 비해 커뮤니티가 작고, 새 모델에 대한 지원은 빠르지만, 문서화나 안정성 면에서는 아직 vLLM이 앞섭니다.


비교 요약

상황추천
혼자 테스트하기Ollama
GPU 없이 CPU로llama.cpp
팀원 여러 명이 동시에vLLM
단일 요청 최고 속도SGLang

결론: vLLM 추천

여러 프레임워크를 써본 결론은 vLLM이 현시점 가장 안전한 선택이라는 겁니다.

  • 업데이트 속도: 새 모델 지원이 빠름. 생각보다 처음에 모델이 나오면 버그가 많습니다. chat-template, tool-call-parser 등등 안정이 되려면 시간이 필요하고 모델을 만든 곳에서 가장 먼저 지원하는 곳이 vLLM 입니다.
  • 동시 처리: PagedAttention으로 여러 사용자 서빙에 최적화
  • 성숙도: 가장 오래되고 검증된 프로젝트

SGLang이 단일 속도는 더 빠르지만, 팀 단위로 쓴다면 동시 처리 성능이 더 중요합니다. 저도 현재 vLLM으로 Devstral-Small-2-FP8을 서빙하고 있습니다. 시리즈 첫 글에서 설정한 목표대로 망분리 환경에서도 잘 돌아갑니다.


다음 글

모델과 서빙 프레임워크를 선택했다면, 이제 메모리를 절약하면서도 성능을 유지하기 위한 양자화 전략을 결정할 차례입니다. FP8, AWQ, GPTQ, GGUF 중 어떤 것을 선택해야 할까요?


시리즈 목차

전체 목차는 AI 활용에서 확인하실 수 있습니다.

This post is licensed under CC BY 4.0 by the author.