---
id: wiki-2026-0508-on-device-ai-mobile-gemma
title: On-Device AI (Mobile / Gemma)
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [On-Device AI, Mobile AI, Edge LLM, Gemma Mobile]
duplicate_of: none
source_trust_level: A
confidence_score: 0.9
verification_status: applied
tags: [on-device, mobile, gemma, llama, phi, mlx, coreml, quantization, edge-ai]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack: { language: swift/kotlin/python, framework: mlx/coreml/mediapipe }
---

# On-Device AI (Mobile / Gemma)

폰/엣지에서 직접 LLM을 돌리는 기술. 4-bit 양자화 + GPU/NPU + 1B-3B 모델 = 실용적 latency.

## 핵심

### 모델 선택 (2025-2026)
- **Gemma 3 1B/4B**: Google, 다국어 우수, 모바일 최적화 (Q4 ~600MB / 2.4GB).
- **Gemma 2 2B**: 안정적, MediaPipe 기본 지원.
- **Llama 3.2 1B/3B**: Meta, instruction-tuned 강함, 다국어 8개.
- **Phi-3 mini (3.8B)**: Microsoft, reasoning 강점, 4K context.
- **Qwen 2.5 0.5B/1.5B/3B**: Alibaba, 코드/수학 강점.

### 런타임
- **MLX** (Apple Silicon): Mac/iPad/iPhone, unified memory zero-copy. Python/Swift API.
- **Core ML**: iOS 18+ 기본. `coremltools` 변환. Neural Engine 활용.
- **MediaPipe LLM Inference**: Android/iOS/Web 통합, Gemma 공식 지원.
- **llama.cpp**: GGUF 포맷, 모든 플랫폼, CPU+GPU.
- **ExecuTorch**: PyTorch 모바일 native, Meta 공식.
- **ONNX Runtime Mobile**: 크로스플랫폼, DirectML/NNAPI 백엔드.

### 양자화
- **Q4_K_M** (llama.cpp): 4-bit weights + 일부 6-bit, 손실 < 1%.
- **AWQ / GPTQ**: activation-aware, 정확도 우수.
- **MLX 4-bit group quant**: Apple 공식, group_size=64 권장.
- **Int8 dynamic**: ONNX, 호환성 최고지만 메모리 2배.

### 응용
- 오프라인 챗봇/요약, on-device RAG (벡터 DB SQLite), 음성 비서, 번역, 코드 자동완성, 프라이버시 우선 의료/법률.

## 💻 패턴

### MLX Swift (iOS) — Gemma 3 inference
```swift
import MLX
import MLXLLM

let modelDir = URL.documentsDirectory.appending(path: "gemma-3-1b-it-4bit")
let container = try await LLMModelFactory.shared.loadContainer(directory: modelDir)
let result = try await container.perform { ctx in
    let prompt = ctx.processor.prepare(input: .init(messages: [
        .init(role: .user, content: "Summarize: ...")
    ]))
    return try MLXLMCommon.generate(input: prompt, parameters: .init(maxTokens: 256), context: ctx)
}
print(result.output)
```

### MediaPipe LLM (Android/Kotlin)
```kotlin
val options = LlmInferenceOptions.builder()
    .setModelPath("/data/local/tmp/gemma-2-2b-it-cpu-int4.bin")
    .setMaxTokens(2048)
    .setTopK(40)
    .build()
val llm = LlmInference.createFromOptions(context, options)
val response = llm.generateResponse("질문: 모바일 AI 장점은?")
```

### Core ML conversion (Python → iOS)
```python
import coremltools as ct
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("google/gemma-2-2b-it")
mlmodel = ct.convert(
    model,
    convert_to="mlprogram",
    compute_precision=ct.precision.FLOAT16,
    minimum_deployment_target=ct.target.iOS18,
)
mlmodel.save("Gemma2_2B.mlpackage")
```

### llama.cpp GGUF 양자화
```bash
python convert_hf_to_gguf.py ./gemma-3-1b-it --outfile gemma3-1b-f16.gguf
./llama-quantize gemma3-1b-f16.gguf gemma3-1b-Q4_K_M.gguf Q4_K_M
./llama-cli -m gemma3-1b-Q4_K_M.gguf -p "Hello" -n 128 -ngl 99
```

### KV cache 재사용 (multi-turn)
```python
from mlx_lm.models.cache import make_prompt_cache
cache = make_prompt_cache(model)
for turn in conversation:
    out = generate(model, tokenizer, prompt=turn, prompt_cache=cache, max_tokens=128)
```

## 결정 기준

| 상황 | 권장 |
|---|---|
| iOS 전용, 최고 성능 | MLX + Gemma 3 1B Q4 |
| 크로스플랫폼 모바일 | MediaPipe + Gemma 2 2B |
| Android only | MediaPipe 또는 ExecuTorch |
| 데스크톱/서버 hybrid | llama.cpp GGUF |
| 코드/툴콜 강조 | Qwen 2.5 3B |
| 4GB RAM 디바이스 | 1B 모델 Q4 (≤700MB) |

기본값: **Gemma 3 1B Q4 + MediaPipe** (호환성/속도 균형).

## 🔗 Graph

- 부모: [[Edge AI]]
- 응용: [[Privacy-Preserving AI]]
- Adjacent: [[LLM_Optimization_and_Deployment_Strategies|Quantization]], [[llama.cpp]]

## 🤖 LLM 활용

- 언제: 프라이버시 critical (의료/금융), 오프라인 필수, latency < 100ms 요구, API 비용 회피.
- 언제 X: 100B급 추론 필요, 32K+ context, 자주 모델 갱신, 디바이스 RAM < 3GB & 품질 요구 높음.

## ❌ 안티패턴

- FP16 raw 모델을 폰에 푸시 (배터리/RAM 폭발).
- 양자화 후 perplexity 검증 없이 배포.
- 메인 스레드에서 generate (UI freeze) → background queue 필수.
- KV cache 무한 누적 (메모리 누수).
- 모델 파일 앱 번들에 포함 (App Store 200MB 제약) → 첫 실행 시 다운로드.

## 🧪 검증 / 중복

- 검증: MMLU/GSM8K on-device 측정, tokens/sec 벤치 (Gemma 3 1B Q4 ≈ 30-50 t/s on A17 Pro).
- 중복: [[Edge AI]] 일반 / [[Mobile ML]] 비-LLM. 본 문서는 LLM-on-mobile 특화.

## 🕓 Changelog

- 2026-05-10: 표준 포맷 적용, Gemma 3 / Llama 3.2 갱신.
