본문으로 건너뛰기

Apple silicon용 Lily, Qwen 추론 최적화

Lily가 Qwen3.6-35B-A3B의 Prefill과 Decode 경로를 Apple silicon에 맞춰 최적화해 MLX-LM 대비 평균 처리량을 각각 1.23배와 1.35배로 높였습니다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

Hybrid Compute는 Cloud 모델이 연구와 추론을 맡고 Mac의 Local 모델이 개인 파일과 앱을 처리하는 구조이며, 두 작업이 자연스럽게 이어지려면 Local Inference의 Prompt 처리와 Token 생성 속도가 충분히 높아야 합니다. Lily는 Qwen3.6-35B-A3B와 Apple silicon에 맞춘 Rust Runtime, Custom Metal Kernel을 한 프로세스에 결합하고 PyTorch와 MLX를 실행 경로에서 제외했습니다. M5 Max에서 256~128K 토큰의 10개 길이를 평균한 결과 MLX-LM보다 Prefill은 1.23배, Decode는 1.35배 높았고, 4K 조건에서는 각각 초당 5,749.9토큰과 186.6토큰을 기록했습니다. 핵심은 MoE Routing과 Gated DeltaNet State를 GPU에 남기고, Q4 Weight를 필요한 순간에만 복원하며, GQA의 KV 데이터를 재사용하고, Prefill과 Decode를 서로 다른 GPU 경로로 실행한 데 있습니다.

빠른 이해

새로운 점

범용 MLX-LM 스택 대신 Qwen3.6-35B-A3B의 구조와 Apple silicon의 Matrix·Vector·Memory 경로를 하나의 Rust Runtime에서 조정하는 전용 Local Inference Engine입니다.

핵심 메커니즘

Prompt 단계에서는 여러 Token Row에 Weight를 재사용하는 Matrix-Matrix 경로와 Neural Accelerator를 사용하고, Q4 Weight를 Grouped GEMM 내부에서 Tile 단위로 Dequantization합니다. GPU가 MoE Histogram·Prefix Scan·Scatter를 연속 처리하며 Expert Routing을 유지하고, Gated DeltaNet State를 Register에 남겨 순차 Scan을 수행합니다. Token 생성 단계에서는 Batch-1 Matrix-Vector 경로와 GPU 상주 Token Slot을 사용하고, Kernel Fusion·Concurrent Scheduling·Coalesced KV Load·GQA Packing으로 Token당 Memory Traffic과 동기화를 줄입니다.

핵심 수치

  • 평균 Prefill 처리량: Lily 4,156토큰/s, MLX-LM 3,388토큰/s, 1.23배- 256~128K 토큰의 동일 가중치 Checkpoint와 10개 Prompt 길이 평균
  • 평균 Decode 처리량: Lily 170.0토큰/s, MLX-LM 126.4토큰/s, 1.35배- 256~128K 토큰의 10개 Context 길이 평균
  • 4K Prompt Prefill: Lily 5,749.9토큰/s, MLX-LM 4,737.5토큰/s- M5 Max 40코어 GPU, 128GB Unified Memory
  • 4K Context Decode: Lily 186.6토큰/s, MLX-LM 140.9토큰/s- M5 Max 40코어 GPU, 128GB Unified Memory
  • 긴 Context Decode 개선: 32K 7.7%, 64K 27.4%, 128K 40.2%- Fixed-Block Attention Path를 General Path와 비교
  • 출력 일관성: Perplexity 0.04% 증가, Top-ranked Token 일치율 96.35%- 동일 Reference Prefix의 192개 위치 Teacher-Forced 비교

섹션별 상세

01

Lily와 실행 구조

Hybrid Compute는 Cloud의 Frontier Intelligence와 Mac의 Local Model을 분업시키며, Cloud는 연구·추론을 맡고 Local Model은 Mac의 개인 파일과 앱을 처리합니다. 이 구조에서 Local Inference가 병목이 되지 않으려면 Prompt를 빠르게 처리하고 높은 Token Generation Rate를 유지해야 하므로, Lily는 Apple silicon과 Qwen3.6-35B-A3B에 맞춘 전용 실행 경로를 구성했습니다. Rust Runtime이 Checkpoint·Session State·Generation Loop를 관리하고 OpenAI 호환 Chat-Completions API가 요청을 받아 Token을 스트리밍하며, Custom Metal Kernel이 Qwen 전용 연산을 실행합니다. 모델 구조와 실행 계획, Kernel 선택을 하나의 Runtime에서 조정해 범용성을 우선하는 MLX-LM보다 좁은 범위에서 더 세밀한 최적화를 수행하는 방식입니다.
02

Qwen 구조와 Prefill 경로

Qwen3.6-35B-A3B는 350억 개 Parameter를 보유하지만 토큰마다 약 30억 개만 활성화하며, Router가 256개 Expert 중 8개와 공유 Expert 1개를 선택하는 Sparse MoE 구조입니다. 또한 10개 Full-Attention Layer와 30개 Gated DeltaNet Layer를 결합해 Expert별 불균등한 입력, 길어지는 KV Cache, 순차적인 Recurrent State라는 세 가지 Workload를 만듭니다. Lily는 Prompt의 여러 행을 동시에 처리하는 Prefill에서 Weight를 재사용하는 Matrix-Matrix 연산을 사용하고, Q4 Weight를 Grouped GEMM 내부에서 작은 Tile 단위로 bfloat16으로 복원해 완성된 전체 Weight Array를 Unified Memory에 만들지 않습니다. 512토큰 Prompt에서 이 방식은 별도 Dequantization 결과를 메모리에 쓰고 다시 읽는 과정을 없애 End-to-End Prefill 처리량을 77.4% 높였고, GPU 내부 Routing은 같은 조건에서 89% 향상을 기록했습니다.
03

GPU 상주와 메모리 절감

MoE Routing은 토큰별 Expert 선택 뒤 Histogram으로 할당량을 세고 Prefix Scan으로 시작 Offset을 만들며 Scatter로 행을 Expert Group에 배치하는 순서로 진행됩니다. Lily는 이 과정을 하나의 GPU Command Buffer에 유지해 CPU가 중간 결과를 확인하고 다음 연산을 제출하는 동기화를 없앴으며, Kernel 수가 늘어도 Layer 내부의 CPU 대기를 제거하는 편이 더 빠른 경로가 됐습니다. Gated DeltaNet의 Recurrent State는 각 열을 Simdgroup에 배정하고 Thread Register에 올린 뒤 전체 Scan을 수행하며, 32비트 부동소수점 상태를 마지막에만 기록해 중간 메모리 이동을 줄입니다. 2K토큰 Prompt에서 32행 Tile과 4개 Simdgroup은 고정 16행 Tile보다 Prefill을 13.2% 높였고, Register 상주 Scan은 5.6% 향상을 보였으며, 긴 Prompt는 Bounded Chunk로 나눠 임시 Activation 메모리 증가를 제한했습니다.
04

Decode의 토큰 단위 최적화

Batch-1 Decode는 매 단계 새 행 하나만 처리하므로 Weight 재사용이 작고 토큰당 이동하는 Byte 수가 처리량을 좌우하며, Lily는 Matrix-Vector Kernel과 GPU 상주 Token Handoff를 사용합니다. GPU가 다음 Token ID를 다음 단계 입력 Slot에 직접 기록하고 CPU는 후속 작업을 준비해 매 토큰마다 발생하는 CPU 왕복 동기화를 없앴으며, 독립 Kernel은 Concurrent Metal Pass에서 겹쳐 실행하도록 Dependency를 기록했습니다. 네 개의 Kernel Chain은 중간값을 Register에 보존하는 Fusion으로 묶었고, GQA Packing은 8개의 독립 KV 요청을 2개의 공유 Load로 줄여 같은 계산과 출력 Byte를 유지했습니다. 3,840토큰 Context에서 Coalesced KV Load는 Key 대역폭을 33.8GB/s에서 47.9GB/s로, Value 대역폭을 42.0GB/s에서 61.8GB/s로 높여 Decode를 2.1% 개선했으며, 32K Context의 GQA Packing은 23.8% 향상을 기록했습니다.
05

한계와 전체 성능

Speculative Decoding처럼 개별 연산을 개선하는 기법이 전체 Loop를 항상 빠르게 만들지는 않았으며, Lily의 Batch-1 조건에서는 검증 단계가 2~5개 행이라는 비효율적인 형태가 되고 Expert 선택도 갈려 Decode가 18% 느려졌습니다. 반면 Full-Attention의 KV Cache가 길어질 때 Fixed-Block Layout으로 전환하면 작업 분배가 균형을 이루어 General Path 대비 32K에서 7.7%, 64K에서 27.4%, 128K에서 40.2%의 Decode 향상이 나타났습니다. M5 Max의 40코어 GPU와 128GB Unified Memory에서 256~128K 토큰 10개 길이를 평균한 Lily의 Prefill은 4,156토큰/s, Decode는 170.0토큰/s로 MLX-LM의 3,388토큰/s와 126.4토큰/s를 앞섰으며, 모든 측정 길이에서 더 높은 처리량을 기록했습니다. 동일 Prefix를 사용한 192개 위치의 Teacher-Forced 비교에서는 Perplexity가 0.04%만 높았고 Top-ranked Token 일치율은 96.35%여서 속도 개선과 출력 일관성을 함께 확인할 수 있는 수준입니다.

용어 해설

Mixture-of-Experts
하나의 거대한 신경망 전체를 매번 실행하지 않고 여러 Expert 중 일부만 선택하는 구조입니다. Qwen3.6-35B-A3B는 256개 Expert 중 토큰마다 8개와 공유 Expert 1개를 활성화해 계산량을 줄입니다.
Gated DeltaNet
이전 정보를 고정 크기 Recurrent State에 압축하고 Gate와 현재 토큰의 Delta Update로 갱신하는 구조입니다. 토큰이 앞선 토큰의 상태에 순차적으로 의존하므로 GPU Register에 상태를 유지하는 최적화가 중요합니다.
Grouped-Query Attention
여러 Query Head가 하나의 Key-Value Head를 공유하는 Attention 방식입니다. Qwen은 Query Head 16개와 KV Head 2개를 사용하며, KV Cache를 공유해 저장량과 반복 읽기를 줄입니다.
Prefill과 Decode(Prefill and Decode)
Prefill은 입력 Prompt의 여러 토큰을 한꺼번에 처리하는 단계이고, Decode는 한 번에 새 토큰 하나를 생성하는 단계입니다. 전자는 행렬-행렬 연산, 후자는 행렬-벡터 연산과 메모리 대역폭의 영향을 크게 받습니다.
그룹 단위 Affine 4비트 양자화(Groupwise Affine 4-bit Quantization)
가중치를 4비트 정수 코드로 저장하고 64개 단위 그룹마다 bfloat16 Scale과 Bias를 함께 두는 방식입니다. Qwen의 가중치 규모를 약 70GB에서 19.4GB Checkpoint로 줄여 Mac 통합 메모리에 상주시키는 기반이 됩니다.
통합 메모리(Unified Memory)
CPU와 GPU가 하나의 물리적 메모리 풀을 함께 사용하는 구조입니다. 모델을 별도 GPU 복사본 없이 유지할 수 있지만 가중치와 중간값을 읽고 쓰는 작업은 여전히 메모리 대역폭을 소비합니다.

기술

  • Apple silicon
  • Lily
  • Qwen3.6-35B-A3B
  • MLX
  • MLX-LM
  • Rust
  • Metal
  • Metal 4
  • Mixture-of-Experts (MoE)
  • Gated DeltaNet
  • Grouped-Query Attention (GQA)
  • Q4 quantization
  • M5 Max

언급된 리소스

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

수집 2026. 09. 02.출처 타입 WEB

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.