왜 로컬 LLM인가?
클라우드 API를 쓰면 편하지만 이런 상황에서는 로컬 실행이 훨씬 낫습니다:
- 비용: 월 100 API 비용 없이 무제한 사용
- 프라이버시: 코드, 내부 문서, 개인 데이터를 외부 서버에 보내지 않음
- 오프라인: 인터넷 없이도 동작
- 레이턴시: 로컬 SSD에서 불러오면 네트워크 왕복 없음
2025년 기준, M2 MacBook Pro나 RTX 3080 이상의 GPU가 있다면 충분히 실용적인 수준의 로컬 LLM을 돌릴 수 있습니다.
Ollama: 로컬 LLM의 사실상 표준
Ollama는 복잡한 설정 없이 로컬 LLM을 실행할 수 있는 도구입니다. Docker처럼 모델을 pull해서 run하는 단순한 인터페이스가 특징입니다.
설치 및 첫 실행
# macOS
brew install ollama
# Linux
curl -fsSL https://ollama.ai/install.sh | sh
# 모델 다운로드 및 실행
ollama run llama3.2 # Meta Llama 3.2 (3B, ~2GB)
ollama run llama3.1:8b # Llama 3.1 8B (~5GB)
ollama run qwen2.5:7b # Alibaba Qwen 2.5 7B (~5GB)
ollama run gemma2:9b # Google Gemma 2 9B (~6GB)
ollama run mistral # Mistral 7B (~4GB)
OpenAI 호환 API
Ollama는 OpenAI API와 호환되는 로컬 서버를 제공합니다. 기존 코드의 API URL만 바꾸면 됩니다:
from openai import OpenAI
# 기존: client = OpenAI(api_key="sk-...")
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
response = client.chat.completions.create(
model="llama3.1:8b",
messages=[{"role": "user", "content": "안녕하세요!"}]
)
print(response.choices[0].message.content)
모델 선택 가이드
RAM/VRAM별 추천 모델
| 메모리 | 추천 모델 | 성능 수준 |
|---|---|---|
| 8GB RAM | Llama 3.2 3B, Gemma 2 2B | GPT-3.5 수준 |
| 16GB RAM | Llama 3.1 8B, Mistral 7B, Qwen 2.5 7B | GPT-3.5~4 사이 |
| 32GB RAM | Llama 3.1 70B (4-bit), Qwen 2.5 32B | GPT-4 근접 |
| 64GB+ RAM | Llama 3.1 70B (8-bit), 405B (4-bit) | GPT-4 수준 |
| RTX 3080 (10GB VRAM) | Llama 3.1 8B, Mistral 7B | GPT-3.5~4 사이 |
| RTX 4090 (24GB VRAM) | Llama 3.1 70B (4-bit) | GPT-4 근접 |
한국어 성능이 좋은 모델 (2025 기준)
1. Qwen 2.5 (Alibaba) 중국어 훈련 덕분에 동아시아 언어 전반이 뛰어납니다. 7B, 14B, 32B 라인업이 있고 로컬 한국어 작업에서 가장 추천하는 선택입니다.
ollama run qwen2.5:14b # 14B, ~9GB, 한국어 최강
2. EEVE Korean (야놀자 연구소) 한국어 특화 파인튜닝 모델. 영어 기반 태스크는 Qwen보다 약하지만 순수 한국어 이해에서 강합니다.
3. Llama 3.1 (Meta) 영어 기반이지만 다국어 훈련으로 한국어도 준수합니다. 코딩 태스크에서는 Qwen보다 강한 경향.
LM Studio: GUI로 쉽게
코드가 싫다면 LM Studio를 사용하세요. ChatGPT 같은 인터페이스로 로컬 LLM을 사용할 수 있습니다.
- Hugging Face에서 GGUF 형식 모델 직접 검색/다운로드
- OpenAI 호환 로컬 서버 원클릭 시작
- GPU 가속 자동 설정
- 무료, macOS/Windows/Linux 지원
llama.cpp:
최고의 성능
가장 빠른 추론 속도가 필요하다면 llama.cpp를 직접 사용합니다. Ollama 내부도 llama.cpp를 씁니다.
# 빌드
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp && make -j4
# Apple Silicon Metal 가속
LLAMA_METAL=1 make -j4
# CUDA 가속 (NVIDIA)
LLAMA_CUDA=1 make -j4
# 실행
./main -m ./models/llama-3.1-8b-q4_k_m.gguf -n 512 --temp 0.7 -p "한국의 AI 트렌드를 분석해줘"
양자화(Quantization) 이해:
Q4_K_M: 4-bit 양자화, 메모리 75% 절감, 품질 손실 최소 → 가장 추천Q8_0: 8-bit, 메모리 50% 절감, 원본에 가장 가까운 품질F16: 원본 품질, 메모리 절감 없음
실용적인 로컬 LLM 활용 사례
1. 코드 리뷰 자동화 (완전 프라이빗)
import ollama
def review_code(code: str) -> str:
response = ollama.chat(
model="qwen2.5:14b",
messages=[{
"role": "user",
"content": f"다음 코드를 리뷰해주세요. 보안 취약점, 성능 이슈, 개선 사항을 지적해주세요:
{code}"
}]
)
return response["message"]["content"]
2. 내부 문서 Q&A (RAG + 로컬)
# LlamaIndex + Ollama 조합
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.llms.ollama import Ollama
from llama_index.embeddings.ollama import OllamaEmbedding
llm = Ollama(model="llama3.1:8b", request_timeout=120.0)
embed_model = OllamaEmbedding(model_name="nomic-embed-text")
documents = SimpleDirectoryReader("./internal_docs").load_data()
index = VectorStoreIndex.from_documents(documents, embed_model=embed_model)
query_engine = index.as_query_engine(llm=llm)
response = query_engine.query("우리 회사 휴가 정책이 어떻게 돼?")
로컬 LLM의 현실적인 한계
솔직히 말하면 2025년 현재 로컬 LLM은 GPT-4o, Claude Sonnet과 비교하면 여전히 차이가 있습니다.
| 태스크 | 로컬 8B | 로컬 70B | GPT-4o |
|---|---|---|---|
| 단순 Q&A | 충분 | 좋음 | 최상 |
| 코딩 (단순) | 충분 | 좋음 | 최상 |
| 코딩 (복잡) | 부족 | 괜찮음 | 최상 |
| 한국어 이해 | 보통 | 좋음 | 좋음 |
| 긴 문서 분석 | 부족 | 괜찮음 | 최상 |
| 추론/수학 | 부족 | 보통 | 좋음 |
추천 전략: 프라이버시가 중요하거나 반복적인 단순 작업은 로컬로, 복잡한 추론이나 고품질이 필요한 작업은 클라우드 API로 분리하는 하이브리드 접근이 현실적입니다.
결론로컬 LLM을 시작하는 가장 빠른 방법:
- Ollama 설치 →
ollama run qwen2.5:7b로 첫 테스트 - LM Studio 설치 → GUI로 모델 탐색
- RAM 16GB 이상이면 8B 모델로 실용적인 업무 자동화 가능
- 한국어 작업이 많다면 Qwen 2.5 14B 강력 추천
클라우드 API 대비 비용 절감 + 프라이버시 보장이라는 장점은 명확합니다. 완벽하진 않지만 충분히 실용적인 수준에 도달했습니다.





