본문 바로가기
C.W.K.
Stream
Lesson 05 of 07 · published

전문가 혼합은 산수를 바꿔

~15 min · llm-physics, moe, active-parameters, capacity, dispatch-overhead, measured

Level 0스펙 시트 훑는 사람
0 XP0/91 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete
"용량은 총 파라미터를 따라. 속도는 활성 파라미터를 따라. 두 번째 약속을 얼마나 받는지는 런타임이 정해."

숫자 하나 대신 둘

밀집 모델엔 파라미터 수가 하나고, 그게 필요한 메모리이자 토큰마다 읽는 바이트야. 전문가 혼합 모델은 모든 피드포워드 레이어를 여러 전문가로 쪼개고 토큰마다 그중 몇 개로 라우팅해. Qwen3.5-35B-A3B는 256 중 8, GLM-5.3-Flash는 288 중 8, DeepSeek-V4.1-Flash는 384 중 6, Kimi K3는 896 중 16. 그러니 수가 둘이야. 모든 전문가가 상주해야 하니까 메모리 발자국을 정하는 파라미터, 그리고 라우팅된 전문가만 읽히니까 토큰당 바이트를 정하는 활성 파라미터. 이름이 말해줘. 총 35B, 활성 3B.

디코드 상한엔 큰 변화야. 실험의 토큰당 바이트 회계는 35B-A3B의 전문가 텐서 18.1 GB를 8/256으로 읽고, 모든 토큰이 건드리는 공유 전문가, 어텐션, 헤드를 더해. 20.4 GB 파일에서 토큰당 1.66 GB. office에서 상한은 초당 385토큰 근처야. 4B의 269와 2B의 602 사이인데 용량은 27B 급이야. 이 집의 더 큰 체크포인트들에 같은 산수를 하면 이래.

체크포인트총 / 활성 (벤더 카드)전문가 수, 토큰당 라우팅디스크 발자국토큰당 바이트 (유도)증거
Qwen3.5-35B-A3B (4비트)35B / 3B256, 8 (+공유 1)20.39 GB1.66 GB헤더에서 나온 물리
Qwen3.8-Flash-Next (bf16)125B + n-gram 51B + MTP 4B / 6B512, 10360.0 GBbf16 ~12 GB, 4비트 ~3 GB벤더 카드 + 유도
GLM-5.3-Flash (bf16)320B / 18B288, 8642.7 GBbf16 ~36 GB, 4비트 ~9 GB벤더 카드 + 유도
DeepSeek-V4.1-Flash (FP4/FP8 혼합)552B + 메모리 196B / 프리필 8B, 디코드 16B384, 6510.3 GB출하 혼합 정밀도에서 ~8 GB벤더 카드 + 유도
GLM-5.3 (bf16)744B / 40B256, 8 (+공유 1)1,506.7 GBbf16 ~80 GB, 4비트 ~20 GB벤더 카드 + 유도
Kimi K3 (MXFP4 전문가)2.8T / 104B896, 16 (+공유 2)1,561.0 GB출하 정밀도에서 ~52 GB벤더 카드 + 유도

마지막 두 칸을 같이 읽어. 4비트로 로드만 하려 해도 512 GB 맥이 필요한 7440억 파라미터 모델이, 산수로는 office에서 638 ÷ 20 ≈ 초당 32토큰으로 디코드해. 밀집 27B와 같은 속도야. 그게 이 아키텍처의 약속이고, 2026년의 제일 큰 오픈 체크포인트가 전부 혼합인 이유야. 메모리 천장과 대역폭 천장은 다른 숫자고, MoE는 모델이 첫째의 꼭대기에 앉으면서 둘째의 바닥 근처에 머물게 해줘.

런타임이 그 약속으로 하는 것

이제 측정. 35B-A3B의 상한은 office에서 385, pro2023에서 236, music에서 442 tok/s야. 실측: 89, 110, 101.5. 상한의 23에서 47퍼센트. 같은 기계에서 밀집 9B와 27B는 67–74%인데. 그리고 제일 이상한 건 M3 Max에서 제일 빠르다는 거야. 셋 중 대역폭이 제일 적은 기계에서. 바이트는 병목이 아니야. 이 모델의 배치 1 디코드 스텝은 40개 레이어마다 선택된 전문가들에 걸친 라우팅 gather와 작은 행렬-벡터 커널 한 세트를 디스패치해. 많은 실행, 각각은 GPU 코어 여든 개를 채우기엔 너무 작고, 각각이 실험 트랙이 잰 토큰당 고정 오버헤드를 치러. Max의 더 낮은 토큰당 오버헤드(Ultra들의 1.7–1.8 ms 대비 1.1 ms)가 여기선 Ultra들의 추가 대역폭보다 값져. 활성 파라미터 산수가 상한을 정하고, 전문가별 커널 디스패치가 바닥을 정하고, mlx-lm 0.31에서 배치 1의 작은 MoE는 바닥이 사는 자리야.

아키텍처에 대한 판결은 아니야. 같은 모델의 프리필은 office에서 초당 1,276토큰으로 돌아. 밀집 9B보다 빨라. 프리필은 많은 토큰을 같은 전문가들에 묶어 보내서 커널이 채워지거든. 한 번에 여러 사용자를 서빙하는 것(다음 레슨)도 디코드에 같은 효과를 내. 그리고 더 좋은 런타임이 격차를 좁힐 수 있어. 디스패치 비용은 소프트웨어니까. 하지만 '활성 3B니까 3B처럼 디코드한다'의 정직한 라벨은 측정이 아니라 상한이고, 이 퀘스트의 측정이 그 라벨이야.

Code

moe_promise.py — MoE가 약속하는 상한 대 사다리가 잰 것·python
#!/usr/bin/env python3
"""For each lab Mac: the 35B-A3B's ceiling from achieved bandwidth and its
1.659 GB per token, the measured decode rate, and the fraction reached —
beside the dense 9B on the same machine for contrast."""

ACHIEVED = {"office": 638, "pro2023": 391, "music": 734}      # GB/s, stream.py sum (read-only)
BYTES = {"Qwen3.5-35B-A3B-4bit": 1.659, "Qwen3.5-9B-4bit": 4.466}
MEASURED = {                                                    # decode tok/s, 2026-09-15
    "office":  {"Qwen3.5-35B-A3B-4bit": 89.1,  "Qwen3.5-9B-4bit": 95.1},
    "pro2023": {"Qwen3.5-35B-A3B-4bit": 109.9, "Qwen3.5-9B-4bit": 72.9},
    "music":   {"Qwen3.5-35B-A3B-4bit": 101.5, "Qwen3.5-9B-4bit": 105.5},
}

print(f"{'alias':8} {'model':22} {'ceiling':>8} {'measured':>9} {'fraction':>9}")
for alias, bw in ACHIEVED.items():
    for model, gb in BYTES.items():
        ceiling = bw / gb
        meas = MEASURED[alias][model]
        print(f"{alias:8} {model:22} {ceiling:8.0f} {meas:9.1f} {meas/ceiling:9.0%}")

print("\nThe MoE reaches a fifth to a half of its ceiling; the dense 9B two thirds.")
print("The MoE is fastest on the machine with the least bandwidth and the least per-token overhead.")

External links

Exercise

moe_promise.py를 돌린 다음, 네 맥에서 35B-A3B와 토큰당 바이트가 비슷한 밀집 모델(사다리에선 2B가 제일 가까워)로 측정을 반복해. 상한 둘과 실측 속도 둘을 기록해. 그다음 답해. 네 기계에서 배치 1 채팅 어시스턴트엔 둘 중 뭘 배포하고, 문서 만 개를 도는 야간 배치 작업엔 뭘 배포할래?
Hint
배치 1에선 밀집 2B가 비슷하거나 더 빠르게 디코드하고 발자국은 5분의 1이야. MoE의 추가 용량이 사주는 토큰당 품질은 네가 판단할 일이지 점수 매길 일이 아니고. 배치 작업엔 MoE의 상한이 중요해지기 시작해. 배치 디코드가 전문가 커널을 채우거든. 다음 레슨의 주제야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.