Ollama로 로컬 LLM 돌리기 - GPU 없이도 가능한 방법
Ollama로 로컬 LLM 돌리기 - GPU 없이도 가능한 방법
2026년 4월 기준 | AI 도구 비교 · 실전 가이드
요약: Ollama를 사용하면 클라우드 API 없이 내 컴퓨터에서 LLM을 직접 돌릴 수 있습니다. GPU가 없는 환경에서도 실제로 쓸 만한 수준인지, 어떤 모델을 골라야 하는지, API 서버로 활용하는 방법까지 직접 테스트한 결과를 정리했습니다.
Ollama란?
솔직히 처음 Ollama를 알게 됐을 때는 "로컬에서 LLM을 돌린다고? 그게 되나?" 싶었습니다. ChatGPT나 Claude 쓰면 되지, 굳이 내 컴퓨터에서 돌릴 이유가 있나 하는 생각이었죠.
그런데 실제로 써보니 생각이 바뀌었습니다. Ollama는 오픈소스 LLM을 로컬에서 쉽게 실행할 수 있게 해주는 도구입니다. Docker가 컨테이너를 쉽게 관리하게 해주는 것처럼, Ollama는 LLM 모델을 쉽게 다운로드하고 실행할 수 있게 해줍니다.
핵심은 이겁니다:
- 모델 다운로드부터 실행까지 명령어 하나로 끝남
- GGUF 양자화 모델을 자동으로 관리해줌
- OpenAI 호환 API 서버를 기본 제공
- GPU가 없어도 CPU만으로 동작함 (느리긴 하지만)
특히 마지막이 중요합니다. 회사에서 보안 이슈로 외부 API를 못 쓰는 경우, 또는 인터넷이 안 되는 환경에서 LLM이 필요한 경우가 분명히 있거든요.
설치 방법 (Windows / Mac / Linux)
설치가 진짜 간단합니다. 이게 Ollama의 가장 큰 장점 중 하나입니다.
Windows
공식 사이트에서 설치 파일을 받아서 실행하면 끝입니다. 설치 후 터미널(PowerShell이든 CMD든)에서 바로 사용 가능합니다.
# 설치 확인
ollama --version
# 첫 번째 모델 실행 (다운로드 + 실행 한 번에)
ollama run llama3.2
Mac
# Homebrew로 설치
brew install ollama
# 또는 공식 사이트에서 .dmg 다운로드
Linux
# 원라인 설치 스크립트
curl -fsSL https://ollama.com/install.sh | sh
# 서비스 시작
sudo systemctl start ollama
# 부팅 시 자동 시작 설정
sudo systemctl enable ollama
설치가 끝나면 ollama serve로 서버가 백그라운드에서 돌아갑니다 (Windows/Mac은 설치 시 자동 실행). 이 상태에서 ollama run 모델명을 치면 바로 대화가 가능합니다.
기본 명령어 정리
# 사용 가능한 모델 검색
ollama list
# 모델 다운로드만 (실행 없이)
ollama pull llama3.2
# 모델 실행 (대화 모드)
ollama run llama3.2
# 실행 중인 모델 확인
ollama ps
# 모델 삭제 (디스크 확보)
ollama rm llama3.2
# 모델 상세 정보
ollama show llama3.2
모델 선택 가이드 - 뭘 받아야 하나
Ollama에서 쓸 수 있는 모델이 수십 개가 넘습니다. 처음에 뭘 골라야 할지 막막한데, 직접 돌려본 기준으로 정리하겠습니다.
주요 모델별 비교
| 모델 | 파라미터 | 용량(Q4) | 필요 RAM | 한국어 | 특징 |
|---|---|---|---|---|---|
| llama3.2:3b | 3B | ~2GB | 4GB+ | 보통 | 가벼움, 빠른 응답, 간단한 작업용 |
| llama3.1:8b | 8B | ~4.7GB | 8GB+ | 양호 | 범용 성능 좋음, 가성비 최고 |
| mistral:7b | 7B | ~4.1GB | 8GB+ | 보통 | 코딩 능력 우수, 영어 특화 |
| phi-3:3.8b | 3.8B | ~2.2GB | 4GB+ | 미흡 | MS 제작, 크기 대비 성능 좋음 |
| gemma2:9b | 9B | ~5.4GB | 10GB+ | 양호 | Google 제작, 추론 능력 강함 |
| qwen2.5:7b | 7B | ~4.4GB | 8GB+ | 우수 | 아시아 언어 성능 좋음, 한국어 추천 |
| codellama:7b | 7B | ~3.8GB | 8GB+ | 미흡 | 코드 생성 특화, 자동완성에 적합 |
개인적인 추천: RAM 8GB 이하라면 llama3.2:3b가 현실적입니다. 16GB라면 llama3.1:8b가 범용으로 무난하고, 한국어가 중요하면 qwen2.5:7b를 추천합니다.
CPU Only 환경 실측 성능
솔직히 이게 제일 궁금했습니다. GPU 없이 진짜 쓸 만한 건지. 직접 CPU만으로 테스트해봤습니다.
테스트 환경
| CPU | Intel i5-12400 (6코어 12스레드) |
| RAM | 32GB DDR4-3200 |
| GPU | 없음 (내장 그래픽만) |
| OS | Ubuntu 22.04 / Windows 11 |
모델별 CPU 실측 결과
프롬프트: "파이썬으로 간단한 웹 크롤러를 만들어줘. requests와 BeautifulSoup을 사용해서." (동일 프롬프트로 3회 평균)
| 모델 | 첫 토큰까지 | 생성 속도 | RAM 사용량 | 체감 평가 |
|---|---|---|---|---|
| llama3.2:3b | ~1.2초 | ~18 tok/s | ~3.2GB | 쾌적 |
| phi-3:3.8b | ~1.5초 | ~15 tok/s | ~3.8GB | 쾌적 |
| llama3.1:8b | ~3초 | ~8 tok/s | ~6.5GB | 기다릴 만함 |
| mistral:7b | ~2.8초 | ~9 tok/s | ~5.8GB | 기다릴 만함 |
| qwen2.5:7b | ~3.2초 | ~7 tok/s | ~6.2GB | 기다릴 만함 |
| gemma2:9b | ~4.5초 | ~5 tok/s | ~7.8GB | 좀 느림 |
결론: CPU only에서 3B 모델은 거의 실시간 수준이고, 7~8B 모델도 "기다리면 되는" 수준입니다. 9B 이상은 체감상 좀 답답합니다. 참고로 GPU(RTX 3060 기준)가 있으면 8B 모델이 30~40 tok/s까지 나옵니다.
파이썬 연동 코드
Ollama의 진짜 가치는 CLI 대화가 아니라 프로그래밍으로 연동할 때 나옵니다. 방법이 여러 가지인데, 실용적인 것 위주로 정리합니다.
방법 1: 공식 Python 라이브러리
# 설치
pip install ollama
import ollama
# 기본 사용법 - 단일 응답
response = ollama.chat(
model='llama3.1:8b',
messages=[
{'role': 'user', 'content': '파이썬 리스트 컴프리헨션 예제를 보여줘'}
]
)
print(response['message']['content'])
# 스트리밍 출력 (실시간으로 글자가 나옴)
stream = ollama.chat(
model='llama3.1:8b',
messages=[
{'role': 'user', 'content': 'Flask로 REST API 만드는 방법 알려줘'}
],
stream=True
)
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
방법 2: OpenAI 호환 API (기존 코드 재활용)
이게 꿀입니다. 이미 OpenAI API로 만든 코드가 있다면, base_url만 바꾸면 바로 Ollama로 전환됩니다.
from openai import OpenAI
# 기존 OpenAI 코드에서 이 두 줄만 바꾸면 됨
client = OpenAI(
base_url='http://localhost:11434/v1',
api_key='ollama' # 아무 값이나 넣으면 됨
)
response = client.chat.completions.create(
model='llama3.1:8b',
messages=[
{'role': 'system', 'content': '당신은 시니어 파이썬 개발자입니다.'},
{'role': 'user', 'content': '비동기 처리 패턴을 설명해줘'}
],
temperature=0.7
)
print(response.choices[0].message.content)
방법 3: requests로 직접 호출
외부 라이브러리 설치 없이 requests만으로도 가능합니다.
import requests
import json
def ask_ollama(prompt, model="llama3.1:8b"):
response = requests.post(
"http://localhost:11434/api/generate",
json={
"model": model,
"prompt": prompt,
"stream": False
}
)
return response.json()["response"]
# 사용
result = ask_ollama("파이썬 데코레이터 패턴 3가지 알려줘")
print(result)
실전 예제: 코드 리뷰 봇
실제로 제가 써먹고 있는 코드입니다. Git diff를 받아서 코드 리뷰를 해줍니다.
import ollama
import subprocess
def review_code(file_path):
# git diff로 변경 내용 가져오기
diff = subprocess.run(
["git", "diff", file_path],
capture_output=True, text=True
).stdout
if not diff:
print("변경사항이 없습니다.")
return
prompt = f"""다음 코드 변경 사항을 리뷰해줘.
버그, 성능 이슈, 개선점을 한국어로 알려줘.
{diff}"""
response = ollama.chat(
model='llama3.1:8b',
messages=[
{'role': 'system', 'content': '시니어 개발자로서 코드 리뷰를 해주세요.'},
{'role': 'user', 'content': prompt}
]
)
print(response['message']['content'])
# 사용
review_code("app.py")
API 서버로 활용하기
Ollama를 띄우면 기본적으로 http://localhost:11434에서 API 서버가 동작합니다. 별도 설정 없이도 REST API를 바로 쓸 수 있다는 뜻입니다.
외부 접속 허용하기
기본은 localhost만 접근 가능한데, 같은 네트워크의 다른 PC에서도 접속하려면 환경변수를 설정합니다.
# Linux/Mac - .bashrc 또는 .zshrc에 추가
export OLLAMA_HOST=0.0.0.0:11434
# Windows - 시스템 환경변수에 추가
# 변수명: OLLAMA_HOST
# 값: 0.0.0.0:11434
FastAPI로 감싸서 커스텀 API 만들기
실무에서는 Ollama API를 직접 노출하기보다, FastAPI 같은 걸로 한 번 감싸서 인증이나 로깅을 추가하는 게 좋습니다.
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import ollama
app = FastAPI()
class ChatRequest(BaseModel):
message: str
model: str = "llama3.1:8b"
@app.post("/chat")
async def chat(req: ChatRequest):
try:
response = ollama.chat(
model=req.model,
messages=[{'role': 'user', 'content': req.message}]
)
return {"reply": response['message']['content']}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
# 실행: uvicorn main:app --host 0.0.0.0 --port 8000
클라우드 API 대비 장단점
OpenAI나 Claude API 대신 Ollama를 쓸 이유가 있는지, 냉정하게 비교해봤습니다.
| 항목 | Ollama (로컬) | 클라우드 API |
|---|---|---|
| 비용 | 전기세만 (사실상 무료) | 토큰당 과금 |
| 응답 품질 | 7~8B 모델 수준 | GPT-4o, Claude 수준 |
| 속도 (CPU) | 5~18 tok/s | 50~100 tok/s |
| 프라이버시 | 데이터가 로컬에만 존재 | 서버로 전송됨 |
| 인터넷 | 필요 없음 (오프라인 OK) | 필수 |
| 커스터마이징 | 모델 파인튜닝 가능 | 제한적 |
| 동시 요청 | 하드웨어에 의존 | 높은 동시성 |
| Rate Limit | 없음 | 있음 (과금 필요) |
정리하면: 클라우드 API는 품질과 속도에서 압도적이지만, 비용/프라이버시/오프라인이 중요한 상황에서는 Ollama가 훨씬 유리합니다. 특히 대량 처리 작업(수천 건의 텍스트 분류 같은 것)을 할 때 API 비용이 눈덩이처럼 불어나는데, 로컬에서 돌리면 0원입니다.
실전 활용 시나리오
이론은 그만하고, 실제로 어디에 쓰면 되는지 정리합니다. 직접 써본 것 위주입니다.
1. 오프라인 코딩 어시스턴트
비행기 안에서, 카페 와이파이가 불안정할 때, 또는 보안 네트워크 안에서도 코딩 도우미를 쓸 수 있습니다. VS Code의 Continue 확장이나 Open Interpreter에 Ollama를 연결하면 됩니다.
# Continue 확장 설정 (~/.continue/config.json)
{
"models": [
{
"title": "Ollama - Llama 3.1",
"provider": "ollama",
"model": "llama3.1:8b"
}
]
}
2. 사내 문서 분석 / 요약
회사 내부 문서를 외부 API에 보내기 껄끄러울 때 딱입니다. 회의록 요약, 기술 문서 번역, 사내 규정 Q&A 봇 등을 만들 수 있습니다.
import ollama
from pathlib import Path
def summarize_document(file_path):
text = Path(file_path).read_text(encoding="utf-8")
# 긴 문서는 청크로 나눠서 처리
chunk_size = 3000
chunks = [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)]
summaries = []
for i, chunk in enumerate(chunks):
response = ollama.chat(
model='qwen2.5:7b', # 한국어 문서라면 qwen 추천
messages=[{
'role': 'user',
'content': f'다음 텍스트를 3줄로 요약해줘:\n\n{chunk}'
}]
)
summaries.append(response['message']['content'])
print(f"청크 {i+1}/{len(chunks)} 처리 완료")
return "\n\n".join(summaries)
# 사용
summary = summarize_document("회의록_20260401.txt")
print(summary)
3. 대량 데이터 분류 / 라벨링
수천 건의 고객 리뷰를 긍정/부정으로 분류한다거나, 이메일을 카테고리별로 나누는 작업. API로 하면 수십 달러가 나가지만, 로컬에서는 시간만 들이면 됩니다.
4. 개인 지식 베이스 (RAG)
LangChain이나 LlamaIndex와 Ollama를 연결하면, 내 로컬 파일들을 기반으로 답변하는 개인 AI 어시스턴트를 만들 수 있습니다. 모든 데이터가 내 컴퓨터에만 머무른다는 게 핵심입니다.
5. 프로토타이핑
LLM 기반 서비스를 기획할 때, 일단 Ollama로 빠르게 프로토타입을 만들어보고 동작을 검증한 뒤에 클라우드 API로 전환하는 전략이 비용 면에서 효율적입니다.
삽질 줄이는 팁
직접 쓰면서 겪은 문제들과 해결 방법입니다.
RAM이 부족할 때
모델 로딩 시 "out of memory"가 나오면:
- 더 작은 모델로 변경 (8B → 3B)
- 양자화 수준 변경:
ollama run llama3.1:8b-q4_0(더 작은 양자화) - 다른 프로그램을 닫아서 RAM 확보
OLLAMA_NUM_PARALLEL=1환경변수로 병렬 처리 제한
모델이 한국어를 못 알아들을 때
시스템 프롬프트에 명시적으로 한국어를 지정하면 효과가 있습니다.
ollama.chat(
model='llama3.1:8b',
messages=[
{'role': 'system', 'content': '반드시 한국어로 답변하세요.'},
{'role': 'user', 'content': '질문 내용'}
]
)
그래도 안 되면 qwen2.5:7b 모델로 변경을 추천합니다. 한국어 성능 차이가 체감됩니다.
응답이 너무 느릴 때
num_ctx값을 줄여봄 (기본 4096 → 2048)- 스트리밍을 켜서 첫 응답을 빨리 받도록 함
- CPU 스레드 수 조절:
OLLAMA_NUM_THREADS=8
# 컨텍스트 길이를 줄여서 속도 향상
ollama.chat(
model='llama3.1:8b',
messages=[{'role': 'user', 'content': '질문'}],
options={'num_ctx': 2048}
)
커스텀 모델 만들기 (Modelfile)
특정 시스템 프롬프트를 기본으로 넣고 싶거나, 파라미터를 고정하고 싶을 때 Modelfile을 활용합니다.
# Modelfile 작성
FROM llama3.1:8b
SYSTEM "당신은 한국어로 답변하는 시니어 파이썬 개발자입니다. 코드 예제를 항상 포함해서 설명합니다."
PARAMETER temperature 0.3
PARAMETER num_ctx 4096
# 커스텀 모델 생성
ollama create my-coding-assistant -f Modelfile
# 사용
ollama run my-coding-assistant
마무리
Ollama는 "로컬 LLM"이라는 개념을 극도로 쉽게 만들어준 도구입니다. GPU 없이 CPU만으로도 3B~8B 모델을 충분히 돌릴 수 있고, 특히 프라이버시가 중요하거나 오프라인 환경이 필요한 경우에는 사실상 유일한 선택지입니다.
물론 GPT-4o나 Claude 같은 최상위 모델의 품질에는 미치지 못합니다. 하지만 모든 작업에 최상위 모델이 필요한 건 아닙니다. 간단한 코드 생성, 텍스트 분류, 문서 요약 같은 작업은 8B 모델로도 충분합니다.
클라우드 API와 로컬 LLM을 상황에 맞게 섞어 쓰는 게 현실적인 최선이라고 생각합니다. 비용이 중요하면 로컬, 품질이 중요하면 클라우드. 이 글이 판단 기준을 잡는 데 도움이 되었으면 합니다.