Swiftlet: Mac에서 80B Qwen을 4.3GB RAM으로, iPhone에서 35B를 돌리는 런타임
Show HN: Run an 80B Qwen in 4.3 GB of RAM on a Mac, and a 35B on an iPhone
TL;DR Highlight
expert 가중치를 SSD에서 스트리밍했더니 80B가 RAM 4.3GB로 돈다
Who Should Read
로컬 LLM을 Mac이나 iPhone 앱에 넣고 싶은데 RAM 한계에 막힌 iOS·macOS 개발자
Core Mechanics
- 80B가 RAM 4.3GB에서 돈다
- Qwen3-Next-80B-A3B 4-bit는 디스크 42GB, 최대 RAM 4.3GB, M5 Mac에서 디코드 4.5~5 tok/s다.
- Qwen3.6-35B-A3B 4-bit는 디스크 18GB, RAM 2.6GB, 7~11 tok/s다.
- 핵심은 expert 스트리밍
- MoE(질문마다 일부 전문가 블록만 쓰는 모델)는 토큰당 활성 파라미터가 약 3B뿐이다.
- 어텐션·라우터·임베딩 같은 작은 dense 핵심만 메모리에 두고 expert는 필요할 때 SSD에서 읽는다.
- SSD 읽기 한 번에 expert 하나
- expert를 고정 간격 blob으로 .qpack에 재배치해 expert 하나를 pread 한 번으로 읽는다.
- mmap은 쓰지 않고, 자주 쓰는 expert는 LFU+최근성 캐시에 둔다.
- 64GB Mac에 안 들어가는 모델도 돈다
- M4 Max 64GB에서 8-bit 80B(가중치 78.8GiB)를 6.9GiB로 약 4.8 tok/s에 돌린다.
- 4-bit 397B(207.6GiB)는 12.6GiB로 약 1.4 tok/s다.
- 속도는 활성 파라미터가 좌우한다
- 디코드 속도는 컨테이너 크기보다 활성 파라미터(35B·80B는 약 3B, 397B는 약 17B)와 더 잘 맞는다.
Community Reactions
- 프리필이 병목이라는 반론
- M5에서 10k 토큰 처리에 30분이 걸린다면 디코드 수치만으로는 실용성을 알 수 없다는 의견이 있었다.
- 디스크 스와핑 방식은 드라이브 수명을 깎고 느리다는 비판도 있었다.
- RAM 크기 조절에 대한 관심
- 32GB 맥북이라면 RAM 캐시를 늘려 더 빠르게 돌릴 수 있는지 묻는 댓글이 있었다.
- 24~32GB Mac에서 캐시를 늘려 테스트해 보겠다는 사람도 있었다.
- 다른 플랫폼과 선행 프로젝트
- Android·Linux·Windows에서 같은 방식으로 도는 게 있는지 묻는 댓글에 BigMoeOnEdge 링크가 달렸다.
- 비슷한 가중치 스트리밍으로 iPhone에서 400B급 모델을 돌린 ANEMLL 사례가 이미 있다는 지적도 있었다.
- TurboFieldfare 작성자의 응답
- README가 TurboFieldfare를 출발점으로 언급한 데 대해 작성자가 감사를 표했다.
- 웹 검색 연동 같은 로컬 모델의 한계를 어떻게 풀지 묻는 질문도 있었다.
How to Apply
- Apple Silicon Mac에서 35B 돌려보기
- 저장소를 클론하고 swift build -c release 후 swiftlet-repack으로 35B 4-bit 컨테이너(18GB)를 받아라.
- swiftlet chat으로 질문 몇 개를 던져 속도와 RAM을 직접 재라.
- swiftlet-server를 기존 코드에 연결하기
- OpenAI 호환 클라이언트의 base URL을 http://localhost:8080/v1로 바꿔라.
- 내부 도구나 프로토타입의 LLM 호출을 로컬 모델로 바꿔 품질을 비교하라.
- 앱에는 SwiftletCore 패키지 추가하기
- macOS·iOS 앱이라면 Swift 패키지의 SwiftletSession으로 스트리밍 채팅을 붙여라.
- 메모리 압박 처리와 대화 캐시가 내장돼 있으니 직접 구현하지 마라.
- 긴 프롬프트 워크로드는 먼저 측정하기
- 시스템 프롬프트가 긴 에이전트용이라면 프리필 시간을 실제 프롬프트로 재라.
- 16GB 기기라면 캐시 --cache-gb 2부터 시작하라.
Try It
# 터미널(Apple Silicon Mac, macOS 14+, 여유 SSD 18GB 이상)에 붙여넣기
git clone https://github.com/leonickson1/Swiftlet.git && cd Swiftlet
swift build -c release
# 35B 4-bit 컨테이너 다운로드
.build/release/swiftlet-repack \
--from-url https://pub-c0cfece2dbc340dbb2cd9d94310a7d68.r2.dev/qwen3.6-35b-qpack \
--output ~/models/qwen3.6-35b.qpack
# 채팅 실행
.build/release/swiftlet chat ~/models/qwen3.6-35b.qpack \
"What is the capital of Spain?" "And what about France?"
# 이어서 해 볼 것: OpenAI 호환 서버로 띄우기
.build/release/swiftlet-server --model ~/models/qwen3.6-35b.qpack --port 8080Terminology
관련 논문
Mercury 3: 규모를 키운 diffusion LLM, 초당 1,000토큰 이상
Diffusion LLM을 40배 키웠더니 속도 4~8배, 품질은 속도 특화 모델 수준
Timestral: Mistral의 시계열 파운데이션 모델
209M 파라미터 시계열 모델이 3대 벤치마크 1위, CPU에서도 돌아간다
DeepSeek V4.1 Flash 1017 (Max) 성능·속도·가격 분석
DeepSeek V4.1 Flash 1017 Max는 지능 지수 45에 211 tok/s, 입력 $0.30
LLM 프록시를 직접 안 돌리면 무슨 일이 벌어지는지 어떻게 아나
자체 LLM 프록시를 세웠더니 키·모델·캐시 미스를 직접 볼 수 있다
DeepSeek V4.1 Flash 1017: 싼 가격에 1M 컨텍스트를 주는 에이전트용 모델
DeepSeek V4.1 Flash 1017은 입력 $0.05/M, 1M 컨텍스트의 에이전트용 모델
DeepSeek-V4.1-Flash-1017 공개: 더 짧게 생각하고 더 빠르게 일하는 에이전트용 모델
DeepSeek V4.1 Flash 마이너 업데이트로 코딩·에이전트 벤치 점수↑, 실행 시간·출력 길이↓
Llmspeed: 로컬 LLM 속도를 하드웨어 구매 전에 체감해 보는 시뮬레이터
GPU·모델을 고르면 로컬 LLM 속도를 미리 체감하게 해 주는 시뮬레이터