TL;DR
BigMoeOnEdge는 모바일 RAM 한계보다 큰 MoE 모델을 실행하기 위해 각 토큰이 실제로 라우팅하는 전문가만 플래시에서 스트리밍해 가져오는 접근을 적용했으며, 라우터 훅이 선택된 전문가를 관찰하면 리더가 해당 텐서 슬라이스를 스토리지에서 읽어 연산 전에 포인터를 재결합하는 방식으로 동작한다. 안드로이드 폰 실험에서 단순 mmap은 약 0.1 tok/s로 페이지 캐시 스래싱을 보였지만 전문가 스트리밍은 데모 앱에서 3.8 tok/s, CLI에서는 5 tok/s 이상을 관측해 수십배 성능 차이를 확인했고 gpt-oss-120b 같은 대형 모델도 1~2 tok/s로 로드·생성되는 사례가 보고되었다. 구현은 llama.cpp와 gguf·eval-callback API를 통해 공개 리포지토리로 제공되며 스트리밍 출력이 완전 레지던시 방식과 바이트 단위로 동일함을 테스트로 보장해 정합성을 확보했으나 모바일의 메모리 리클레임 동작과 스토리지 I/O 한계가 처리량을 결정하는 주요 제약으로 남아 있어 추가 측정이 필요하다.
커뮤니티 반응
커뮤니티는 코드와 성능 수치가 첨부된 실험 결과에 호기심을 보이며 실무 적용 가능성에 관심을 보였다. 일부 사용자는 mmap과 페이지 캐시 관련 병목 현상에 공감하며 동일 환경에서의 재측정을 제안했고, 다른 일부는 스트리밍 방식의 오버헤드와 절대 처리량 한계에 대해 우려를 표명했다. 전반적으로 공개 리포지토리와 바이트 단위 정합성 테스트를 긍정적으로 받아들였으며, 모바일 메모리 리클레임 동작에 대한 추가 데이터 요청이 다수 존재했다.
주요 논점
전문가 단위 스트리밍은 RAM 한계를 넘어서는 MoE 실행을 현실화하며 mmap 대비 실질적인 처리량 향상을 보였다.
스트리밍은 mmap보다 효율적이지만 절대 토큰 처리량은 스토리지 I/O 및 라우팅 오버헤드에 의해 제한되므로 개선 여지가 남아 있다.
합의점 vs 논쟁점
합의점
- MoE는 토큰별로 일부 전문가만 활성화되므로 전체 가중치를 항상 RAM에 상주시킬 필요가 없다는 점이 핵심 개념으로 인정되었다.
- 단순 mmap 접근은 모바일 환경에서 페이지 캐시 스래싱으로 처리량이 매우 낮아지는 문제가 발생한다.
- 바이트 단위 동일성 검증은 스트리밍 구현의 정합성을 확보하는 필수 단계로 받아들여졌다.
논쟁점
- 스트리밍 방식이 mmap 대비 처리량을 크게 개선했으나 절대적인 tok/s 수치가 실무 수준에서 충분한지에 대해서는 의견이 엇갈렸다.
- 모바일 OS의 메모리 리클레임 및 페이지 교체 동작이 실제 성능에 미치는 영향과 그 재현성에 대한 해석이 분열되어 있다.
- 스토리지 종류(플래시 성능)와 인터페이스에 따른 성능 편차가 얼마나 결정적인지에 대해 추가 실험이 필요하다는 의견이 존재한다.
실용적 조언
- 모바일에서 동일한 실험을 반복할 경우 mmap과 스트리밍 경로 모두에서 바이트 단위 동일성 검증을 수행해 출력 정합성을 보장해야 한다.
- 데모 앱보다 CLI 경로에서 더 높은 처리량이 관찰되었으므로 초기 성능 실험은 CLI 환경에서도 병행해 측정할 것을 권장한다.
- 모바일 메모리 리클레임 동작이 결과에 큰 영향을 줄 수 있으므로 다양한 안드로이드 기기와 OS 버전에서 페이지 캐시·리클레임 행태를 측정해 병목 요인을 규명해야 한다.
섹션별 상세
이미지 분석

이미지에는 BigMoeOnEdge 인터페이스가 보이며 상단에 선택된 모델 명과 프롬프트 입력창, 중앙에 'Loading model...' 상태가 나타나 토큰 처리 중 모델 로드 단계임을 확인할 수 있다. 하단에는 현재 토큰 처리율이 0.00 tok/s로 표시되고 compute·flash wait·cache mgmt 지연 바가 있어 앱이 실시간으로 성능 계측 데이터를 노출하고 있음을 보여준다.
앱 화면 스크린샷으로 BigMoeOnEdge UI에서 모델 선택, 프롬프트 입력, 로딩 상태와 토큰 처리율 관련 메트릭이 표시되어 있다.
용어 해설
- Mixture of Experts (MoE)
- — Mixture of Experts는 각 토큰마다 전체 네트워크가 아니라 일부 '전문가' 서브네트워크만 활성화되는 아키텍처로, 토큰별로 선택된 전문가에 대해서만 계산과 가중치 접근이 이루어지기 때문에 전체 모델의 모든 가중치를 메모리에 상주시킬 필요가 없다. 라우터가 각 층에서 선택한 전문가를 결정하면 해당 전문가의 텐서 슬라이스만 로드해 연산 전 포인터를 재결합하는 방식으로 동작한다. 이 방식을 통해 큰 모델을 제한된 RAM 환경에서 부분적으로 실행할 수 있다.
- mmap
- — mmap은 디스크 파일을 프로세스 주소 공간에 매핑해 파일 I/O를 가상 메모리 접근으로 처리하는 기법으로, 커널은 페이지 캐시를 통해 매핑된 페이지를 관리한다. 대규모 모델을 mmap으로 그대로 실행하면 페이지 캐시 스래싱이 발생해 실질적인 처리량이 극도로 저하될 수 있다. 게시물에서는 단순 mmap이 안드로이드 환경에서 약 0.1 tok/s 수준으로 성능 병목을 일으킨다고 보고되었다.
- GGUF
- — GGUF는 모델 가중치와 메타데이터를 담는 포맷 및 로드 API로, 게시물에서는 gguf API를 통해 스트리밍·평가 콜백 경로로 모든 실행이 흐르도록 구성해 llama.cpp 상위 모듈로 통합했다. 이 구조는 업스트림 업그레이드를 단순 버전 변경으로 유연하게 처리할 수 있게 하며, 파일 단위 접근으로 필요한 텐서 슬라이스만 불러오는 스트리밍 구현과 결합되었다. 공개 API를 이용해 스트리밍된 출력의 정합성을 검증하는 방식이 사용되었다.
- Router hook
- — 라우터 훅은 각 토큰 처리 시 어떤 전문가(expert)가 선택되었는지를 관찰하고 그 정보를 외부로 제공하는 콜백 지점으로, 선택된 전문가 목록을 기반으로 필요한 텐서 슬라이스를 스토리지에서 읽어오는 판독기(reader)를 트리거한다. 이 훅은 토큰별 라우팅 결정과 실제 데이터 로드 시점을 연결해 메모리 거주 단위를 '전문가 단위'로 전환하게 한다. 게시물에서는 이 훅을 통해 필요한 슬라이스만 플래시에서 직접 스트리밍하는 것이 핵심으로 제시되었다.
언급된 도구
로컬 CPU 환경에서 LLM 추론을 수행하는 런타임으로, 게시물에서는 서브모듈로 사용해 스트리밍 실행 경로와 통합했다.
모델 가중치와 메타데이터 로드·호출을 위한 파일/API 포맷으로 스트리밍 구현의 입출력 경로에 사용되었다.
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.