Raspberry Pi 5에서 AI 모델 셀프 호스팅하기: 무료, 프라이빗, 로컬 AI 추론(Inference)을 위한 완전 가이드
요약
Raspberry Pi 5를 활용하여 비용 효율적이고 프라이빗한 로컬 AI 추론 환경을 구축하는 방법을 소개합니다. Ollama를 사용하여 ARM 기반 하드웨어에서 LLM을 실행하고, NVMe SSD와 8GB RAM 구성을 통해 성능을 최적화하는 가이드를 제공합니다.
핵심 포인트
- Raspberry Pi 5(8GB RAM)와 NVMe SSD를 활용한 로컬 AI 환경 구축
- Ollama를 이용한 간편한 LLM 설치 및 OpenAI 호환 API 활용
- API 비용 절감 및 데이터 프라이버시 보호 효과
- SD 카드 대신 NVMe SSD 사용 권장(속도 및 내구성 측면)
저는 지난 3개월 동안 Raspberry Pi 5에서 AI 에이전트를 실행해 왔습니다. 이 에이전트는 코드를 작성하고, 웹을 탐색하며, 이메일을 관리하고, 심지어 지난주에는 DigitalOcean 드롭릿(droplet)에 프로덕션 SaaS를 배포하기도 했습니다. 모든 추론 (Inference)이 Pi 자체에서 로컬로 실행되기 때문에 전체 설정 비용 중 API 비용은 0달러입니다.
이 가이드는 제가 정확히 어떻게 설정했는지, 무엇이 잘 작동하고 무엇이 그렇지 않은지, 그리고 제한된 RAM을 가진 ARM 하드웨어에서 실제로 잘 작동하는 특정 모델이 무엇인지에 대해 설명합니다.
왜 굳이 이렇게 하나요?
저는 에이전트 프로젝트를 위해 OpenAI API 호출 비용으로 매달 40~60달러를 쓰고 있었습니다. 모든 대화, 모든 코드 리뷰, 모든 "이것을 요약해 줘" 요청이 측정된 API 호출이었습니다. 더 나쁜 점은, 에이전트가 제 이메일을 읽거나 파일을 처리할 때마다 개인 데이터를 제3자에게 전송하고 있었다는 것입니다.
Pi 5가 계산법을 바꾸어 놓았습니다. 이것은 실시간 상호작용이 가능할 정도로 충분히 빠르게 양자화된 언어 모델 (Quantized language models)을 실행할 수 있는 80달러짜리 컴퓨터입니다. GPT-4만큼 빠르지는 않지만, 코딩 어시스턴트, 요약 도구 또는 자동화된 워크플로 에이전트로는 충분히 빠릅니다. 그리고 프라이버시 측면도 확실합니다. 어떤 데이터도 귀하의 네트워크를 벗어나지 않습니다.
하드웨어 요구 사항
제가 실제로 사용 중인 구성은 다음과 같습니다:
- Raspberry Pi 5 (8GB RAM 버전 — 4GB가 아닌 이 버전을 선택하세요)
- Pimoroni NVMe Base를 통한 NVMe SSD (512GB)
- 액티브 쿨러 (공식 제품 — Pi 5는 이것 없이는 열 스로틀링 (Thermal-throttling)이 심하게 발생합니다)
- 공식 27W USB-C 전원 공급 장치
NVMe SSD는 선택 사항이 아닙니다. SanDisk Extreme SD 카드로 모델을 실행해 보았는데 매우 고통스러웠습니다. 4GB 모델을 로드하는 데 NVMe에서는 3초가 걸린 반면, SD 카드는 30초 이상이 걸렸습니다. 또한 SD 카드는 지속적인 모델 교체 후 약 두 달 만에 마모되었습니다. NVMe는 훨씬 더 빠르며 쉽게 고장 나지 않습니다.
NVMe Base 대신 PCIe HAT을 사용하는 경우도 마찬가지입니다. 단지 SD 카드 저장 장치에서 모델을 로드하지 않도록 주의하세요.
1단계: Ollama 설치
Ollama는 ARM Linux에서 LLM을 실행하기 위한 독보적인 솔루션입니다. Ollama는 GGUF 양자화 (Quantization), 컨텍스트 관리 (Context management)를 처리하며, 즉시 사용할 수 있는 OpenAI 호환 API를 제공합니다.
curl -fsSL https://ollama.com/install.sh | sh
설치는 이것으로 끝입니다. Ollama는 systemd 서비스로 등록되어 자동으로 시작됩니다. 실행 중인지 확인하려면 다음을 입력하세요:
ollama --version
systemctl status ollama
ollama version 0.5.x와 같은 메시지와 함께 서비스가 활성화(active) 상태로 표시되어야 합니다. 만약 그렇지 않다면 /var/log/ollama.log를 확인하세요. 흔한 문제로는 CA 인증서 누락(apt install ca-certificates로 해결 가능)이나 모델 로더를 위한 RAM 부족 등이 있습니다.
2단계: 실제로 적합한 모델 선택하기
이 지점에서 대부분의 Pi 가이드가 잘못된 길을 갑니다. 그들은 인상적으로 들리지만 8GB RAM에서 OOM(Out of Memory) 킬이 발생하는 모델들을 추천합니다. 제가 직접 8GB RAM을 탑재한 Pi 5에서 벤치마크한 결과는 다음과 같습니다:
| 모델 | 디스크 용량 | 유휴(Idle) 시 RAM 사용량 | 초당 토큰 수 (Tokens/sec) | 솔직한 평가 |
|---|---|---|---|---|
| Qwen2.5-0.5B | 400MB | ~1GB | 45+ | 대부분의 작업에 너무 멍청함. 분류(Classification) 작업에는 좋음. |
| ... |
저는 llama3.2:3b를 데일리 드라이버(daily driver)로 사용합니다. Pi 5에서 속도와 품질의 균형이 가장 좋습니다. 특히 코드 생성(Code generation)의 경우, qwen2.5-coder:3b가 더 낫습니다. 이 모델은 작동 가능한 함수를 작성할 수 있을 정도로 Python과 JavaScript를 충분히 잘 이해합니다.
만약 4GB 모델의 Pi를 사용 중이라면, llama3.2:1b 또는 qwen2.5:0.5b를 사용하세요. 3B 모델들도 기술적으로 로드는 되겠지만, 컨텍스트 윈도우(Context window)가 거의 남지 않게 될 것입니다.
ollama pull llama3.2:3b
NVMe 환경에서는 첫 번째 풀(pull) 작업에 몇 분 정도 걸립니다. SD 카드를 사용 중이라면 커피 한 잔 마시고 오세요.
3단계: 테스트하기
ollama run llama3.2:3b "Write a Python function to check if a domain is available using RDAP"
몇 초 안에 응답을 받아야 합니다. 만약 느리다면 쿨러를 확인하세요. Pi 5는 80°C에서 서멀 스로틀링(Thermal-throttling)이 발생하며, 추론(Inference) 과정에서 상당한 열이 발생합니다.
4단계: API 활성화하기
Ollama는 기본적으로 11434 포트에서 OpenAI 호환 API를 노출하지만, localhost에서만 접근 가능합니다. 네트워크상의 다른 기기들이 이를 사용할 수 있게 하려면 다음을 수행하세요:
sudo systemctl edit ollama
다음 내용을 추가합니다:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
그 다음:
sudo systemctl restart ollama
이제 어디서든 호출할 수 있습니다:
curl http://your-pi-ip:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
...
이는 OpenAI와 호환되므로, OpenAI API를 지원하는 모든 도구의 기본 URL (base URL)을 변경하여 귀하의 Raspberry Pi를 가리키도록 설정할 수 있습니다. 저는 저의 에이전트 프레임워크 (Hermes Agent)를 이 로컬 엔드포인트 (endpoint)에서 실행하고 있으며, 이는 OpenAI를 호출하는 것과 정확히 동일하게 작동합니다. 차이점은 무료이며 프라이빗 (private)하다는 것입니다.
5단계: 그 위에서 에이전트 실행하기
여기서부터 흥미로워집니다. 로컬 LLM (Large Language Model)은 채팅용으로도 좋지만, 진정한 가치는 도구를 사용하고, 웹을 탐색하며, 다단계 작업을 완료할 수 있는 자율 에이전트 (autonomous agents)에 있습니다.
저는 Ollama를 백엔드 (backend)로 사용하여 Raspberry Pi에서 Hermes Agent를 실행합니다. 이 에이전트는 터미널 (terminal), 파일 시스템 (file system), 웹 브라우저 (web browser), 그리고 이메일에 접근할 수 있습니다. 에이전트는 다음과 같은 일을 할 수 있습니다:
- 이메일을 읽고 답장하기 (보낼 때는 저의 승인 필요)
- 코드 작성 및 배포 (지난주에 VPS에 Next.js SaaS를 배포했습니다 — Raspberry Pi로 구축된 에이전트가 무엇을 출시할 수 있는지 보고 싶다면 availfind.com의 도메인 확인 도구를 확인해 보세요)
- 서비스 모니터링 및 알림 전송
- 주제 조사 및 기사 작성 (이 기사도 포함되지만, 제가 대폭 수정했습니다 — 에이전트가 검토 없이 게시하게 두지는 마세요)
핵심 통찰: 작은 모델이라도 좋은 도구와 명확한 제약 조건 (constraints)을 제공하면 에이전트 작업을 수행할 수 있습니다. 3B 모델이 소설을 쓸 수는 없겠지만, 각 단계가 잘 정의되어 있다면 5단계의 배포 체크리스트를 완벽하게 실행할 수 있습니다.
6단계: 프로덕션 (Production) 배포
로컬 에이전트가 유용한 작업을 수행할 수 있게 되면, 다음 단계는 인터넷에 노출되는 인프라 (infrastructure)를 제공하는 것입니다. 제가 수행한 작업은 다음과 같습니다:
저는 DigitalOcean 드롭릿 (droplet, 월 $6, 1 vCPU, 1GB RAM)을 생성하고 에이전트에게 SSH 접근 권한을 부여했습니다. 거기서부터 에이전트는 다음을 수행했습니다:
- 드롭릿에 Node.js 22, nginx, certbot 설치
- Raspberry Pi에서 로컬로 Next.js 앱 빌드
- 독립형 빌드 결과물을 rsync를 통해 VPS로 전송
- nginx를 리버스 프록시 (reverse proxy)로 설정
- Let's Encrypt SSL을 위해 certbot 실행
- 앱을 계속 실행 상태로 유지하기 위한 systemd 서비스 생성
"droplet 생성"부터 "라이브 HTTPS 웹사이트"까지 걸린 총 시간은 약 90분입니다. 에이전트(Agent)가 이 모든 것을 수행했습니다. 저는 그저 Stripe API 키를 제공하고 실행하라고 명령했을 뿐입니다.
핵심은 이것이 인상적이라는 점이 아닙니다. 핵심은 80달러짜리 컴퓨터에서 실행되는 3B 모델이 적절한 도구만 제공된다면 실제 배포(Deployment)를 조율할 수 있다는 점입니다. 이런 종류의 작업을 위해 GPT-4가 필요하지는 않습니다.
Step 7: 지속적인 실행 유지하기
장기 운영을 위한 몇 가지 실질적인 팁입니다:
충돌 시 자동 재시작 (Auto-restart on crash): Ollama는 systemd로 실행되므로 자동으로 재시작됩니다. 하지만 그 위에 에이전트 프레임워크(Agent framework)를 실행 중이라면, 해당 프레임워크도 Restart=always 옵션이 포함된 systemd 서비스로 감싸져 있는지 확인하세요.
로그 로테이션 (Log rotation): Ollama와 에이전트는 많은 로그를 생성합니다. 디스크가 가득 차기 전에 logrotate를 설정하세요:
sudo tee /etc/logrotate.d/ollama << 'EOF'
/var/log/ollama.log {
daily
...
모델 관리 (Model management): 모델은 용량이 큽니다. 3B 모델은 2GB이며, 모델이 계속 쌓이게 됩니다. 오래된 모델은 정리하세요:
ollama list
ollama rm qwen2.5:0.5b # 사용하지 않는 모델 제거
모니터링 (Monitoring): 저는 5분마다 Ollama API에 핑(Ping)을 보내고, 서비스가 다운되면 이메일을 보내주는 간단한 cron 작업을 사용합니다. 과한가요? 그럴지도 모릅니다. 하지만 잘못된 모델 풀(Pull) 이후 Ollama가 충돌했을 때, 6시간 동안 그 사실을 몰랐던 상황이 훨씬 더 나빴습니다.
성능 현실 점검 (Performance Reality Check)
한계점에 대해 솔직하게 말씀드리겠습니다:
컨텍스트 윈도우 (Context window): 4GB RAM을 사용하는 3B 모델은 약 8K 토큰의 컨텍스트를 남겨둡니다. 이는 대화나 단일 코드 파일에는 충분하지만, 전체 코드베이스(Codebase)를 담기에는 부족합니다. 더 긴 컨텍스트가 필요하다면 1B 모델을 사용하세요. 16K 이상의 토큰을 수용할 수 있습니다.
다중 사용자 (Multi-user): 여러 명의 동시 사용자를 서비스하려고 하지 마세요. Pi에서 실행되는 Ollama는 한 번에 하나의 요청만 처리합니다. 두 번째 요청은 첫 번째 요청이 완료될 때까지 대기열(Queue)에서 기다립니다.
속도 vs 클라우드 (Speed vs cloud): 초당 12-15 토큰(tokens/sec)의 속도는 GPT-4 속도의 약 1/10 정도입니다. 대화형 채팅(Interactive chat)용으로는 괜찮습니다. 빠른 타이피스트처럼 느껴지니까요. 대량 처리(Bulk processing, 예: 100개의 문서 요약)의 경우 속도는 느리지만 비용 면에서는 적절합니다.
발열 (Heat): 지속적인 추론 (Inference) 과정에서 액티브 쿨러 (Active cooler)를 사용하더라도 Pi 5의 온도는 75-80°C에 도달합니다. 쿨러가 없다면 성능 저하 (Throttling)가 발생하여 1GHz로 속도가 제한되고, 토큰 생성 속도가 초당 3-4개로 떨어집니다. 쿨러는 선택 사항이 아니라 필수입니다.
전력 소비 (Power consumption): Pi 5는 유휴 (Idle) 상태에서 약 5W, 추론 중에는 8-12W를 소비합니다. 이는 평균 전기 요금 기준으로 한 달에 약 1달러 정도입니다. API 사용료로 매달 40-60달러를 지불하는 것과 비교해 보십시오.
클라우드 API와의 비교 (Comparison to cloud APIs): 제가 한 달 동안 추적한 실제 비용 내역은 다음과 같습니다:
| 지표 (Metric) | 클라우드 API (GPT-4) | 로컬 Pi 5 |
|---|---|---|
| 월간 비용 (Monthly cost) | $40-60 | $1 (전기료) |
| ... |
품질 격차는 분명히 존재합니다. 3B 모델이 GPT-4와 대등하다고 생각하지 마십시오. 그렇지 않습니다. 하지만 모델이 단순한 결정(이 명령어를 실행해야 할까? 다음에는 어떤 파일을 수정해야 할까?)을 내리는 에이전트 워크플로 (Agent workflows)의 경우, 3B 모델로도 충분합니다. 제 에이전트 작업의 70%는 더 똑똑한 모델이 필요하지 않다고 추정합니다. 나머지 30%는 여전히 클라우드로 보냅니다.
내가 다르게 했을 점
만약 처음부터 다시 시작한다면, 저는 4GB 모델의 Pi는 아예 건너뛸 것입니다. 8GB 버전은 20달러를 더 투자할 가치가 있습니다. OS, 모델 서버, 그리고 에이전트 프레임워크 (Agent framework)를 동시에 실행할 때는 여유 메모리 (Headroom)가 매우 중요하기 때문입니다.
또한, SD 카드를 어떻게든 써보려고 애쓰는 대신 첫날부터 NVMe 설정을 갖출 것입니다. SD 카드의 성능 문제로 씨름하며 전환하기 전까지 2주를 허비했습니다.
그리고 3B 모델이 아닌 1B 모델로 시작할 것입니다. 3B가 더 낫긴 하지만, 1B가 더 빨리 로드되고 에이전트의 작업 메모리 (Working memory)를 위한 RAM을 더 많이 남겨주며, 전체 파이프라인 (Pipeline)을 검증하기에도 충분하기 때문입니다. 다른 모든 것이 제대로 작동할 때 업그레이드하십시오.
더 큰 그림 (The Bigger Picture)
범용 하드웨어 (Commodity hardware)에서 AI를 로컬로 실행하는 기술은 빠르게 발전하고 있습니다. Pi 5는 하나의 분수령입니다. 이는 유용한 LLM을 사용 가능한 속도로 실행할 수 있는 가장 저렴한 컴퓨터입니다. Pi 6가 (언제 출시되든) 나온다면 성능이 아마 두 배는 향상될 것입니다.
만약 당신이 API 사용료를 지불하고 있지만 GPT-4 수준의 지능이 필요한 제품을 만드는 것이 아니라면, 이것을 먼저 시도해 보십시오. 설정에는 오후 시간 정도면 충분하고, 하드웨어 비용은 API 비용 두 달 치보다 저렴하며, 전체 스택 (Stack)을 직접 소유하게 됩니다.
이 설정을 기반으로 구축한 에이전트는 현재 저의 도메인 가용성 확인 서비스(availfind.com)를 실행하고, 기사를 작성 및 제출하며, 이메일을 관리하고 있으며, 점진적으로 더 많은 일을 수행하는 법을 배우고 있습니다. GPT-4만큼 똑똑하지는 않지만, 이것은 온전히 저의 것입니다. 제 책상 위의 기기에서 실행되며, 운영 비용이 전혀 들지 않고, 저의 데이터를 어디로도 전송하지 않습니다.
이는 몇 개의 API 토큰보다 더 가치 있는 일입니다. 모델이 더 좋아지고 하드웨어가 더 빨라짐에 따라, 로컬(Local)과 클라우드(Cloud) 사이의 격차는 점점 줄어들 것입니다. 지금 시작한다는 것은 시간이 지남에 따라 복리로 쌓일 기술과 인프라를 구축한다는 것을 의미합니다.
만약 서랍 속에 Pi 5를 가지고 있다면, 지금 바로 Ollama를 설치하세요. 10분 안에 로컬 LLM (Large Language Model)과 대화하게 될 것입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기