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

✍️ OpenClawRadar📅 게시일: February 25, 2026🔗 Source
React Native에서 온디바이스 AI 구축의 실용적인 교훈
Ad

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 디노이징 단계마다 실시간 미리보기를 표시하세요.

Ad

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

Ad

👀 See Also

OpenClaw 업데이트 수정: Telegram 실행 파일 '허용 목록 누락' 오류 해결
Guides

OpenClaw 업데이트 수정: Telegram 실행 파일 '허용 목록 누락' 오류 해결

최근 OpenClaw 업데이트로 인해 승인을 비활성화한 후에도 Telegram exec 명령이 'exec denied: allowlist miss' 오류와 함께 실패하게 되었습니다. 이 문제를 해결하려면 고급 액세스를 활성화하고, exec 보안을 명시적으로 구성하며, openclaw.json과 exec-approvals.json 파일을 모두 업데이트해야 합니다.

OpenClawRadar
OpenClaw 작업 공간 구성: 두 달 사용 후 얻은 교훈
Guides

OpenClaw 작업 공간 구성: 두 달 사용 후 얻은 교훈

OpenClaw 개발자의 경험에 따르면 작업 공간 품질이 에이전트 성능에 5-10배 영향을 미치며, SOUL.md, AGENTS.md, MEMORY.md, USER.md 및 스킬 구성에 대한 구체적인 지침이 제공됩니다.

OpenClawRadar
OpenClaw와 Ollama로 구축하는 완전 로컬 멀티 에이전트 어시스턴트
Guides

OpenClaw와 Ollama로 구축하는 완전 로컬 멀티 에이전트 어시스턴트

개발자가 OpenClaw와 Ollama를 사용한 완전 로컬 AI 어시스턴트 스택을 공유합니다. 모델로는 qwen3.5:35b-a3b, gemma3:4b, mistral:7b를 사용하며, Home Assistant 및 Gmail용 MCP 서버와 Telegram Bot 인터페이스를 포함합니다.

OpenClawRadar
클로드 코드 O365 MCP 조건부 액세스 설정 문제 및 해결 방법
Guides

클로드 코드 O365 MCP 조건부 액세스 설정 문제 및 해결 방법

한 개발자가 조건부 액세스 정책 하에서 Claude Code의 O365 MCP 커넥터를 설정할 때 직면한 두 가지 문제에 대한 구체적인 해결책을 공유했습니다: 정책 규칙에 필요한 올바른 애플리케이션 ID를 찾는 방법과 서버 위치와 관련된 인증 오류를 해결하는 방법입니다.

OpenClawRadar