---
id: wiki-2026-0508-local-ai-and-infrastructure
title: Local AI and Infrastructure
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [Local AI, On-Prem LLM, Self-Hosted AI, Local Inference]
duplicate_of: none
source_trust_level: A
confidence_score: 0.92
verification_status: applied
tags: [ai, llm, ollama, llama-cpp, mlx, lm-studio, local-inference, gpu, on-prem]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack: { language: python|go|cpp, framework: ollama|llama.cpp|mlx|vllm }
---

# Local AI and Infrastructure

> 한 줄: 로컬/온프레미스에서 LLM·VLM을 실행하는 인프라 — Ollama·llama.cpp·MLX·vLLM·LM Studio로 데이터 외부 유출 없이 추론·파인튜닝.

## 핵심
- **Why local**: 프라이버시(헬스케어·법무·금융), 비용(API 토큰비 vs GPU CapEx), 레이턴시, 오프라인, 규제(GDPR·HIPAA·EU AI Act).
- **양자화**: GGUF Q4_K_M (균형), Q5_K_M (품질), Q8_0 (서버), MLX 4bit (Apple). 70B Q4 ≈ 40GB, 8B Q4 ≈ 5GB.
- **런타임**: llama.cpp (C++ 코어, CPU+GPU), Ollama (UX 래퍼, 모델 레지스트리), LM Studio (GUI), vLLM (서버 throughput, PagedAttention), TGI, MLX (Apple Silicon).
- **HW**: Apple M-series unified memory (M3 Ultra 192GB → 70B FP16 가능), NVIDIA RTX 4090 24GB (대중), H100 80GB (서버), AMD MI300X 192GB.

## 결정 기준
| 시나리오 | 추천 | 이유 |
|---|---|---|
| 개인 Mac 데모 | Ollama / LM Studio | 1-line install, 모델 라이브러리 |
| Apple Silicon 최적 | MLX / mlx-lm | unified memory, Metal 가속 |
| 서버 멀티유저 | vLLM / TGI | continuous batching, throughput 10-20× |
| 임베디드 / Edge | llama.cpp + GGUF Q4 | 포터블, ARM/x86 |
| 파인튜닝 | Unsloth / Axolotl + LoRA | 24GB로 7B 가능 |
| 프로덕션 RAG | vLLM + LangChain/LlamaIndex | OpenAI 호환 API |

## 💻 패턴

### Ollama 빠른 시작
```bash
curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama3.3:70b-instruct-q4_K_M
ollama run llama3.3 "Explain MoE in 2 sentences"
# OpenAI 호환 API: http://localhost:11434/v1
```

### Ollama Python (OpenAI SDK 호환)
```python
from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
resp = client.chat.completions.create(
    model="llama3.3:70b",
    messages=[{"role": "user", "content": "Hello"}],
)
```

### llama.cpp 서버
```bash
./llama-server -m models/llama-3-8b.Q4_K_M.gguf \
  -c 8192 -ngl 99 --host 0.0.0.0 --port 8080
# -ngl 99: 모든 layer GPU offload
```

### vLLM 프로덕션 서버
```bash
pip install vllm
vllm serve meta-llama/Llama-3.3-70B-Instruct \
  --tensor-parallel-size 4 --max-model-len 8192 \
  --quantization awq --gpu-memory-utilization 0.9
```

### MLX (Apple Silicon)
```python
from mlx_lm import load, generate
model, tok = load("mlx-community/Llama-3.3-70B-Instruct-4bit")
print(generate(model, tok, prompt="Hi", max_tokens=200, verbose=True))
```

### LoRA 파인튜닝 (Unsloth)
```python
from unsloth import FastLanguageModel
model, tok = FastLanguageModel.from_pretrained(
    "unsloth/llama-3-8b-bnb-4bit", max_seq_length=2048, load_in_4bit=True)
model = FastLanguageModel.get_peft_model(model, r=16, lora_alpha=16,
    target_modules=["q_proj","k_proj","v_proj","o_proj"])
# trainer.train() → save_pretrained_gguf("model", tok, quantization_method="q4_k_m")
```

### Docker Compose 스택
```yaml
services:
  ollama:
    image: ollama/ollama
    volumes: [ollama:/root/.ollama]
    deploy: { resources: { reservations: { devices: [{ driver: nvidia, count: all, capabilities: [gpu] }] } } }
  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    environment: { OLLAMA_BASE_URL: http://ollama:11434 }
    ports: ["3000:8080"]
```

### 안전한 외부 노출 (Caddy + auth)
```caddyfile
ai.example.com {
  reverse_proxy localhost:11434
  basic_auth { user $2a$14$... }
}
```

## 🔗 Graph
- 상위: [[LLM-Foundations]]
- 관련: [[Ollama]] · [[llama-cpp]] · [[LLM_Optimization_and_Deployment_Strategies|vLLM]] · [[LM-Studio]] · [[LLM_Optimization_and_Deployment_Strategies|Quantization]] · [[GGUF]] · [[LoRA]] · [[RAG]]

## 🤖 LLM 활용
- **코드 어시스트**: Continue.dev + Ollama → VSCode/JetBrains 로컬 Copilot 대체.
- **개인 RAG**: AnythingLLM/Open WebUI + 로컬 임베딩(nomic-embed-text) → 사내 문서 검색.
- **에이전트**: LangGraph + 로컬 모델로 PoC, 본격 운영은 Sonnet/GPT로 스위치.

## ❌ 안티패턴
- **70B를 16GB GPU로 시도** — OOM. Q4여도 40GB 필요. 8B 또는 13B Q4부터.
- **Ollama를 프로덕션 멀티테넌트** — sequential 처리, 동시성 약. vLLM/TGI 사용.
- **양자화 무시 FP16 고집** — 품질 차이 5% 미만인데 메모리 4× 절감 포기.
- **모델 보안 무시** — 11434 포트 외부 노출 → 무인증 사용. 반드시 reverse proxy + auth.
- **MLX를 Linux에서** — Apple Silicon 전용. Linux는 llama.cpp/vLLM.

## 🧪 검증 / 중복
- 중복 후보 없음 (Ollama·MLX·vLLM은 별도 페이지로 운영).
- 검증: `ollama list`, `nvidia-smi`, `llama-bench`로 t/s 측정 (8B Q4 → RTX 4090 ~120 t/s, M3 Max ~60 t/s).

## 🕓 Changelog
- 2026-05-08 | Phase 1 — 자동 시드.
- 2026-05-10 | Manual cleanup — 런타임 결정 표·Ollama/vLLM/MLX/LoRA 코드 패턴·Docker 스택·안티패턴 정리.
