Swiftlet은 낮은 RAM 사용량으로 Mac과 iPhone에서 35B 및 80B Qwen 모델을 실행할 수 있게 합니다
Overview
Swiftlet은 Swift + Metal 런타임으로, 일반 Apple 기기에서 Qwen3‑Next‑80B‑A3B 및 Qwen3.6‑35B‑A3B 혼합 전문가 모델을 실행합니다. 각 모델의 작은 밀도 코어만 메모리에 상주시키고, 필요에 따라 저장소에서 라우팅된 전문가 가중치를 스트리밍하여, 약 2.5 GB RAM을 사용하는 iPhone에서 35B 모델을 실행하고, 약 4.3 GB RAM을 사용하는 Mac에서 80B 모델을 실행할 수 있게 합니다.
Expert Streaming 작동 방식
핵심 통찰은 각 토큰이 모델 파라미터의 약 3 B만 활성화한다는 것입니다. 각 레이어에서 모델은 토큰을 소수의 전문가 서브셋(80B의 경우 512개 중 10개, 35B의 경우 256개 중 8개)으로 라우팅합니다. Swiftlet은 다음과 같이 동작합니다:
- 밀도 가중치(어텐션, DeltaNet 프로젝션, 라우터, 공유 전문가, 임베딩)를 상주시킵니다: 4‑bit 양자화 시 약 1.3 GB(35B)와 약 2.5 GB(80B).
- 수만 개의 라우팅된 전문가를 고정 크기의 전문가 슬롯에 재패키징하고, LFU 및 최근성 기반 퇴출이 적용된 유한 풀에 뜨거운 전문가를 캐시합니다. 캐시 크기는 속도에 거의 영향을 미치지 않는데, Apple SSD가 미스를 흡수하기 때문입니다.
- Metal에서 런타임 컴파일드 셰이더를 사용하여 전체 순전파를 실행하므로 빌드 시 Metal 툴체인이 필요 없으며, 동일한 바이너리가 iOS에서도 실행됩니다.
- Gated DeltaNet 선형 어텐션을 레이어의 75 %에 사용하여 고정 크기의 순환 상태를 유지하고, 컨텍스트 길이에 관계없이 crescente KV 캐시를 피합니다.
성능 및 리소스 사용량
| 모델 | 디스크 크기 | 피크 RAM | 디코드 속도 (M5 Mac) | iPhone 17 속도 |
|---|---|---|---|---|
| Qwen3.6‑35B‑A3B (4‑bit) | 18 GB | 2.6 GB | 7‑11 tok/s | ~1 tok/s |
| Qwen3‑Next‑80B‑A3B (4‑bit) | 42 GB | 4.3 GB | 4.5‑5 tok/s | 측정되지 않음 |
| 이 숫자는 프로젝트의 README에서 가져온 것입니다. 낮은 RAM 사용량은 밀도 코어와 작은 활성 전문가 세트만 상주시키고, 나머지 가중치는 필요에 따라 SSD에서 스트리밍함으로써 달성됩니다. |
시작하기
Mac에서 Swiftlet을 사용해 보려면:
- 저장소를 클론하고 릴리스 바이너리를 빌드합니다:
git clone https://github.com/leonickson1/Swiftlet.git && cd Swiftlet swift build -c release - Hugging Face에서 모델 컨테이너를 다운로드합니다(재개 가능):
또는 80B 모델의 경우:.build/release/swiftlet-repack \ --from-hf Leonickson/Qwen3.6-35B-A3B-qpack \ --output ~/models/qwen3.6-35b.qpack.build/release/swiftlet-repack \ --from-hf Leonickson/Qwen3-Next-80B-A3B-qpack \ --output ~/models/qwen3-next-80b.qpack - 채팅 세션을 실행합니다:
.build/release/swiftlet chat ~/models/qwen3.6-35b.qpack \ "Who wrote One Hundred Years of Solitude?" \ "What language did he write it in?" - 통계와 함께 텍스트를 생성합니다:
.build/release/swiftlet generate ~/models/qwen3.6-35b.qpack \ --gpu --chat --prompt "Explain expert streaming in one paragraph." - OpenAI‑호환 서버를 시작합니다(루프백만):
.build/release/swiftlet-server --model ~/models/qwen3.6-35b.qpack --port 8080
같은 swiftlet-repack 명령은 원시 MLX 체크포인트도 재패키징할 수 있습니다(--from-hf mlx-community/... 또는 --source /path/to/checkpoint). 요구 사항: Apple Silicon, macOS 14+ 또는 iOS 17+, 그리고 여유 SSD 공간(약 18 GB for 35B, 약 42 GB for 80B).
사용 옵션
Swiftlet은 라이브러리로 먼저 설계되었으며, 네 가지 주요 사용 방법이 있습니다:
- Swift 패키지 – 어떤 macOS 또는 iOS 앱에도
SwiftletCore를 추가하고SwiftletSession을 사용하여 스트리밍 델타, 대화 캐시, 샘플링 컨트롤, 메모리 압력 처리가 있는 채팅을 수행합니다. - 명령줄 인터페이스 – 로컬 사용 및 벤치마크를 위한
swiftlet chat과swiftlet generate; MLX 체크포인트에서 컨테이너를 빌드하기 위한swiftlet-repack, Hugging Face에서 스트리밍하면서 재개 기능을 포함합니다. - OpenAI‑호환 서버 – 루프백에서 chat‑completions API를 구현하는
swiftlet-server; OpenAI‑호환 엔드포인트와 통신하는任何 UI가 스트리밍된 로컬 모델을 사용할 수 있게 합니다. - iOS 앱 – App Store의 Priv AI 앱은 SwiftletCore를 스트리밍 모델 엔진으로 내장합니다. 사용자는 Settings → Experimental Models에서 35B 모델을 다운로드하고, 서버 없이 기기에서 채팅할 수 있습니다. 앱의 소스는
leonickson1/localLLM에서 이용 가능하며, 직접 빌드하려면 Swiftlet 저장소를swiftlet이라는 이름으로 옆에 클론하고 Xcode 프로젝트를 열어야 합니다.
정확성 검증
순전파의 모든 레이어(Gated DeltaNet 재귀, 게이트된 GQA 어텐션, 희소 MoE 라우팅)는 mlx‑lm 참조 구현과 FP32 및 int4 양자화 형태 모두에서 검증됩니다. 증분 디코딩은 전체 시퀀스 처리와 비교됩니다. Metal 커널은 정확한 CPU 참조와 테스트되며, 빠른 및 스칼라 GPU 커널이 동일한 출력을 생성합니다. 컨테이너는 소스 체크포인트와 바이트 수준에서 검증 가능하며, 스트리밍 배치는 모델 시맨틱을 절대 변경하지 않습니다: 캐시 또는 디스크에서 제공되든 전문가는 동일한 답변을 제공합니다.
TurboFieldfare와의 관계
Swiftlet은 Gemma에 대한 Mac에서의 전문가 스트리밍 아이디어를 보여준 TurboFieldfare를 기반으로 합니다. 여러 공개된 설계 교훈을 채택했습니다: pread를 통해 전문가를 스트리밍하고 유한 슬롯 풀에 배치하며, LFU 및 최근성으로 퇴출하고, 전문가를 고정 스트라이드로 패키징하여 한 번의 인출이 한 번의 읽기와 동일하게 하며, 다운로드된 바이트를 최종 컨테이너 위치로 직접 라우팅하여 설치하고, 런타임에 셰이더를 컴파일합니다.
그러나 Swiftlet은 처음부터 작성되었습니다(약 10k 줄의 Swift와 Metal)하며 다음과 같은 점에서 다릅니다:
- Qwen 하이브리드 스택을 지원하며, Gated DeltaNet 선형 어텐션, 게이트된 GQA, 공유 전문가가 있는 고희소 MoE를 포함하는데, 반면 TurboFieldfare는 클래식한 밀도 Gemma 아키텍처를 대상으로 합니다.
- Metal에서 MLX affine int4/int8 그룹 양자화를 구현하며, 64‑bit 오프셋을 가진 바이트 주소 지정 커널을 사용해 멀티‑기가바이트 샤드를 처리하고, 협동 simdgroup GEMV 빠른 경로 및 명시적 위험 관리를 포함합니다.
- 모든 커널 변경을 보호하는 검증된 CPU 참조 구현 및 픽스처 인프라를 제공합니다.
.qpack컨테이너와 리패커를 포함하며, 스톨 복구 및 다운로드 취소가 가능한 재개 가능한 Hugging Face 스트리밍 설치 프로그램을 제공합니다.- thinking 및 non‑thinking Qwen 변형을 처리하고, 존재 및 빈도 페널티가 있는 샘플링, 최소 길이 및 문장 완료 정지, 델타 프리필드가 있는 대화 캐시, iOS 메모리 압력 조정을 처리하는 채팅 세션 레이어를 추가합니다.
- 앱‑엔진 통합을 포함한 end‑to‑end iPhone 지원을 제공합니다.
이 프로젝트는 캐싱 및 배치 정책에 대한 영감을
colibrì에서 얻었으며, mlx‑lm을 정확성 참조로 사용합니다. Swiftlet은 Claude Code와의 협업을 통해 구축되었습니다.
커뮤니티 피드백 및 제한 사항
Hacker News 게시물의 댓글에서는 열정과 우려가 모두 강조됩니다:
- 낙관적 시각: 일부는 소비자 기기가 효율적으로 대형 모델을 실행할 수 있는 미래로의 진전을 보고 있으며, 한 댓글 작성자는 "이것이 바로 진전이 일어나는 방식이다"라고 말했고, 또 다른 작성자는 "2.5 GB RAM으로 iPhone에서 35B 모델을 1 tok/s로 실행… 이것이 온디바이스 추론의 미래이다"라고 말했습니다.
- 저장소 마모 및 속도에 대한 우려: 여러 사용자는 빈번한 전문가 스트리밍이 SSD를 마모시킬 수 있고 디코드 속도가 낮다고 경고했습니다(예: "시간당 10 토큰 정도? 이러한 디스크 스왑 방법은 모두 동일한 단점이 있습니다 - 드라이브를 조기에 손상시키고 속도가 매우 느립니다." 및 "프리필이 병목 현상이 됩니다… M5에서 10k 토큰을 처리하는 데 반시간이 걸리는 것 같지는 않습니다." ).
- RAM 사용량 조절에 대한 욕구: 32 GB Mac을 가진 사용자는 추가 메모리를 활용해 더 빠른 실행을 위해 RAM 사용량을 구성 가능하게 할 수 있는지 질문했습니다.
- Claude Code 협업에 대한 질문: 댓글 작성자들은 "Claude Code와의 협업을 통해 구축"이라는 주장이 Anthropic과의 공식 파트너십을 나타내는지 아니면 단지 AI‑지원 개발에 대한 언급인지 궁금해했습니다.
- 다른 프로젝트와의 비교: iPhone에서 400B 모델 주장과 같은 유사한 스트리밍 가중치 노력에 대한 링크와 BigMoeOnEdge와 같은 대체 구현에 대한 참조가 공유되었습니다.
- 플랫폼별 문의: 사용자들은 Android/Linux/Windows 지원 여부와 해당 접근 방식이 다른 곳으로 이식 가능한지 물었습니다.
これらの発言は、エキスパートストリーミングの固有のトレードオフを反映しています:RAMフットプリントは低いですが、特にプリフィルフェーズではSSDトラフィックとレイテンシが増加します。
結論
Swiftletは、小さな密集コアのみをメモリに保持し、ストレージからルーティングされたエキスパートをストリーミングすることで、Mixture‑of‑ExpertsモデルをコンシューマーAppleデバイスで実行できることを示しています。このアプローチにより、約2.5 GBのRAMを使用するiPhoneで35B Qwenモデルを動作させ、約4.3 GBのRAMを使用するMacで80B Qwenモデルを動作させ、実験的なオンデバイスチャットに適したトークン毎秒レートを達成できます。この方法はRAM要件を削減しますが、ボトルネックをストレージ帯域幅と摩耗に移し、今後のキャッシュ戦略、プリフェッチ最適化、およびハードウェアアクセラレートされたエキスパートアクセスのための余地を残します。
Sources
관련
- 프로젝트
- 프로젝트
- Dispatch
- 프로젝트
- Dispatch