Edge LLM 서빙 아키텍처¶
개요¶
Edge LLM 서빙은 클라우드가 아닌 엣지 디바이스(모바일, IoT, 온프레미스 서버)에서 LLM을 실행하는 아키텍처다. 지연시간 감소, 프라이버시 보호, 오프라인 동작이 핵심 이점이다.
왜 Edge LLM인가?¶
| 관점 | 클라우드 | Edge |
|---|---|---|
| 지연시간 | 100-500ms | 10-50ms |
| 프라이버시 | 데이터 전송 필요 | 로컬 처리 |
| 비용 | API 호출당 과금 | 초기 투자 후 무료 |
| 오프라인 | 불가 | 가능 |
| 확장성 | 무제한 | 디바이스 제약 |
디바이스 분류¶
Tier 1: 고성능 엣지¶
- 하드웨어: NVIDIA Jetson AGX, Apple M-series Mac, RTX 4090 워크스테이션
- 가능 모델: 7B-70B 파라미터
- 용도: 온프레미스 엔터프라이즈, 전문 워크스테이션
Tier 2: 중간 엣지¶
- 하드웨어: Jetson Orin Nano, Raspberry Pi 5 + AI HAT, 일반 데스크톱
- 가능 모델: 1B-7B 파라미터
- 용도: 스마트홈 허브, 소규모 사무실
Tier 3: 모바일/경량 엣지¶
- 하드웨어: 스마트폰 (iPhone, Android), 태블릿
- 가능 모델: 0.5B-3B 파라미터
- 용도: 개인 비서, 오프라인 번역
모델 최적화 기법¶
1. 양자화 (Quantization)¶
| 기법 | 정밀도 손실 | 메모리 절감 | 속도 향상 |
|---|---|---|---|
| FP16 | 거의 없음 | 50% | 1.5-2x |
| INT8 (GPTQ) | 1-2% | 75% | 2-3x |
| INT4 (GGUF) | 3-5% | 87.5% | 3-4x |
| 2-bit | 5-10% | 93.75% | 4-5x |
GGUF 양자화 예시:
2. 지식 증류 (Knowledge Distillation)¶
┌────────────────┐
│ Teacher Model │ (70B)
│ (Large) │
└───────┬────────┘
│ Soft Labels
▼
┌────────────────┐
│ Student Model │ (7B)
│ (Small) │
└────────────────┘
- Teacher 모델의 출력 분포를 학습
- 작은 모델로 큰 모델 성능 근접
- Phi, Gemma 등이 이 방식 활용
3. 프루닝 (Pruning)¶
# 구조적 프루닝 예시
def prune_attention_heads(model, heads_to_prune):
for layer, heads in heads_to_prune.items():
model.layers[layer].self_attn.prune_heads(heads)
- 불필요한 파라미터 제거
- 구조적 vs 비구조적 프루닝
- 10-30% 크기 감소 가능
4. 아키텍처 최적화¶
| 기법 | 설명 | 효과 |
|---|---|---|
| Grouped Query Attention | KV 캐시 공유 | 메모리 50-90% 절감 |
| Sliding Window Attention | 고정 윈도우 | 긴 컨텍스트 처리 |
| MoE Sparsity | 일부 Expert만 활성화 | 연산량 감소 |
서빙 프레임워크¶
llama.cpp¶
# 서버 실행
./llama-server \
-m model-q4_k_m.gguf \
-c 4096 \
-ngl 99 \ # GPU 레이어 수
--host 0.0.0.0 \
--port 8080
장점: 경량, 다양한 플랫폼, 활발한 커뮤니티 단점: 배치 처리 제한적
Ollama¶
# 모델 실행
ollama run llama3.2:3b-instruct-q4_K_M
# API 서버
curl http://localhost:11434/api/generate \
-d '{"model": "llama3.2:3b", "prompt": "Hello"}'
장점: 사용 편의성, 모델 관리 단점: 커스터마이징 제한
MLC LLM (모바일)¶
# Android/iOS 배포
from mlc_llm import MLCEngine
engine = MLCEngine("Llama-3.2-1B-Instruct-q4f16_1-MLC")
response = engine.chat("Hello!")
장점: 모바일 최적화, WebGPU 지원 단점: 모델 변환 필요
ExecuTorch (PyTorch Mobile)¶
# 모델 내보내기
import executorch
exported = torch.export.export(model, example_inputs)
executorch_program = executorch.exir.to_edge(exported)
장점: PyTorch 생태계 통합 단점: 아직 초기 단계
아키텍처 패턴¶
Pattern 1: 완전 로컬¶
┌─────────────────────────────┐
│ Edge Device │
│ ┌───────────────────────┐ │
│ │ Local LLM │ │
│ │ (3B-7B model) │ │
│ └───────────────────────┘ │
│ ┌───────────────────────┐ │
│ │ Local Vector DB │ │
│ │ (Chroma/FAISS) │ │
│ └───────────────────────┘ │
└─────────────────────────────┘
적합: 오프라인 필수, 민감 데이터, 저지연
Pattern 2: 하이브리드 (Edge + Cloud)¶
┌──────────────┐ ┌──────────────┐
│ Edge Device │ │ Cloud │
│ ┌──────────┐ │ │ ┌──────────┐ │
│ │Small LLM │ │◄────────►│ │Large LLM │ │
│ │ (Router) │ │ Fallback │ │ (70B+) │ │
│ └──────────┘ │ │ └──────────┘ │
└──────────────┘ └──────────────┘
라우팅 로직:
def route_query(query, complexity_score):
if complexity_score < 0.3:
return edge_model.generate(query)
elif complexity_score < 0.7:
return edge_model.generate(query, fallback=cloud_api)
else:
return cloud_api.generate(query)
Pattern 3: 분산 엣지¶
┌─────────────┐
│ Coordinator │
└──────┬──────┘
┌─────────┼─────────┐
▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐
│Edge │ │Edge │ │Edge │
│ A │ │ B │ │ C │
└─────┘ └─────┘ └─────┘
- 여러 엣지 디바이스가 협업
- 모델 샤딩 또는 앙상블
- 로드 밸런싱
성능 벤치마크¶
디바이스별 추론 속도 (Llama 3.2 3B Q4)¶
| 디바이스 | tokens/sec | 첫 토큰 지연 |
|---|---|---|
| M3 Pro (36GB) | 45-55 | 50ms |
| RTX 4070 | 60-80 | 30ms |
| Jetson Orin | 25-35 | 100ms |
| iPhone 15 Pro | 15-25 | 150ms |
| Raspberry Pi 5 | 3-5 | 500ms |
메모리 요구사항¶
| 모델 크기 | FP16 | Q8 | Q4 |
|---|---|---|---|
| 1B | 2GB | 1GB | 0.6GB |
| 3B | 6GB | 3GB | 1.7GB |
| 7B | 14GB | 7GB | 4GB |
| 13B | 26GB | 13GB | 7.5GB |
최적화 체크리스트¶
모델 선택¶
- [ ] 용도에 맞는 크기 선택 (오버스펙 지양)
- [ ] Instruction-tuned 버전 사용
- [ ] 도메인 특화 모델 고려
양자화¶
- [ ] Q4_K_M이 일반적으로 최적 균형점
- [ ] 정확도 검증 후 적용
- [ ] GGUF 형식 표준화
메모리 관리¶
- [ ] KV 캐시 크기 적절히 설정
- [ ] 컨텍스트 길이 제한
- [ ] 메모리 매핑 활용 (mmap)
배치/캐싱¶
- [ ] 자주 쓰는 프롬프트 캐싱
- [ ] 배치 크기 최적화
- [ ] Speculative decoding 고려
실전 구성 예시¶
스마트홈 AI 허브 (Jetson Orin Nano)¶
hardware:
device: Jetson Orin Nano (8GB)
storage: 256GB NVMe
model:
name: Llama-3.2-3B-Instruct
quantization: Q4_K_M
context_length: 2048
server:
framework: llama.cpp
port: 8080
max_concurrent: 4
features:
- 음성 명령 처리 (Whisper.cpp)
- 스마트홈 제어
- 일정 관리
- 로컬 RAG (가전 매뉴얼)
기업 온프레미스 (RTX 4090 워크스테이션)¶
hardware:
gpu: RTX 4090 24GB
ram: 128GB
storage: 2TB NVMe
model:
primary: Llama-3.1-70B-Instruct (Q4)
fallback: Llama-3.2-8B-Instruct (Q8)
server:
framework: vLLM
batching: continuous
max_concurrent: 32
features:
- 문서 분석 (RAG)
- 코드 리뷰
- 이메일 작성
- 회의록 요약
보안 고려사항¶
| 위협 | 대응 |
|---|---|
| 모델 탈취 | 암호화 저장, TPM 활용 |
| 프롬프트 인젝션 | 입력 검증, 샌드박싱 |
| 사이드채널 공격 | 타이밍 일정화 |
| 물리적 접근 | 보안 부트, 하드웨어 보안 |
참고 자료¶
- llama.cpp GitHub
- MLC LLM Documentation
- Apple MLX Framework
- NVIDIA Jetson AI Lab
- Hugging Face Optimum
최종 업데이트: 2026-02-18