Contents
see List개요
클라우드 LLM API는 편리하지만 비용, 데이터 프라이버시, 지연 시간 면에서 한계가 있습니다. 특히 기업 환경에서는 민감한 데이터를 외부 서버로 전송할 수 없는 경우가 많습니다. 이런 요구를 충족하는 것이 로컬 LLM 운영입니다.
2025년 현재, Llama 3.3, Mistral, Qwen 2.5 등 오픈 모델의 성능이 크게 향상되었고, Ollama와 vLLM 같은 도구로 쉽게 배포할 수 있게 되었습니다. 이 글에서는 로컬 LLM을 설치하고 프로덕션 수준으로 운영하는 방법을 안내합니다.
핵심 개념: Ollama vs vLLM
- Ollama: 개인 개발자와 소규모 팀을 위한 간편 LLM 실행 도구. Docker처럼 모델을 pull하고 바로 실행. macOS/Linux/Windows 지원. 개발 및 프로토타이핑에 최적.
- vLLM: 프로덕션급 고성능 LLM 서빙 엔진. PagedAttention으로 메모리 효율 극대화. OpenAI 호환 API 제공. 배치 처리와 높은 동시성 지원.
간단히 말해, Ollama는 개발 편의성, vLLM은 프로덕션 성능에 초점을 맞춥니다.
실전 예제: 설치부터 API 서빙까지
1. Ollama로 빠르게 시작하기
# macOS 설치
brew install ollama
# 또는 Linux
curl -fsSL https://ollama.ai/install.sh | sh
# 모델 다운로드 및 실행
ollama pull llama3.3:70b
ollama pull mistral:7b
ollama pull codellama:13b
# 대화형 실행
ollama run llama3.3:70b
# API 서버로 실행 (기본 포트 11434)
ollama serve
# API 호출 예시
curl http://localhost:11434/api/generate -d '{
"model": "llama3.3:70b",
"prompt": "Python으로 퀵소트를 구현해줘",
"stream": false
}'
2. Python에서 Ollama 사용
import ollama
# 기본 대화
response = ollama.chat(
model='llama3.3:70b',
messages=[
{"role": "system", "content": "당신은 시니어 개발자입니다."},
{"role": "user", "content": "FastAPI에서 미들웨어 구현 방법을 알려줘"}
]
)
print(response['message']['content'])
# 스트리밍 응답
stream = ollama.chat(
model='llama3.3:70b',
messages=[{"role": "user", "content": "Docker 컨테이너 최적화 방법"}],
stream=True
)
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
# 임베딩 생성 (RAG용)
embedding = ollama.embeddings(
model='nomic-embed-text',
prompt='로컬 LLM의 장점'
)
print(f"벡터 차원: {len(embedding['embedding'])}")
3. vLLM으로 프로덕션 서빙
# vLLM 설치
pip install vllm
# OpenAI 호환 API 서버 실행
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.3-70B-Instruct \
--tensor-parallel-size 2 \
--max-model-len 8192 \
--gpu-memory-utilization 0.9 \
--port 8000
# 기존 OpenAI SDK로 그대로 사용 가능
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="dummy")
response = client.chat.completions.create(
model="meta-llama/Llama-3.3-70B-Instruct",
messages=[{"role": "user", "content": "쿠버네티스 배포 전략을 설명해줘"}],
temperature=0.7
)
활용 팁
- GPU 메모리 계산: 7B 모델은 약 14GB(FP16), 70B 모델은 약 140GB 필요. 양자화(Q4)를 사용하면 약 1/4로 줄일 수 있습니다.
- 양자화 활용: GGUF(Ollama)나 AWQ/GPTQ(vLLM) 양자화 모델을 사용하면 성능 손실은 5% 이내로 메모리를 크게 절약합니다.
- 모델 선택 기준: 코딩은 CodeLlama/DeepSeek Coder, 한국어는 SOLAR/KULLM, 범용은 Llama 3.3이 추천됩니다.
- 캐싱 전략: vLLM의 prefix caching을 활성화하면 동일한 시스템 프롬프트를 사용하는 요청의 처리 속도가 크게 향상됩니다.
- 모니터링: Prometheus + Grafana로 토큰 처리량, 지연 시간, GPU 활용률을 모니터링하세요.
마무리
로컬 LLM은 비용 절감과 데이터 보안의 두 마리 토끼를 잡을 수 있는 현실적 선택지입니다. Ollama로 빠르게 프로토타이핑하고, 검증된 모델을 vLLM으로 프로덕션 배포하는 것이 가장 효율적인 워크플로우입니다. 오픈 모델의 발전 속도를 고려하면, 로컬 LLM은 앞으로 더욱 강력한 선택지가 될 것입니다.