LLM Inference on Edge: A Fun and Easy Guide to run LLMs via React Native on your Phone!
Quick Summary
이 글은 React Native 앱에서 Hugging Face의 GGUF 모델을 내려받고 llama.rn으로 로컬 실행해, Android와 iOS에서 오프라인 LLM 채팅 앱을 만드는 과정을 안내한다.
🖼️ 인포그래픽
🖼️ 4컷 인포그래픽
💡 한 줄 요약
이 글은 React Native 앱에서 Hugging Face의 GGUF 모델을 내려받고 llama.rn으로 로컬 실행해, Android와 iOS에서 오프라인 LLM 채팅 앱을 만드는 과정을 안내한다.
📌 핵심 요약
- 글은 LLM이 점점 작고 효율적으로 발전하면서 휴대폰에서도 직접 실행할 수 있게 되었고, DeepSeek R1 Distil Qwen 2.5 1.5B 같은 소형 모델이 이를 보여준다고 설명한다.
- 튜토리얼의 목표는 React Native로 Android와 iOS에서 동작하는 간단한 채팅 앱을 만들고, Hugging Face Hub에서 GGUF 모델을 다운로드해 기기 안에서 비공개로 실행하는 것이다.
- 모바일용 모델 선택에서는 파라미터 수와 GGUF 양자화 형식이 중요하며, 1~3B 모델은 대부분의 기기에 적합하고 4~7B는 최신 고급 기기에서 더 적합하며 8B 이상은 보통 부담이 크다고 정리한다.
- 개발 환경으로는 Node.js, React Native CLI, Android Studio 또는 Xcode 기반 에뮬레이터·시뮬레이터가 필요하며, 프로젝트 생성 후 기본 폴더 구조와 설정 파일의 역할을 설명한다.
- 앱 구현 단계에서는 axios, react-native-fs, llama.rn을 설치하고, App.tsx에서 대화 기록, 사용자 입력, 선택 모델, GGUF 목록, 다운로드 진행률, 모델 컨텍스트, 다운로드·응답 생성 상태를 useState로 관리하는 구조를 제시한다.
🧩 주요 포인트
- 글은 LLM이 점점 작고 효율적으로 발전하면서 휴대폰에서도 직접 실행할 수 있게 되었고, DeepSeek R1 Distil Qwen 2.5 1.5B 같은 소형 모델이 이를 보여준다고 설명한다.
- 튜토리얼의 목표는 React Native로 Android와 iOS에서 동작하는 간단한 채팅 앱을 만들고, Hugging Face Hub에서 GGUF 모델을 다운로드해 기기 안에서 비공개로 실행하는 것이다.
- 모바일용 모델 선택에서는 파라미터 수와 GGUF 양자화 형식이 중요하며, 1~3B 모델은 대부분의 기기에 적합하고 4~7B는 최신 고급 기기에서 더 적합하며 8B 이상은 보통 부담이 크다고 정리한다.
- 개발 환경으로는 Node.js, React Native CLI, Android Studio 또는 Xcode 기반 에뮬레이터·시뮬레이터가 필요하며, 프로젝트 생성 후 기본 폴더 구조와 설정 파일의 역할을 설명한다.
- 앱 구현 단계에서는 axios, react-native-fs, llama.rn을 설치하고, App.tsx에서 대화 기록, 사용자 입력, 선택 모델, GGUF 목록, 다운로드 진행률, 모델 컨텍스트, 다운로드·응답 생성 상태를 useState로 관리하는 구조를 제시한다.
🧠 상세 정리
1. 휴대폰에서 직접 실행되는 LLM 앱의 목표
글은 LLM이 더 작고 똑똑해지면서 이제 휴대폰에서도 직접 실행될 수 있다는 문제의식에서 출발한다. 예시로 DeepSeek R1 Distil Qwen 2.5의 15억 파라미터 모델을 들며, 고급 AI 기능이 손바닥 안의 기기에서도 가능해졌다고 설명한다. 이 튜토리얼의 핵심 목표는 서버에 요청을 보내는 앱이 아니라, 모델을 기기에 내려받아 로컬에서 채팅할 수 있는 모바일 앱을 만드는 것이다. 전체 코드는 EdgeLLM 저장소에 제공되며, 복잡한 오픈소스 프로젝트가 부담스러운 독자도 따라올 수 있도록 단순한 React Native 앱을 중심으로 안내한다.
2. 대상 독자와 앱의 핵심 방향
이 튜토리얼은 모바일 애플리케이션에 AI를 통합하고 싶은 개발자, React Native로 Android와 iOS를 모두 지원하는 대화형 앱을 만들고 싶은 사람, 그리고 완전히 오프라인으로 동작하는 프라이버시 중심 AI 앱을 개발하려는 사람을 대상으로 한다. 글은 Pocket Pal 앱에서 영감을 받았다고 밝히며, Hugging Face Hub에서 LLM을 내려받고 모든 실행을 사용자 기기 안에 머무르게 하는 흐름을 제시한다. 모델 실행에는 llama.cpp의 React Native 바인딩인 llama.rn을 사용하고, GGUF 파일을 효율적으로 로드하는 데 초점을 맞춘다. 최종적으로 독자는 자신이 고른 모델과 대화할 수 있는 작동 앱을 갖게 되는 것을 목표로 한다.
3. 모바일 기기용 모델 크기 선택 기준
모바일에서 LLM을 실행할 때는 모델 크기가 성능과 지연 시간에 큰 영향을 준다고 설명한다. 1~3B 파라미터의 소형 모델은 대부분의 모바일 기기에 적합하며, 낮은 지연 시간과 무난한 성능을 제공하는 선택지로 소개된다. 4~7B의 중형 모델은 최신 고급 기기에서는 잘 동작할 수 있지만 오래된 휴대폰에서는 속도 저하를 일으킬 수 있다. 8B 이상의 대형 모델은 일반적인 모바일 기기에는 부담이 크지만, Q2_K나 Q4_K_M 같은 낮은 정밀도 형식으로 양자화하면 사용할 수 있는 경우가 있다고 정리한다.
4. GGUF 양자화 형식의 차이
글은 GGUF 모델을 내려받을 때 마주치는 여러 양자화 형식을 이해해야 모델 크기와 성능 사이의 균형을 고를 수 있다고 설명한다. Q4_0, Q4_1, Q8_0 같은 레거시 양자화는 기본적이고 단순한 방식으로, 압축된 가중치와 하나 또는 두 개의 스케일링 상수를 블록마다 저장하지만 최신 방식보다 효율이 낮아 널리 쓰이지 않는다고 한다. K-Quants는 더 똑똑한 비트 할당을 사용하는 혼합 양자화 형식이며, 일부 레이어에 더 많은 비트를 부여해 정확도를 높인다. I-Quants는 QuIP에서 영감을 받은 기능을 포함한 블록 기반 양자화로 더 작은 파일 크기를 제공할 수 있지만, 일부 하드웨어에서는 느릴 수 있고 계산 성능은 강하지만 메모리가 제한된 기기에 적합하다고 정리한다.
5. 추천 모델과 Hugging Face에서 모델 찾기
모바일 기기에서 시도해볼 만한 모델로는 SmolLM2-1.7B-Instruct, Qwen2-0.5B-Instruct, Llama-3.2-1B-Instruct, DeepSeek-R1-Distill-Qwen-1.5B가 제시된다. 추가 모델을 찾으려면 Hugging Face 모델 페이지를 방문하고, GGUF 모델 페이지나 검색 필터를 활용하며, 모델 크기를 검색창에 지정하라고 안내한다. 대화형 용도라면 이름에 chat 또는 instruct가 포함된 모델을 찾는 것이 좋다고 설명한다. 모델을 고를 때는 파라미터 수와 양자화 수준을 함께 고려해야 하며, 경우에 따라 Q2_K로 양자화된 7B 모델이 Q8_0 형식의 2B 모델보다 더 잘 실행될 수도 있다고 덧붙인다.
6. React Native 개발 환경 준비
글은 앱을 만들기 전에 React Native 개발 환경을 먼저 준비해야 한다고 설명한다. React Native는 JavaScript와 React를 사용해 Android와 iOS 앱을 만들 수 있는 프레임워크이며, 상당한 코드를 공유할 수 있어 개발 속도를 높이고 유지보수 부담을 줄인다고 소개된다. 필요한 도구로는 JavaScript 런타임이자 패키지와 의존성 관리를 위한 Node.js, 그리고 프로젝트 생성과 빌드 및 관리를 위한 react-native-community/cli가 제시된다. 개발 중 앱을 실행하려면 에뮬레이터나 시뮬레이터가 필요하며, macOS에서는 iOS용 Xcode 시뮬레이터와 Android Studio 에뮬레이터를, Windows나 Linux에서는 iOS용 클라우드 기반 시뮬레이터와 Android Studio 에뮬레이터를 사용하는 흐름을 안내한다.
7. 프로젝트 생성과 기본 구조 이해
프로젝트는 npx @react-native-community/cli@latest init 명령으로 시작하며, 전체 예제 코드는 EdgeLLM 저장소에 제공된다고 설명한다. 저장소에는 간단한 채팅 인터페이스를 가진 EdgeLLMBasic과 더 복잡한 채팅 인터페이스와 추가 기능을 갖춘 EdgeLLMPlus 두 폴더가 있다. 기본 구조에서 android와 ios 폴더는 각 플랫폼의 네이티브 프로젝트 파일을 담고, node_modules는 npm 의존성을 보관하며, App.tsx는 앱의 UI와 로직이 시작되는 루트 컴포넌트로 설명된다. index.js는 App 컴포넌트를 등록하는 React Native 런타임 진입점이며, tsconfig.json, babel.config.js, jest.config.js, metro.config.js, .watchmanconfig 같은 설정 파일은 TypeScript, 변환, 테스트, 번들링, 파일 감시를 담당한다.
8. 데모 실행과 앱 상태 관리 구현
데모를 실행하려면 EdgeLLM 저장소를 클론한 뒤 EdgeLLMPlus 또는 EdgeLLMBasic 폴더로 이동하고, npm install로 의존성을 설치한 다음 iOS에서는 ios 폴더에서 pod install을 실행한다. 이후 프로젝트 폴더에서 npm start로 Metro 번들러를 시작하고, 별도 터미널에서 npm run ios 또는 npm run android로 시뮬레이터나 에뮬레이터에 앱을 빌드해 실행한다. 구현 단계에서는 Hugging Face Hub에서 모델을 내려받고 로컬에서 실행하기 위해 axios, react-native-fs, llama.rn을 설치한다. App.tsx는 처음에 Hello World를 렌더링하는 단순 구조로 정리한 뒤, 대화 기록, 현재 사용자 입력, 선택된 모델 형식, 사용 가능한 GGUF 파일 목록, 선택된 GGUF 파일, 다운로드 진행률, 로드된 모델 컨텍스트, 다운로드 중인지와 응답 생성 중인지를 나타내는 상태를 React의 useState로 관리하는 방향을 제시한다.
🧾 핵심 주장 / 시사점
- 모바일 LLM 앱의 실용성은 모델 자체의 크기뿐 아니라 GGUF 양자화 형식 선택에 크게 좌우되며, 작은 모델을 무조건 고르는 것보다 기기에 맞는 양자화된 더 큰 모델이 나을 수 있다는 점이 중요하다.
- 이 튜토리얼의 설계는 서버 기반 AI 호출보다 로컬 실행과 오프라인 동작을 우선시하므로, 프라이버시를 중시하는 모바일 AI 앱을 만들 때 참고할 만한 기본 구조를 제공한다.
- React Native 프로젝트의 기본 실행 환경, 의존성 설치, 상태 관리까지 순서대로 다루기 때문에 LLM 실행 자체뿐 아니라 실제 모바일 앱으로 연결하는 개발 흐름을 함께 익힐 수 있다.
✅ 액션 아이템
- React Native와 Node.js, React Native CLI 환경을 정비한 뒤 Android/iOS 에뮬레이터에서 동작하는 오프라인 GGUF 채팅 앱 뼈대를 먼저 구축한다.
- axios, react-native-fs, llama.rn을 앱 의존성에 반영해 Hugging Face Hub에서 GGUF 모델을 내려받고 기기 내 추론 경로를 연결한다.
- App.tsx에서 대화 기록, 입력, 모델 선택, GGUF 목록, 다운로드 진행률, 컨텍스트, 생성 상태를 useState로 통합 관리해 오프라인 대화 흐름을 점검한다.
❓ 열린 질문
- 1~3B와 4~7B 모델을 구분해 사용할 때 기기 메모리 한계와 응답 지연 허용치 기준은 무엇인가?
- DeepSeek R1 Distil Qwen 2.5 1.5B급 소형 모델에서 GGUF 양자화 형식별 품질·속도 손실을 어떤 지표로 비교해 결정할 것인가?
- Android와 iOS에서 동일한 GGUF 목록·컨텍스트로 오프라인 추론할 때 성능 차이가 발생하면 어떤 기준으로 병목 원인을 판별할 것인가?