React Native에서 온디바이스 AI 구축의 실용적인 교훈

LLM을 이용한 텍스트 생성
React Native에서 GGUF 모델을 실행하려면 llama.rn을 사용하세요. 이는 llama.cpp를 래핑하고 Android(JNI)와 iOS(Metal)용 네이티브 바인딩을 제공합니다. 콜백을 통한 토큰 스트리밍이 잘 작동합니다.
메모리 관리가 중요합니다: 7B Q4 모델은 런타임에 약 5.5GB의 RAM이 필요합니다(파일 크기 × 1.5는 KV 캐시와 활성화를 위한 공간). 디바이스 RAM의 60%를 하드 예산으로 사용하고, 50%에서 경고를 표시하며, 60%에서 차단하여 OS가 앱을 강제 종료하는 것을 방지하세요.
GPU 가속은 Android에서는 OpenCL(Adreno GPU), iOS에서는 Metal을 사용합니다. Android에서 GPU 레이어가 0보다 크면 Flash attention이 충돌하므로 코드에서 이를 강제하세요. KV 캐시 양자화(f16/q8_0/q4_0)는 대부분의 디바이스에서 GPU보다 더 큰 효과를 냅니다; 테스트에서 f16에서 q4_0로 변경하면 추론 속도가 약 3배 증가했습니다.
Stable Diffusion을 이용한 이미지 생성
이는 플랫폼별로 다르며 두 플랫폼을 모두 커버하는 단일 라이브러리는 없습니다.
- Android: MNN(알리바바 프레임워크, CPU, 모든 ARM64 디바이스에서 작동)과 QNN(Qualcomm AI 엔진, NPU 가속, Snapdragon 8 Gen 1+만 해당)을 사용하세요. QNN은 3배 빠르지만 최근 Qualcomm 칩에서만 작동합니다. 런타임 감지와 자동 폴백을 구현하세요.
- iOS: Apple의 ml-stable-diffusion 파이프라인을 Core ML과 Neural Engine 가속과 함께 사용하세요. 팔레타이즈된 모델(~1GB, 6비트)은 메모리가 제한된 디바이스에 적합합니다; 전체 정밀도(~4GB, fp16)는 ANE에서 더 빠르지만 여유 공간이 필요합니다.
실제 벤치마크: 512×512 해상도, 20단계에서 Snapdragon NPU는 5–10초, 플래그십 CPU는 15초, iOS ANE는 8–15초가 소요됩니다. 사용자가 앱이 멈췄다고 생각하지 않도록 N 디노이징 단계마다 실시간 미리보기를 표시하세요.
Whisper를 이용한 음성 전사
whisper.rn은 whisper.cpp를 래핑하며 통합이 간단합니다. 여러 모델 크기(Tiny/Base/Small)를 제공하고 사용자가 속도 대 정확도 트레이드오프를 선택할 수 있게 하세요. 실시간 부분 전사(말하는 대로 단어가 나타남)는 네이티브 느낌을 줍니다.
오디오를 네이티브 코드에서 버퍼링하고 전사 후 지우세요; 개인정보 보호가 중요하다면 오디오 파일을 디스크에 쓰지 마세요.
멀티모달 모델을 이용한 비전
비전 모델은 두 개의 파일이 필요합니다: 메인 GGUF와 mmproj(멀티모달 프로젝터) 동반 파일입니다. 이를 투명하게 처리하세요: 비전 모델을 자동 감지하고, mmproj를 자동 다운로드하며, 단일 단위로 추적하고, 링크가 끊어지면 런타임에 모델 디렉토리를 검색하세요. 2B 비전 모델의 경우 두 파일을 병렬로 다운로드하여 다운로드 시간을 거의 절반으로 줄이세요.
500M의 SmolVLM은 모바일에 적합한 스위트 스팟으로, 플래그십 디바이스에서 약 7초가 소요되며 문서 읽기와 장면 설명에 유용합니다.
온디바이스 에이전트 루프를 위한 도구 호출
함수 호출을 지원하는 모델은 자동 루프를 통해 도구(웹 검색, 계산기, 날짜/시간, 디바이스 정보)를 사용할 수 있습니다: LLM이 생성하고, 도구 호출을 파싱하며, 실행하고, 결과를 컨텍스트에 다시 주입하고, LLM이 계속합니다. 무한 루프를 방지하기 위해 최대 3회 반복, 총 5회 호출로 제한하세요.
두 가지 파싱 경로를 지원하세요: 더 큰 모델은 llama.rn을 통해 구조화된 JSON 도구 호출을 네이티브로 출력하고, 더 작은 모델은 <tool_call>과 같은 XML을 출력합니다. 모델 로드 시점에 jinja 채팅 템플릿을 검사하여 도구 지원을 감지하세요; 모델이 도구를 지원하지 않으면 시스템 프롬프트에 도구 정의를 주입하지 않아 환각을 피하세요. 계산기는 재귀 하강 파서를 사용합니다—절대 eval()을 사용하지 마세요.
의도 분류
앱이 텍스트와 이미지 생성을 모두 수행한다면, 입력 분석을 기반으로 사용자가 원하는 것을 결정해야 합니다.
📖 전체 소스 읽기: r/LocalLLaMA
👀 See Also

서드파티 하네스 지원 중단 후 OpenClaw 에이전트를 Claude Code로 이전하기
Anthropic이 서드파티 하네스 지원을 중단한 후, 한 개발자가 17개의 OpenClaw 에이전트를 Claude Code로 한 오후 만에 이전했습니다. 이 과정에는 기존 에이전트 로직을 보존하면서 CLAUDE.md 진입점 생성, bash 래퍼 스크립트 작성, cron 작업 설정이 포함되었습니다.

macOS에서 로컬 LLM으로 OpenClaw 실행하기 – 16–24GB RAM 가이드
macOS(16~24GB RAM)에서 양자화된 Qwen 3.5 모델을 OpenClaw와 함께 설정하는 실용적인 가이드. 설정 확인용 테스트 스킬 포함.

MacBook Pro에서 로컬 Homebrew와 NVM을 사용한 OpenClaw 설치
한 사용자가 비관리자 계정으로 MacBook Pro에 OpenClaw를 성공적으로 설치했습니다. 로컬 Homebrew, NVM v0.40.4, pyenv를 통한 Python 3.14.3, Node 24, 그리고 oMLX를 통한 Qwen3.5-122B-A10B-MLX-vision-4.7-bit LLM을 사용했습니다.

레딧 분석을 통한 OpenClaw 설정 가이드: 하드웨어, 비용, 메모리 및 보안 관행
레딧 사용자가 OpenClaw의 흔한 실수를 분석하고, 하드웨어 요구사항, 비용을 월 10달러로 최적화하는 방법, MEMORY.md 파일을 이용한 메모리 관리, 프롬프트 인젝션 공격을 방지하는 보안 관행을 다루는 설정 가이드를 만들었습니다.