본문 바로가기
AI 도구 비교

Ollama로 로컬 LLM 돌리기 - GPU 없이도 가능한 방법

by 소개왕 탑백귀 2026. 4. 5.

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을 상황에 맞게 섞어 쓰는 게 현실적인 최선이라고 생각합니다. 비용이 중요하면 로컬, 품질이 중요하면 클라우드. 이 글이 판단 기준을 잡는 데 도움이 되었으면 합니다.