Edge에서 LLM 추론: React Native를 통한 로컬 LLM 실행

Hugging Face는 React Native를 사용하여 모바일 기기에서 로컬 대형 언어 모델(LLM) 추론을 구현하는 기술 가이드를 공개했습니다. llama.rn(llama.cpp에 대한 바인딩)을 활용하면 개발자는 Hugging Face Hub에서 GGUF 모델을 다운로드하고, 이를 완전히 디바이스 내에서 실행하여 데이터 프라이버시와 오프라인 기능을 보장하는 애플리케이션을 만들 수 있습니다.

모바일용 모델 선택 및 양자화

엣지 추론을 성공적으로 수행하려면 모델 크기와 양자화를 디바이스 하드웨어 제약에 맞게 균형 있게 조정해야 합니다.

모델 크기 가이드라인

  • 소형 모델 (1-3B 파라미터): 대부분의 모바일 디바이스에 권장되며 낮은 지연 시간을 보장합니다.
  • 중형 모델 (4-7B 파라미터): 고성능 디바이스에 적합하지만 구형 하드웨어에서는 성능 저하가 발생할 수 있습니다.
  • 대형 모델 (8B+ 파라미터): 크게 양자화되지 않는 한(예: Q2_K 또는 Q4_K_M) 일반적으로 리소스 요구량이 너무 높습니다.

GGUF 양자화 포맷

양자화는 모델 크기와 메모리 요구량을 감소시킵니다. 가이드는 세 가지 주요 포맷을 강조합니다:

  • 레거시 양자화 (Q4_0, Q4_1, Q8_0): 블록당 하나 또는 두 개의 스케일링 상수를 사용하는 기본 방법; 현재는 대부분 대체되었습니다.
  • K-양자화 (Q3_K_S, Q5_K_M 등): 중요한 레이어에 더 많은 비트를 할당해 정확도를 높이는 혼합 양자화.
  • I-양자화 (IQ2_XXS, IQ3_S 등): QuIP에서 영감을 받아 파일 크기를 더 작게 만들며, 높은 연산 성능은 있지만 메모리가 제한된 디바이스에 최적화되었습니다.

권장 모바일 모델

  • SmolLM2-1.7B-Instruct
  • Qwen2-0.5B-Instruct
  • Llama-3.2-1B-Instruct
  • DeepSeek-R1-Distill-Qwen-1.5B

기술 구현 아키텍처

애플리케이션은 React Native를 사용해 iOS와 Android 모두를 대상으로 단일 코드베이스로 구축됩니다. 핵심 기술 스택은 다음과 같습니다:

  • llama.rn: GGUF 파일을 로드하고 실행하기 위해 llama.cpp에 필요한 바인딩을 제공합니다.
  • react-native-fs: 다운로드된 모델을 DocumentDirectoryPath에 저장하기 위해 디바이스 로컬 파일 시스템을 관리합니다.
  • axios: Hugging Face Hub에서 모델 파일을 가져오기 위한 API 요청을 처리합니다.

모델 라이프사이클 워크플로우

  1. 발견: 앱이 Hugging Face Hub API에 쿼리하여 .gguf 파일을 포함한 저장소를 검색합니다.
  2. 다운로드: 선택된 모델을 HTTPS를 통해 다운로드하고 react-native-fs를 사용해 로컬에 저장합니다.
  3. 초기화: llama.rninitLlama 함수가 모델을 특정 파라미터(n_ctx: 2048, n_gpu_layers: 1 등)와 함께 컨텍스트에 로드합니다.
  4. 추론: context.completion 메서드가 대화 기록을 처리하고, 무한 생성 방지를 위한 정지 단어 집합을 사용해 응답을 생성합니다.

향상된 UX를 위한 고급 기능

기본 채팅 외에도 가이드는 모바일 사용자 경험을 개선하기 위한 여러 최적화를 제시합니다:

  • 점진적 생성: context.completion 내부 콜백을 활용해 전체 응답을 기다리는 대신 토큰을 하나씩 스트리밍합니다.
  • 사고 과정 시각화: DeepSeek-R1과 같은 추론 모델의 경우, 특수 토큰을 식별해 모델 내부 “생각”을 분리하고 사용자가 추론 체인의 가시성을 토글할 수 있게 합니다.
  • 성능 추적: CompletionResult 객체의 timings 속성을 이용해 predicted_per_second 메트릭을 표시합니다.
  • 자동 스크롤: 사용자가 수동으로 스크롤하지 않는 한 최신 토큰이 보이도록 ScrollView를 프로그래밍 방식으로 제어합니다.

디버깅 및 개발

개발은 Metro 번들러를 통해 관리되며, 디버깅은 Chrome DevTools를 사용합니다. 주요 디버깅 단계에는 터미널에서 j 키를 눌러 디버거를 실행하고 “Sources” 탭에서 브레이크포인트를 설정하는 것이 포함됩니다. 빌드 문제의 경우, 가이드는 Metro 캐시를 정리(npm start --reset-cache)하거나 네이티브 빌드를 청소(./gradlew clean for Android 및 pod install for iOS)를 권장합니다.

SUMMARY: Hugging Face는 React Native와 llama.rn을 사용해 Android와 iOS에서 양자화된 GGUF 모델을 로컬로 실행함으로써 프라이버시 중심의 모바일 애플리케이션을 구축하는 포괄적인 가이드를 제공합니다.

TITLE: Edge에서 LLM 추론: React Native를 통한 로컬 LLM 실행

Sources