온프레미스 AI가 필요한 경우
- 데이터 주권: 금융, 의료, 법무 — 외부 API에 데이터를 보낼 수 없는 경우
- 비용 절감: 대용량 트래픽에서 API 비용보다 GPU 운영이 저렴
- 레이턴시: 내부 네트워크로 100ms 이하 응답
- 커스터마이징: 파인튜닝, 모델 수정, 특수 설정
GPU 요구사항
flowchart TD Model[모델 크기] --> Calc{VRAM 계산} Calc --> |7B FP16| G1["14GB VRAM<br/>(RTX 3090/4090)"] Calc --> |13B FP16| G2["26GB VRAM<br/>(A100 40GB)"] Calc --> |70B FP16| G3["140GB VRAM<br/>(4x A100 80GB)"] Calc --> |7B Q4| G4["4-5GB VRAM<br/>(RTX 3060 12GB)"] Calc --> |70B Q4| G5["35-40GB VRAM<br/>(2x RTX 4090)"]
실용 공식:
- FP16: 파라미터 수(B) × 2 = 필요 VRAM(GB)
- INT8: 파라미터 수(B) × 1 = 필요 VRAM(GB)
- Q4 (4-bit): 파라미터 수(B) × 0.5 = 필요 VRAM(GB)
추천 GPU 구성:
| 용도 | GPU | VRAM | 가격대 |
|---|---|---|---|
| 개발/테스트 | RTX 4090 | 24GB | ₩200만 |
| 소규모 프로덕션 | A100 40GB | 40GB | ₩1,500만 |
| 대규모 프로덕션 | H100 80GB | 80GB | ₩4,000만 |
| 멀티GPU | 4x A100 80GB | 320GB | ₩8,000만 |
Ollama: 가장 쉬운 로컬 LLM
# 설치
curl -fsSL https://ollama.ai/install.sh | sh
# 모델 다운로드 및 실행
ollama pull llama3.2:3b
ollama pull qwen2.5:7b
ollama pull mistral:7b
# 대화 시작
ollama run llama3.2:3b
# REST API 서버 (기본 포트 11434)
ollama serve
# Python에서 사용
import ollama
response = ollama.chat(
model='qwen2.5:7b',
messages=[{'role': 'user', 'content': '한국어로 인사해줘'}]
)
print(response['message']['content'])
vLLM: 프로덕션 LLM 서빙
Ollama보다 3-5배 높은 처리량:
# vLLM 설치 (CUDA 12.1 필요)
pip install vllm
# OpenAI 호환 API 서버 실행
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-8B-Instruct \
--dtype auto \
--api-key your-secret-key \
--port 8000 \
--max-model-len 8192
# GPU 여러 개 사용 (tensor parallelism)
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-70B-Instruct \
--tensor-parallel-size 4 \
--port 8000
OpenAI SDK로 연결:
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="your-secret-key"
)
response = client.chat.completions.create(
model="meta-llama/Llama-3.1-8B-Instruct",
messages=[
{"role": "system", "content": "한국어로 답변하는 AI 어시스턴트입니다."},
{"role": "user", "content": "RAG 시스템 구축 방법을 알려줘"}
],
temperature=0.7,
max_tokens=1000,
)
print(response.choices[0].message.content)
Docker로 배포
# docker-compose.yml
version: '3.8'
services:
vllm:
image: vllm/vllm-openai:latest
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
volumes:
- ~/.cache/huggingface:/root/.cache/huggingface
ports:
- "8000:8000"
command: >
--model Qwen/Qwen2.5-7B-Instruct
--dtype auto
--api-key secret-key
--max-model-len 4096
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
docker compose up -d
모델 선택 가이드
| 모델 | 크기 | 한국어 | 코딩 | 용도 |
|---|---|---|---|---|
| Qwen2.5-7B | 7B | ★★★★☆ | ★★★★☆ | 범용 |
| Llama-3.1-8B | 8B | ★★★☆☆ | ★★★★☆ | 영어 중심 |
| EXAONE-3.5-7.8B | 7.8B | ★★★★★ | ★★★★☆ | 한국어 특화 |
| Mistral-7B | 7B | ★★★☆☆ | ★★★★☆ | 유럽어 |
| Gemma-2-9B | 9B | ★★★☆☆ | ★★★★★ | 코드 생성 |
| DeepSeek-R1-8B | 8B | ★★★★☆ | ★★★★★ | 추론 |
비용 비교 (월 100만 토큰 기준)
클라우드 API:
- GPT-4o: 입력 $2.50/M + 출력 $10/M = 약 ₩1.8만/100만 토큰
- Claude Sonnet: 입력 $3/M + 출력 $15/M = 약 ₩2.5만/100만 토큰
온프레미스 (RTX 4090, 월 리스 기준):
- 서버 월 리스: 약 ₩30만
- 전기 요금 (350W × 720h): 약 ₩3만
- 총 월 고정비: ₩33만
- 100만 토큰/일 = 3,000만 토큰/월에서 손익분기점
하루 300만 토큰 이상 처리한다면 온프레미스가 경제적입니다.
Hugging Face Model Hub에서 모델을 받고 vLLM으로 서빙하는 조합이 현재 가장 실용적인 온프레미스 AI 스택입니다.





