Swiftlet, iPhone에서 35B Qwen을 2.5GB RAM으로 돌리는 방식

Swiftlet은 Qwen 계열의 대형 MoE 모델을 Apple 기기에서 돌리기 위한 Swift + Metal 런타임이다. README가 내세우는 숫자는 선명하다. Qwen3.6-35B-A3B 4-bit 모델은 디스크 18GB, peak RAM 2.6GB로 M5 Mac에서 7~11 tok/s를 목표로 하고, Qwen3-Next-80B-A3B 4-bit 모델은 디스크 42GB, peak RAM 4.3GB로 4.5~5 tok/s 수준을 제시한다. 35B 모델은 iPhone 17에서도 약 2.5GB RAM, 현재 약 1 tok/s로 실행된다고 설명한다.

핵심은 모델 전체를 메모리에 올리지 않는 방식이다. Swiftlet은 attention, DeltaNet projection, router, shared expert, embedding처럼 계속 필요한 dense weight만 상주시키고, token마다 선택되는 routed Mixture-of-Experts weight는 .qpack 컨테이너에서 필요할 때 읽는다. expert는 fixed-stride blob으로 재포장되어 한 expert fetch가 하나의 pread로 끝나도록 설계되어 있다. cache는 LFU와 최근성 기준을 섞어 bounded pool로 관리한다.

이 구조는 “모델 크기”와 “실제 활성 파라미터”를 분리해서 본다. README는 token당 활성화되는 파라미터가 약 3B라서 대형 모델처럼 대화하고 글을 쓰지만, 사실 기억은 작은 모델에 가깝다고 선을 긋는다. 과장보다 제약을 같이 적어 둔 점이 오히려 기술적 신뢰를 만든다. 또한 Gated DeltaNet linear attention을 쓰는 layer에서는 context가 길어져도 KV cache가 계속 커지지 않는다는 점도 Apple 기기 메모리 예산과 맞물린다.

HN 댓글의 논점도 그쪽이었다. 일부는 SSD wear와 속도를 걱정했지만, 더 많은 관심은 “지금은 느리고 실험적이어도 이 방향이 on-device inference의 현실적인 경로인가”에 있었다. 추가 RAM을 가진 Mac에서 cache를 키워 속도를 높일 수 있는지, iPhone 앱으로 설치 가능한 형태까지 이어지는지가 주요 질문이다. 원문은 GitHub 저장소이며, 토론은 HN 스레드에서 이어졌다.