Hypura – Apple Silicon용 스토리지 계층 인식 LLM 추론 스케줄러
Hypura – A storage-tier-aware LLM inference scheduler for Apple Silicon
TL;DR Highlight
Rust 기반 오픈소스 프로젝트가 LLM을 GPU, RAM, NVMe에 분산 배치하여 Mac 물리 메모리 초과 모델을 실행하고 llama.cpp의 OOM 크래시 문제를 해결한다.
Who Should Read
Apple Silicon Mac(MacBook Pro, Mac Studio, Mac Mini 등)에서 로컬 LLM을 돌리고 싶은데 메모리 부족으로 포기했던 개발자. 특히 32GB 이하 메모리로 70B급 이상 대형 모델을 실험해보고 싶은 ML 엔지니어나 AI 연구자.
Core Mechanics
- Hypura는 LLM 추론 시 모델 텐서를 GPU 메모리, RAM, NVMe SSD 세 가지 계층에 나눠서 배치하는 스케줄러다. Apple Silicon의 Unified Memory(통합 메모리) 구조와 빠른 NVMe를 활용해서, 물리 메모리보다 큰 모델도 OS가 강제 종료하지 않고 돌릴 수 있게 한다.
- 구체적인 성능 수치로는, 32GB Mac Mini에서 31GB짜리 Mixtral 8x7B를 2.2 tok/s로 실행하고, 40GB Llama 70B를 0.3 tok/s로 실행한다. 기존 vanilla llama.cpp는 두 모델 모두 크래시되지만 Hypura는 실행 자체를 가능하게 만든다.
- MoE(Mixture of Experts, 여러 전문가 네트워크 중 일부만 활성화하는 모델 구조) 모델의 희소성(sparsity)을 적극 활용한다. 토큰당 8개 expert 중 2개만 실제로 사용되는 특성 덕분에, 라우터를 가로채서 필요한 expert 가중치만 NVMe에서 읽어온다. 이 방식으로 I/O를 75% 줄인다.
- 뉴런 캐시(neuron cache)를 통해 이미 로드된 expert 슬라이스를 추적하는데, 시간적 지역성(temporal locality, 최근에 사용된 데이터를 다시 사용하는 경향) 덕분에 99.5%의 캐시 히트율을 달성한다. 또한 co-activation tracking으로 다음에 어떤 expert가 활성화될지 예측해서 미리 prefetch한다.
- Dense FFN(Feed-Forward Network, 밀집 연결 레이어) 가중치(gate, up, down 레이어로 전체 모델 크기의 약 60%)는 NVMe에서 스트리밍하고, attention 레이어와 norm 레이어는 GPU에 상주시킨다. 가용 메모리에 따라 prefetch lookahead 깊이를 자동으로 조절한다.
- Norm과 embedding 레이어는 크기는 작지만 매 토큰마다 접근하는 핫 레이어여서 GPU에 고정(pin)한다. 이렇게 접근 빈도와 레이어 크기를 함께 고려한 배치 전략이 핵심이다.
- 모델이 물리 메모리에 다 들어가는 경우에는 오버헤드 없이 full Metal GPU 속도로 실행된다. 즉, 메모리가 충분한 환경에서는 성능 손실이 없다.
- Rust로 작성되었고 GGUF 파일 포맷을 읽어 하드웨어를 프로파일링한 뒤 계층별 배치를 결정하는 방식으로 동작한다.
Evidence
- 0.3 tok/s 속도에 대해 '이게 실행(Run)이냐 기어다니는(Crawl) 거냐'는 비판이 있었다. 반면 다른 댓글에서는 '크래시 vs 하룻밤 돌면 완료'의 차이는 실질적으로 의미 있는 능력 차이라고 반박했다. 특히 포그라운드 작업에는 sub-1 tok/s가 무쓸모지만, 백그라운드 배치 작업에서는 충분히 활용 가능하다는 시각이다.
- NVMe의 읽기 패턴이 성능의 핵심 병목이라는 기술적 토론이 있었다. 순차 읽기는 5~7 GB/s까지 나오지만, MoE의 랜덤 expert 접근 패턴은 랜덤 읽기(약 500 MB/s)를 유발해서 오히려 최악의 케이스가 된다는 지적이다. 1T 파라미터 모델 기준으로 forward pass당 2TB 가중치를 읽어야 한다면, 피크 순차 속도에서도 토큰당 300초 이상 걸린다는 계산도 나왔다.
- NVMe 수명 우려에 대한 댓글도 있었다. 추론 중 NVMe에 지속적인 스트레스를 주는 구조여서 SSD 수명 단축이 걱정된다는 의견이었다. 프로젝트 자체는 'smart swap'처럼 동작해서 불필요한 I/O를 줄이는 게 목적이지만, 실제 장기 사용 시 영향은 미지수라는 반응이다.
- 유사한 설계의 다른 프로젝트(HN 링크 두 개 공유됨)와 비교가 필요하다는 댓글이 있었다. 특히 해당 프로젝트가 mmap을 사용한다는 점에서, 앞선 실험에서 mmap이 상당한 오버헤드를 유발했다는 결과와 비교 검증이 필요하다는 지적이 나왔다.
- 커뮤니티에서는 최신 모델(Qwen 3.5 MoE, 스트리밍 expert 방식)이나 Kimi K2.5 1T 파라미터 모델과의 벤치마크 비교를 원하는 목소리가 있었다. 현재 README의 비교 테이블이 Mixtral 8x7B, Llama 3.3 70B 같은 구 모델 위주라는 점도 지적됐다. 또한 llama.cpp mmap 모드와의 직접 비교가 없어서 실제 개선폭을 판단하기 어렵다는 비판적 댓글도 있었다.
How to Apply
- 32GB Mac에서 30~40GB급 Mixtral 8x7B나 Llama 70B 모델을 로컬에서 실행하고 싶은 경우, llama.cpp로 시도했다가 크래시가 났다면 Hypura를 대안으로 시도해볼 수 있다. 단, 속도가 0.3~2.2 tok/s 수준임을 감안하고 배치 처리나 오버나이트 작업에 적합하다.
- MoE 구조 모델(Mixtral 계열, Qwen MoE 계열 등)을 Apple Silicon에서 돌릴 때 Hypura의 expert 스파스 로딩이 가장 효과적이다. Dense 모델보다 MoE 모델에서 I/O 절감 효과(75%)가 크기 때문에, 우선 MoE 모델부터 테스트해보는 게 유리하다.
- 로컬 LLM 추론 인프라를 직접 만들거나 커스터마이징하는 경우, Hypura의 스토리지 계층 인식 스케줄링 설계(RESEARCH_INTEGRATION_PLAN.md 참고)를 참고해서 자체 시스템에 유사한 접근 빈도 기반 레이어 배치 전략을 적용할 수 있다.
Terminology
관련 논문
Claude Code는 프롬프트 읽기 전에 33k 토큰을 전송한다; OpenCode는 7k
동일한 모델과 작업 환경에서 Claude Code와 OpenCode의 실제 토큰 사용량을 API 레벨에서 측정한 결과, Claude Code가 시스템 프롬프트 오버헤드만으로 OpenCode 대비 4.7배 더 많은 토큰을 소비한다는 것을 확인했다.
Mesh LLM: iroh 기반 분산 AI 컴퓨팅
사무실, 집, 클라우드에 흩어진 GPU들을 하나의 OpenAI 호환 API로 묶어주는 분산 LLM 실행 시스템으로, 비싼 API 비용 없이 큰 모델을 직접 운영할 수 있다.
Frugon – LLM API 호출 로그를 분석해서 더 싼 모델로 대체 가능한 구간을 찾아주는 로컬 도구
내 LLM API 비용이 어디서 새는지 로컬에서 분석해주는 오픈소스 CLI 도구로, 비싼 모델 대신 저렴한 모델로 전환 가능한 호출을 골라낸다.
로컬에서 SOTA LLM 실행하기 완전 가이드 (하드웨어부터 설정까지)
2천 달러짜리 RTX 3090 한 장부터 4만 달러짜리 RTX PRO 6000 4장 셋업까지, 로컬에서 최신 LLM을 직접 돌리는 방법을 하드웨어 선택·구성·실행 설정까지 통째로 정리한 실전 가이드다.
Manticore Search에서 ONNX 경로를 재설계해 임베딩 속도를 14배 높인 방법
Manticore Search가 기존 SentenceTransformers/Candle 백엔드를 ONNX Runtime으로 교체해 텍스트 임베딩 생성 속도를 평균 14배 향상시켰다. 별도 모델 서비스 없이 DB 내부에서 직접 임베딩을 처리하는 구조에서 INSERT 속도가 곧 임베딩 속도이기 때문에 이 개선은 실질적인 ingest 처리량 향상으로 직결된다.
Asymmetric Quantization: 97% 스토리지 절감으로 Late Interaction 검색 품질 유지하기
멀티벡터 검색 모델의 문서 벡터를 1비트 이진값으로 압축하고 쿼리 벡터만 int8로 유지하는 비대칭 양자화 기법으로, 스토리지를 97% 줄이면서 검색 품질 손실을 0.61점(NDCG@10 기준)에 그치게 만든 실제 프로덕션 적용 사례다.