Files
obsidian/infra/platform/ollama.md
kaffa 08313cd4d4 infra/platform/ollama: add GPU and VRAM details
GTX 1080 Ti(11GB VRAM, CUDA 12.4) GPU 가속 확인. gemma4:e4b 로드 시
10GB 점유(89%), 동시 로드 한계·GPU 공유 제약·36 tok/s 실측치 추가.
infra-hosts.md §GPU 링크.
2026-04-21 12:29:11 +09:00

88 lines
4.1 KiB
Markdown

---
title: Ollama — LLM 로컬 추론 엔드포인트
updated: 2026-04-21
tags: [infra, llm, ollama, inference, gpu]
---
## 개요
kr1 호스트에 직접 설치된 Ollama 런타임. 컨테이너 아닌 **호스트 systemd service**. **GTX 1080 Ti GPU 가속** (CPU 추론 아님). tailnet 전체에서 단일 엔드포인트로 공유.
| 항목 | 값 |
|------|-----|
| 위치 | incus-kr1 호스트 (컨테이너 아님) |
| 서비스 | `ollama.service` (systemd, User=ollama, Restart=always) |
| 버전 | 0.20.2 |
| 바이너리 | `/usr/local/bin/ollama` |
| GPU | NVIDIA GeForce GTX 1080 Ti (VRAM 11GB, CUDA 12.4, 드라이버 550.163.01) — [[infra-hosts#GPU]] 참조 |
| 엔드포인트 | `http://100.84.111.28:11434` (Tailscale IP, tailnet 공유) |
| 바인딩 | `0.0.0.0:11434` (`OLLAMA_HOST=0.0.0.0`) |
| 인증 | 없음 (tailnet 내부 전용, WAN 노출 아님) |
| 모델 저장소 | `/usr/share/ollama/.ollama` (12GB 사용) |
| Keep-alive | 무제한 (`OLLAMA_KEEP_ALIVE=-1`) — 모델 언로드 안 함 |
## 설치된 모델
| 모델 | 크기 | Capability | 용도 |
|------|------|------------|------|
| `qwen3:4b-instruct-2507-q4_K_M` | 2.5 GB | tools | 경량 tool-calling, 빠른 응답 |
| `gemma4:e4b` | 9.6 GB | tools, thinking, vision, audio | 멀티모달 + tool-calling, 에이전트 기본값 |
Capability는 `/api/show` 응답의 `capabilities` 필드로 확인.
## GPU 자원
- gemma4:e4b (9.6 GB 모델) 로드 시 VRAM **10,062 MiB / 11,264 MiB (89%)** 점유.
- `OLLAMA_KEEP_ALIVE=-1` 때문에 한 번 로드되면 메모리 상주 — 자동 언로드 없음.
- **모델 동시 로드 한계**: gemma4:e4b 로드 상태에서 qwen3:4b를 추가 로드하려면 VRAM 부족 → 하나를 수동 언로드해야 함 (`/api/generate` 호출 시 `keep_alive: 0`).
- 현재 GPU 공유 사용 프로세스는 Ollama 단독. K3s나 Incus 컨테이너가 GPU를 쓰지 않음.
- 관측 처리 속도: gemma4:e4b tool-calling 루프에서 약 **36 tok/s** (2026-04-21 실측).
## 접근 방법
### 모델 목록
```bash
curl -sS http://100.84.111.28:11434/api/tags | jq
```
### Tool-calling chat (OpenAI-style)
```bash
curl -sS http://100.84.111.28:11434/api/chat -d '{
"model": "gemma4:e4b",
"messages": [{"role":"user","content":"..."}],
"tools": [ { "type":"function", "function": {...} } ],
"stream": false,
"options": {"temperature": 0.2, "num_ctx": 8192}
}'
```
### 모델 pull (필요 시)
ollama 사용자만 가능. kr1 호스트에서:
```bash
sudo -u ollama ollama pull <model>
```
## 검증된 용도
| 일시 | 용도 | 결과 |
|------|------|------|
| 2026-04-21 | `agent.py` stdio 에이전트 루프 (gemma4:e4b, tools 2개, Obsidian 탐색) | 6턴 만에 최종 답변 성공. tool calling·한국어 응답 정상. `~/experiments/ollama-agent/` |
## 보안
- **바인딩은 `0.0.0.0`이지만 노출 범위는 tailnet에 한정**. kr1 호스트의 외부 인터페이스(WAN)는 방화벽으로 차단. Tailscale을 통해서만 11434 포트 도달 가능.
- 인증·TLS 없음. 별도 프록시를 붙이지 않음 (tailnet 신뢰 경계로 충분).
- OpenClaw·ops-agent 등 다수 클라이언트가 공유할 경우 개별 API 키 구분 불가 → 사용처는 OpenMemory/Obsidian에 명시 기록.
## 운영 주의점
- **GPU를 다른 워크로드와 공유할 수 없음**: 현재 VRAM이 거의 풀 점유 상태라 GPU를 쓰는 다른 컨테이너(예: docker-gpu Incus 이미지) 스케줄링 시 충돌 가능. 추가 GPU 워크로드는 `OLLAMA_KEEP_ALIVE=0`으로 Ollama 모델을 먼저 언로드해야 함.
- kr1 호스트 자원(CPU/RAM)도 Ollama가 일부 점유. heimdall·brokkr·postgres-2·mariadb-2가 같은 호스트라는 점 유의.
- `OLLAMA_KEEP_ALIVE=-1`이라 한 번 로드된 모델은 OOM 전까지 상주. 모델 전환 시 이전 모델 수동 언로드 필요.
- 모델 저장소 `/usr/share/ollama/.ollama` 는 호스트 로컬 디스크. 백업 대상 아님 (모델은 재다운로드 가능).
## 참조
- [[infra-hosts]] — kr1 Tailscale IP 100.84.111.28, GTX 1080 Ti GPU 상세 (§GPU)
- [[../../openclaw/openclaw-ollama|openclaw-ollama]] — OpenClaw의 Ollama 통합 (remote baseUrl 설정 패턴 재사용 가능)