로컬 LLM 실행 - Ollama로 내 PC에서 모델 돌리기
LLM을 쓰려면 무조건 API 키를 발급받고 요청마다 돈을 내야 할까요? 꼭 그렇지는 않습니다. 요즘은 내 노트북에서 직접 모델을 돌리는 것이 놀랄 만큼 쉬워졌습니다.
그 중심에 있는 도구가 Ollama 입니다. 마치 docker run 하듯 ollama run 한 줄로 모델을 받아 실행할 수 있습니다.
이 글에서는 왜 로컬에서 돌리는지, Ollama를 어떻게 쓰는지, 어떤 하드웨어가 필요한지, 그리고 로컬의 한계와 적합한 용도를 정리합니다.
1. 왜 로컬에서 돌리나
클라우드 API가 편한데 굳이 로컬을 쓰는 이유는 명확합니다.
- 프라이버시: 데이터가 외부로 나가지 않습니다. 의료·법률·사내 문서처럼 밖으로 보내면 안 되는 데이터를 다룰 때 결정적입니다.
- 비용: 초기 하드웨어만 있으면 요청당 요금이 없습니다. 대량 반복 작업(배치 처리, 실험, 개발 중 무한 호출)에서 체감이 큽니다.
- 오프라인·독립성: 인터넷이 없어도, 외부 서비스가 죽어도, 요금제가 바뀌어도 내 환경은 그대로입니다.
- 자유로운 실험: 프롬프트를 마음껏 던지고, 모델을 갈아 끼우고, 파라미터를 만져도 부담이 없습니다.
비유하면, 클라우드 API가 택시라면 로컬 LLM은 자가용입니다. 가끔이면 택시가 편하지만, 매일 많이 탄다면 차를 사는 게 낫습니다.
2. Ollama 시작하기
2-1. 설치와 첫 실행
macOS·Linux·Windows 모두 지원합니다. 설치 후 명령 한 줄이면 됩니다.
# macOS (Homebrew) brew install ollama # 모델을 받아서 바로 대화 시작 (없으면 자동 다운로드) ollama run llama3.1
ollama run을 하면 모델을 내려받아 대화형 프롬프트가 뜹니다. 그대로 질문을 입력하면 답합니다. 다른 모델도 이름만 바꾸면 됩니다.
ollama run qwen2.5:7b # 특정 파라미터 크기 지정 ollama run gemma2:2b # 더 가벼운 모델 ollama list # 받아둔 모델 목록 ollama rm llama3.1 # 모델 삭제
2-2. API로 쓰기
Ollama의 진짜 강점은 로컬 HTTP 서버를 띄워준다는 점입니다. 백그라운드에서 localhost:11434로 REST API가 열립니다.
curl http://localhost:11434/api/generate -d '{ "model": "llama3.1", "prompt": "RAG를 한 문장으로 설명해줘", "stream": false }'
게다가 OpenAI 호환 엔드포인트도 제공해서, 기존 OpenAI SDK 코드에서 base_url만 바꾸면 거의 그대로 로컬 모델로 붙일 수 있습니다.
from openai import OpenAI client = OpenAI( base_url="http://localhost:11434/v1", api_key="ollama", # 아무 값이나 (검사 안 함) ) resp = client.chat.completions.create( model="llama3.1", messages=[{"role": "user", "content": "안녕?"}], ) print(resp.choices[0].message.content)
덕분에 클라우드 API로 개발하다 로컬로 옮기는 전환 비용이 매우 낮습니다.
3. 양자화 모델과 GGUF
내 PC에서 큰 모델이 돌아가는 비결은 대부분 양자화(Quantization) 입니다. 원래 16bit인 가중치를 4bit·5bit 등으로 줄여 용량과 메모리를 확 낮춘 것입니다.
Ollama가 쓰는 모델 포맷이 바로 GGUF 입니다. 이 포맷은 다양한 양자화 레벨을 담을 수 있고, 태그로 지정합니다.
# 태그로 양자화 레벨 선택 ollama run llama3.1:8b-instruct-q4_K_M # 4bit, 균형형 (흔한 기본) ollama run llama3.1:8b-instruct-q8_0 # 8bit, 품질 우선·용량 큼
양자화 태그를 읽는 대략적인 감각은 이렇습니다.
| 태그 예 | 비트 | 특징 |
|---|---|---|
| q4_K_M | 4bit | 용량·품질 균형, 가장 무난한 기본값 |
| q5_K_M | 5bit | 품질 조금 더, 용량 조금 더 |
| q8_0 | 8bit | 품질 거의 원본, 용량 큼 |
정밀도를 낮출수록 파일은 작아지고 빨라지지만 품질이 미세하게 떨어집니다. 대부분 q4_K_M 로 시작해보고 부족하면 올리면 됩니다.
4. 하드웨어 요구사항
로컬 LLM에서 가장 중요한 자원은 메모리입니다. 모델 가중치가 통째로 올라가야 하기 때문입니다.
- NVIDIA GPU: 핵심은 VRAM 용량입니다. 모델이 VRAM에 다 올라가야 빠릅니다.
- Apple Silicon(M 시리즈): 통합 메모리(Unified Memory) 를 GPU가 함께 씁니다. 그래서 메모리가 넉넉한 맥이 로컬 LLM에 의외로 강합니다.
- VRAM이 부족하면: 일부를 시스템 RAM/CPU로 넘겨(offload) 돌릴 순 있지만 속도가 크게 느려집니다.
파라미터 크기별 대략적인 메모리 기준(4bit 양자화 기준)입니다.
| 모델 크기 | 대략 필요 메모리(4bit) | 눈높이 |
|---|---|---|
| 3B 이하 | 2~4GB | 대부분의 최신 노트북 |
| 7~8B | 5~8GB | 8GB+ VRAM / 16GB 통합메모리 |
| 13~14B | 9~12GB | 12GB+ VRAM |
| 30B+ | 20GB 이상 | 고사양 GPU / 대용량 맥 |
처음이라면 7~8B 모델 + 4bit 조합이 성능과 요구사항의 균형이 가장 좋습니다.
5. 로컬의 한계와 적합한 용도
로컬 LLM은 만능이 아닙니다. 냉정하게 선을 그어야 합니다.
한계
- 성능 격차: 내 PC에서 돌리는 7~14B 모델은 최신 상용 대형 모델(수천억 파라미터)의 추론력을 따라가지 못합니다.
- 속도: 하드웨어에 따라 토큰 생성이 느릴 수 있습니다.
- 운영 부담: 스케일링·업데이트·모니터링을 직접 챙겨야 합니다.
로컬이 잘 맞는 용도
- 민감 데이터를 외부로 보낼 수 없는 경우
- 요약·분류·추출처럼 작지만 반복이 많은 작업
- 개발·프로토타이핑 중 비용 걱정 없이 무한 호출
- 오프라인 환경, 개인용 어시스턴트
상용 API가 나은 용도
- 복잡한 추론·코딩 등 최고 품질이 필요할 때
- 트래픽이 크고 안정적 서빙이 중요할 때
실무에서는 흔히 하이브리드로 갑니다. 민감하거나 단순한 건 로컬로, 어렵거나 품질이 중요한 건 API로 라우팅하는 식입니다.
마무리
로컬 LLM은 이제 "연구자만의 영역"이 아닙니다. Ollama 덕분에 ollama run 한 줄이면 누구나 내 PC에서 모델을 굴릴 수 있고, OpenAI 호환 API로 기존 코드에 붙이기도 쉽습니다.
정리하면 이렇습니다.
- 왜: 프라이버시·비용·오프라인·자유로운 실험.
- 어떻게: Ollama로 GGUF 양자화 모델을 받아 실행, API로 연동.
- 무엇으로: 메모리(VRAM/통합메모리)가 핵심, 7~8B·4bit로 시작.
- 어디에: 민감·반복·오프라인 작업에 강하고, 최고 품질은 상용 API가 유리.
"모든 걸 로컬로" 가 아니라, "이 작업은 로컬이 맞는가" 를 판단하는 감각이 핵심입니다.
