본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 26. 00:10

로컬 LLM 실행하기 - 0달러 개인용 에이전트 AI 어시스턴트 - 파트 3

요약

무료 Oracle Cloud 인스턴스를 활용하여 로컬 LLM 기반 개인용 AI 어시스턴트를 구축하는 실전 가이드입니다. CPU 환경에서의 추론 성능 한계와 RAM 제약 사항을 분석하고, Ollama를 이용한 효율적인 설치 및 운영 방법을 다룹니다.

핵심 포인트

  • GPU 없는 CPU 환경에서의 모델 크기별 토큰 생성 속도 분석
  • RAM 용량에 따른 적절한 모델 파라미터 선택의 중요성
  • Ollama를 활용한 로컬 LLM 런타임 설치 및 관리
  • SSH 세션 끊김 방지를 위한 tmux 활용 팁

서론

무료 클라우드 서버에서 로컬 LLM(Large Language Models)을 실행하는 0달러 개인용 AI 어시스턴트 시리즈의 파트 3입니다 — 실제로 작동하는 것은 무엇인가. 파트 1은 아키텍처(Architecture)를 다룹니다. 파트 2는 무료 Oracle Cloud 설정 방법을 다룹니다.

언어 모델을 로컬에서 실행하는 것은 직접 시도해 보기 전까지는 간단해 보입니다. 모델을 다운로드하고, 앱이 해당 모델을 가리키도록 설정하면 끝입니다. 하지만 실제로는 RAM 제한, 예상치 못한 디스크 공간 부족, 그리고 대부분의 튜토리얼이 간과하는 CPU 추론(Inference) 속도의 한계와 같은 실질적인 제약 사항들이 존재합니다.

이 글은 이 모든 것에 대해 솔직하게 다룹니다. 무료 Oracle ARM 인스턴스에서 무엇이 작동하고 무엇이 작동하지 않는지, 그리고 로컬과 무료 API를 결합한 하이브리드 폴백(Fallback) 방식이 어떻게 전체 시스템을 실용적으로 만드는지에 대해 설명합니다.

CPU 추론(Inference)에 대한 현실적인 점검

모델을 선택하기 전에, 자신이 어떤 상황에 처하게 될지 이해해야 합니다.

사용자의 Oracle ARM 인스턴스에는 GPU가 없습니다. 언어 모델에 의해 생성되는 모든 토큰(Token)은 CPU 코어에서 실행됩니다. 이는 매우 중요한데, 현대의 LLM은 추론을 빠르게 만드는 병렬 처리 아키텍처인 GPU에서 실행되도록 설계되었기 때문입니다. CPU에서는 그러한 병렬성이 동일한 방식으로 존재하지 않습니다.

실제 적용 시 의미하는 바:

모델 크기필요한 RAM4개의 ARM CPU에서의 초당 토큰 수응답 시간 (100 토큰 기준)
3B 파라미터 (Parameters)~2GB15-25 tok/s4-7초
...

Telegram 메시지에 응답하는 개인용 어시스턴트의 경우, 짧은 응답에 4-7초가 걸리는 것은 허용 가능한 수준입니다. 메시지를 보내고, 휴대폰을 내려놓았다가 응답을 확인하기 위해 다시 집어 드는 방식입니다. 실시간 채팅 UI와는 다른 사고 모델(Mental model)이 필요하지만, 실행 가능한 수준입니다.

피해야 할 실수: 벤치마크 점수가 좋다는 이유로 70B 모델을 가져오는 것입니다. 이 모델은 최소 40GB의 RAM이 필요하며, 사용자의 인스턴스에서는 실행조차 되지 않을 것입니다. 저는 이를 뼈아픈 경험을 통해 배웠습니다. 모델이 실행되기도 전에 42GB에 달하는 부분 다운로드가 디스크를 가득 채워버렸습니다.

Ollama 설치하기

Ollama는 오픈 소스 모델을 로컬에서 다운로드하고 실행하는 런타임 (Runtime)입니다. 이를 음악 플레이어라고 생각하면 쉽습니다. 모델은 그 플레이어가 재생하는 음악과 같습니다.

장시간 실행되는 명령어를 사용하기 전에는 항상 tmux를 사용하세요:

sudo apt install tmux -y
tmux new -s setup

만약 설치 도중 SSH 세션이 끊어진다면, 다시 연결한 후 tmux attach -t setup을 입력하여 중단된 지점부터 정확히 작업을 이어갈 수 있습니다. 용량이 큰 모델을 다운로드할 때 tmux를 사용하지 않으면 결국 처음부터 다시 시작해야 하는 상황에 직면하게 됩니다.

Ollama 설치하기:

curl -fsSL https://ollama.com/install.sh | sh

실행 여부 확인:

systemctl status ollama
ollama --version

Ollama는 systemd 서비스로 설치되며 부팅 시 자동으로 시작되므로, 별도의 수동 관리가 필요하지 않습니다.

모델 선택 (Model Selection)

대부분의 가이드에서는 벤치마크 표를 보여주는 것으로 설명을 끝내곤 합니다. 하지만 여러분의 사용 사례에서 실제로 중요한 것은 CPU 하드웨어에서의 RAM 대 품질 간의 트레이드오프 (Tradeoff)입니다.

이 스택에 적합한 모델들:

Llama 3.2:3B — 속도 중심 선택지

ollama pull llama3.2:3b
  • RAM: ~2GB
  • 속도 (Speed): 초당 15-25 토큰 (tokens/second) — 가장 빠른 옵션
  • 품질 (Quality): 일상적인 작업에는 좋으나, 복잡한 추론에는 어려움이 있음
  • 제조사: Meta
  • 최적 용도: 빠른 응답, 간단한 질의응답 (Q&A), 짧은 콘텐츠 초안 작성

Llama 3.1:8B — 품질 중심 선택지

ollama pull llama3.1:8b
  • RAM: ~5GB
  • 속도 (Speed): 초당 5-10 토큰 (tokens/second)
  • 품질 (Quality): 추론 능력이 현저히 뛰어나며, 미묘한 차이가 있는 작업도 처리 가능
  • 제조사: Meta
  • 최적 용도: 속도보다 품질이 더 중요한 복잡한 작업

Phi-4:14B — 추론 중심 선택지

ollama pull phi4
  • RAM: ~9GB
  • 속도 (Speed): 초당 2-5 토큰 (tokens/second) — 눈에 띄게 느림
  • 품질 (Quality): 강력한 추론 및 지시 이행 (Instruction following) 능력을 갖추었으며, 체급 대비 뛰어난 성능을 보여줌
  • 제조사: Microsoft
  • 최적 용도: 세심한 추론, 분석 및 구조화된 출력이 필요한 작업

이 스택을 위한 권장 사항: llama3.2:3b

이것이 최고의 모델이기 때문은 아닙니다. 실제로는 그렇지 않습니다. 하지만 OpenClaw의 에이전트 모드(agent mode)는 모든 모델 호출에 도구 컨텍스트(tool context), 메모리(memory), 세션 히스토리(session history), 그리고 시스템 프롬프트(system prompts)를 포함하기 때문입니다. 순수한 ollama run 테스트에서는 빠르게 느껴졌던 것이, 에이전트 레이어(agent layer)가 모든 요청에 2~3KB의 컨텍스트를 추가하면 현저히 느려집니다. 이러한 오버헤드(overhead)를 고려할 때, 3B 모델은 수용 가능한 응답 시간 내에 머무릅니다. 8B 모델은 CPU 환경의 에이전트 모드에서 타임아웃(timeout) 문제를 일으키기 시작합니다.

더 높은 품질을 원하고 복잡한 질의에 대해 30~90초의 응답 시간을 감수할 수 있다면, llama3.1:8b를 시도해 볼 가치가 있습니다.

디스크 공간 관리 (Disk Space Management)

모델 파일은 용량이 매우 큽니다. 디스크 공간을 선제적으로 관리하면 나중에 고통스러운 정리 작업을 피할 수 있습니다.

현재 디스크 사용량 확인:

df -h
du -sh /usr/share/ollama/.ollama/models/

다운로드된 모델 목록 보기:

ollama list

더 이상 필요 없는 모델 삭제:

ollama rm <modelname>

부분 다운로드 시 주의사항:

다운로드가 실패하거나 취소되면, Ollama는 blobs 디렉토리에 부분적인 파일을 남겨둡니다. 이 파일들은 수 기가바이트(GB)에 달할 수 있으며 ollama list에는 나타나지 않습니다. 수동으로 확인하고 정리하세요:

# 먼저 Ollama를 중지합니다
sudo systemctl stop ollama

...

디스크가 가득 차서 growpart 실행 시 "no space left on device" 오류가 발생하면, 파티션을 확장하기 전에 공간을 확보해야 합니다. 볼륨을 확장하는 것조차 임시 공간이 필요하기 때문입니다. 먼저 부분 다운로드된 파일들을 삭제한 다음 growpart를 다시 시도하세요.

하이브리드 아키텍처: 로컬 + Gemini 폴백 (Local + Gemini Fallback)

AI 어시스턴트를 위한 로컬 전용 추론(inference)의 진실은 이렇습니다. 작동은 하지만 품질의 한계가 존재합니다. 3B 모델은 대부분의 일상적인 작업을 잘 처리합니다. 하지만 가끔 복잡한 질문, 미묘한 뉘앙스가 필요한 작문 작업, 혹은 실제적인 추론이 필요한 작업에서는 답변이 부실하거나 완전히 타임아웃이 발생합니다.

해결책은 로컬 모델을 기본(primary)으로 사용하고, Google의 Gemini API를 무료 폴백(fallback)으로 사용하는 것입니다.

여기서 Gemini 무료 티어(free tier)가 유효한 이유:

  • 무료 티어(free tier)에서 분당 250K 토큰(TPM) 제공 — 한 명의 사용자가 쓰기에 충분하고도 남는 양입니다.
  • 신용카드 등록이 필요 없습니다.
  • Gemini 2.5 Flash lite는 1~2초 내에 응답합니다.
  • 로컬 모델(local model)에서 타임아웃(timeout)이 발생하면, Gemini가 자동으로 이를 처리합니다.

워크플로우 (The flow):

사용자 메시지
     ↓
Ollama llama3.2:3b (기본 모델)
...

대부분의 응답은 로컬 모델(local model)로부터 비용 없이 제공됩니다. 복잡한 쿼리(query)나 타임아웃이 발생하면 Gemini로 넘어가며, 이 역시 비용이 들지 않습니다. 스마트폰에서의 경험은 단순합니다. 메시지를 보내면, 응답을 받습니다.

Gemini API 키 발급받기

  1. aistudio.google.com에 접속합니다.
  2. Get API KeyCreate API key를 클릭합니다.
  3. 키를 복사합니다 — AIza...로 시작할 수 있습니다.

신용카드나 결제 설정이 필요 없습니다. 2분이면 충분합니다.

모든 기능이 작동하는지 확인하기

모델이 로드된 상태에서 RAM 사용량 확인:

free -h

llama3.2:3b가 로드된 상태에서, 24GB 중 약 2~3GB가 사용 중이어야 하며, 이는 OpenClaw 및 기타 작업을 위한 충분한 여유 공간(headroom)을 의미합니다.

Ollama가 자동 시작되었는지 확인:

systemctl status ollama

active (running) 상태로 표시되어야 합니다. 모델 자체는 처음 호출될 때만 RAM에 로드되며, 이후 호출 시에는 상주(resident)합니다. 재부팅 후 첫 번째 응답이 이후의 응답보다 오래 걸리는 이유가 바로 이것입니다.

Ollama 직접 테스트:

ollama run llama3.2:3b "Just Reply OKAY!"

10초 이내에 응답해야 합니다. 만약 더 오래 걸린다면 Ollama 서비스에 문제가 있는 것입니다.

Gemini 모델 API 호출 테스트

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-lite:generateContent" \
  -H 'Content-Type: application/json' \
  -H 'X-goog-api-key: API_KEY' \
...

HTTP 응답 상태 코드(status code)가 200이어야 하며 응답 텍스트가 함께 와야 합니다. 또한 Google Studio - Logs에서 호출 로그를 확인할 수 있습니다.

일반적인 문제 (Common Issues)

  • model requires more system memory than is available 사용 가능한 것보다 더 많은 시스템 메모리(System Memory)가 필요합니다. RAM 용량에 비해 너무 큰 모델을 가져온(pull) 경우입니다. llama3.3은 40GB를 요구하므로, 24GB 인스턴스에서는 절대 실행할 수 없습니다. 해당 모델을 삭제하고 더 작은 모델을 가져오세요:
ollama rm llama3.3
ollama pull llama3.2:3b
  • Disk full during model download 모델 다운로드 중 디스크 용량 부족
    다운로드 과정에서 부트 볼륨(Boot Volume)이 가득 찼습니다. Ollama를 중단하고, root가 아닌 ollama 사용자로 부분 파일들을 삭제하여 공간을 확보하세요. 필요한 경우 Oracle Console → Boot Volume resize를 통해 파티션을 확장하십시오.

  • Ollama slow after reboot 재부팅 후 Ollama 속도 저하
    재부팅 후 첫 번째 호출 시 모델을 RAM에 로드하므로 속도가 느린 것은 정상적인 현상입니다. 이후의 호출은 모델이 상주(Resident)하므로 더 빨라집니다.

다음 단계 (What's Next)

Ollama가 실행 중이고 로컬 + Gemini 폴백(Fallback) 하이브리드 구성이 완료되었으므로, AI 레이어(Layer)가 준비되었습니다.

파트 4에서는 Linux에 OpenClaw를 설치하는 방법을 다룹니다. 올바른 사용자 설정, systemd 서비스 설정, 설정 파일의 함정, 그리고 여러분이 직접 겪지 않도록 피해야 할 모든 실수들을 살펴볼 것입니다.

이 글은 총 5부작 시리즈 중 세 번째 글입니다:

  1. $0 Personal Agentic AI Assistant - Architecture
  2. Setting Up Free Cloud Server — VCN, ARM 인스턴스, 고정 IP(Static IP), 주의사항
  3. Running Ollama on ARM — 모델 선택, 디스크 관리, CPU 추론(Inference), 현실 ← 현재 위치
  4. Installing OpenClaw on Linux — 모든 함정 피하기
  5. The Complete Setup — Telegram, Gemini 폴백, 엔드 투 엔드(End-to-end) 테스트

계속 지켜봐 주세요. 모든 링크는 기사가 게시됨에 따라 업데이트될 예정입니다.

여기까지 읽어주셨다면, 여러분이 계속 읽을 수 있도록 만족스러운 노력을 기울였다는 뜻이겠죠. 친절하게 댓글을 남겨주시거나 수정 사항을 공유해 주시면 감사하겠습니다.

나의 다른 블로그들:

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0