Mixture-of-Kittens(MoK)란? Cursor의 결정론적 MoE 메가커널 완전 정리 — NVL72에서 2.37배 빠른 이유
#MoK #MixtureOfKittens #MoE #Megakernel #Cursor #NVL72 #Blackwell #GB300 #Apache2.0 #AI학습최적화
Mixture-of-Kittens(MoK)는 Cursor Research가 Apache-2.0 라이선스로 공개한 MoE(Mixture of Experts) 학습용 메가커널입니다. 모든 통신과 연산을 하나의 결정론적(deterministic) 커널로 통합해, NVL72 랙 환경에서 기존 베이스라인 대비 최대 2.37배 빠른 처리량을 달성했습니다. 이 글에서는 MoK가 무엇인지, 왜 중요한지, 어떤 설계 결정이 성능을 끌어올렸는지를 비전문가도 이해할 수 있게 풀어드립니다.
📑 목차 한눈에 보기
1. MoK란 무엇인가?
Mixture-of-Kittens(MoK)는 Cursor Research가 자사의 Composer 코드 생성 모델을 학습하기 위해 만든 Mixture of Experts(MoE) 학습용 메가커널의 고유 이름입니다. 이름 그대로 "고양이 새끼들의 혼합물"이라는 말장난이지만, 실체는 매우 진지한 GPU 커널 설계입니다.
MoK를 한 문장으로 요약하면 이렇습니다.
"MoE 학습에서 일어나는 모든 통신과 연산을 하나의 결정론적 거대 커널로 합친 것"
여기서 메가커널(megakernel)이란 GPU 프로그래밍에서 통신과 연산을 하나의 통합된 커널로 합친 큰 규모 커널을 가리킵니다. 작은 커널 호출을 수십~수백 번 반복하는 대신, 하나의 거대한 커널 안에서 다 처리하는 셈이죠. MoK는 이미 수만 개 GPU에 걸쳐 Composer 학습을 구동하고 있을 만큼 실전에서 검증된 시스템입니다.
왜 갑자기 "결정론적(deterministic)"이 중요한가?
결정론적이란 같은 입력을 넣으면 항상 같은 출력이 나온다는 뜻입니다. AI 학습에서 결정론성은 두 가지로 매우 가치가 큽니다.
- on-policy 강화학습(RL) 사후 학습: 분포가 흔들리면 학습이 불안정해지는데, 결정론적이면 비교 실험이 깔끔해집니다.
- 내부 비교 실험(ablation): "이 옵션만 바꿨을 때 성능이 어떻게 달라지는가"를 공정하게 측정할 수 있습니다.
관련 핵심 용어 한 번에 정리
- Mixture of Experts(MoE)
- 여러 전문가(expert) 신경망으로 문제 공간을 나눠, 입력당 일부 전문가만 활성화하는 희소 활성화 구조. Switch Transformer, Mixtral, DeepSeek-V3가 대표 사례입니다.
- Megakernel
- 통신·연산을 하나의 거대 커널로 합친 형태. 작은 커널 호출을 반복하는 일반적 패턴과 대비됩니다.
- NVL72
- NVIDIA의 단일 NVLink 도메인 안에 72개 Blackwell GPU를 묶은 랙 스케일 시스템.
- NVLink
- NVIDIA의 GPU↔GPU/CPU 고속 직렬 상호연결. PCIe보다 훨씬 높은 대역폭과 메시 토폴로지를 제공합니다.
2. 누가 도입할 수 있나? — 하드웨어 진입장벽
MoK는 GitHub에서 Apache-2.0 라이선스로 공개되어 있어 소스 코드는 자유롭게 사용·수정·배포할 수 있습니다(특허 방어 조항 포함). 다만 실제 운영에는 매우 높은 하드웨어 요구사항이 따라옵니다.
| 요구 항목 | 필요 사양 |
|---|---|
| GPU | NVIDIA Blackwell SM100 또는 SM103 (GB200/GB300 NVL72 랙) |
| Python | 3.12 이상 |
| PyTorch | 2.10 이상 |
| CUDA 툴킷 | 13.0 이상 |
| GPU 간 버퍼 | PyTorch 대칭 메모리(symmetric memory) |
| 라이선스 | Apache-2.0 (자유 사용/수정/배포) |
정리하면 현실적인 도입 대상은 다음 조직으로 좁아집니다.
- 프론티어 AI 연구소(frontier lab)
- 자금을 조달받은 모델 스타트업
- GPU 네오클라우드 사업자
- 국가 컴퓨팅 센터
단일 노드 팀이나 8-GPU 정도의 작업 환경에서는 MoK의 이점을 살릴 수 없습니다. 적용 범위는 좁지만 가치는 매우 높습니다.
3. 왜 MoE 레이어가 병목인가?
Cursor 팀은 처음에 연산(compute) 측면에서 자체 MXFP8·NVFP4 학습 커널과 MoE 추론용 'warp decode' 경로를 만들었습니다. 하지만 이 접근은 GPU 간 통신이 별도로 처리될 것이라고 가정했죠. 실제 프로덕션 환경에서는 통신이 제한 요소로 드러났습니다.
MoE 레이어가 엔드투엔드 학습 시간의 절반 이상을 차지할 수 있습니다.
즉, 모델이 얼마나 빠르게 학습되느냐는 결국 "GPU 간 데이터를 얼마나 빨리 주고받느냐"에 의해 결정되는 셈입니다. 이 한계를 깨기 위한 첫 번째 조치가 GB300 NVL72로의 전환이었습니다.
GB300 NVL72가 상황을 바꾼 이유
NVL72 랙은 단일 NVLink 도메인 안에 72개의 GPU를 묶어 놓은 구조입니다. PCIe처럼 느린 직렬 버스가 아니라 NVLink라는 고속 메시 네트워크가 GPU들을 직접 연결하기 때문에, 세밀한(fine-grained) 오버랩이 가능합니다.
다만 랙 안의 통합된 Grace CPU는 GPU보다 느립니다. 그래서 CPU-GPU 동기화를 공격적으로 줄이는 것이 핵심 문제가 되었고, MoK의 세 가지 설계 결정이 바로 이 문제를 정면으로 공략합니다.
4. 성능을 끌어올린 세 가지 설계 결정
① 통신 방향을 연산(operation)별로 선택한다
기존 DeepEP 같은 방식은 push(밀어 넣기) 기반 전송을 사용합니다. Cursor 팀의 마이크로벤치마크 결과 push는 한 방향으로만 데이터를 보내기 때문에 반대편 NVLink 레인이 놀게 됩니다.
반면 pull(끌어오기) 기반 dispatch는 expert 불균형 상황에서 NVLink 대역폭 활용률을 최대 29% 더 높게 달성했습니다. 더 결정적인 차이는 완료 신호(completion signal) 시간입니다.
| 방식 | 완료 신호 지연 |
|---|---|
| push dispatch | 103 µs |
| pull dispatch | 18 µs (약 5.8배 빠름) |
MoK는 그래서 pull 기반 순방향 dispatch + push 기반 순방향 combine을 사용하고, backward 패스에서는 그 반대로 미러링합니다. 단 하나의 스케줄 테이블이 이 네 가지를 모두 처리하며, MoE 런타임의 3% 미만만 차지합니다.
② 오버랩의 세분성(granularity)은 "중간"이 답
기존 방식에는 두 극단이 있었습니다.
- Comet: 통신과 연산을 매우 세밀하게(fine-grained) 오버랩
- DeepEP: 비교적 거칠게(coarse-grained) 묶어서 처리
Cursor 팀은 최적점이 작업 부하에 따라 달라지는 중간 지점이라고 주장합니다. 휴리스틱은 expert-그룹화된 GEMM(행렬 곱 연산)당 최소 두 개의 전체 SM wave를 목표로 합니다. Composer 2.5의 베이스 모델인 Kimi 2.5 형태(Shape)의 경우, 최소 토큰 수는 2,368개이며, 측정된 지연 시간도 이 추정치와 거의 일치합니다.
③ 링 토큰 버퍼가 CPU를 루프에서 제거한다
토큰을 주고받을 때 일반적인 대안은 두 가지인데, 둘 다 단점이 있습니다.
- 토큰을 버린다 → 정확도 손실
- CPU에게 버퍼 크기를 결정하도록 요청 → CPU가 느려서 병목
MoK는 대신 수백 메가바이트의 고정 링(ring) 버퍼를 순환시킵니다. 미니배치 단위로 동작하고, 매크로배치 경계에서 dispatch와 combine을 인터리빙합니다. backward 시에는 링이 역방향으로 진행되어 순방향 활성화(activation) 리플레이를 최소화합니다.
결과적으로 MoK는 토큰을 하나도 버리지 않으면서 CPU-GPU 동기화를 완전히 제거합니다.
메가커널의 기술적 토대
MoK는 메가커널로 구축되었으며 완전히 결정론적입니다. BF16(Brain Floating Point 16)과 MXFP8(Microscaling FP8) 정밀도 모드를 모두 지원합니다. 스케줄링은 Blackwell의 Cluster Launch Control을 통해 실행되므로 랙 간 RDMA가 이를 뒤에서 직렬화하지 않습니다. Router 가중치 그래디언트는 SonicMoE 스타일 계산을 SwiGLU backward에 통합(fused)하여 사용합니다.
5. 벤치마크 결과 — 숫자로 보는 2.37배
레이어 벤치마크 (단일 NVL72 랙, EP degree 64)
각 GPU는 라우팅 전에 2,048개의 토큰을 보유한 상태에서 측정했습니다. 비교한 베이스라인은 다음과 같습니다.
NCCL + PyTorchDeepEP + PyTorchDeepEP + TransformerEngineHybridEP + Megatron
테스트에 사용된 모델 형태(Shape)는 Kimi K2.7 Code, GLM-5.2, Qwen3.5-397B-A17B, DeepSeek-V4-Pro입니다.
| 정밀도 / 단계 | MoK 향상 폭 (가장 빠른 베이스라인 대비) |
|---|---|
| MXFP8 forward | 최대 2.37배 |
| MXFP8 backward | 1.78배 |
| BF16 forward | 1.92배 |
| BF16 backward | 1.58배 |
엔드투엔드 벤치마크 (여러 GB300 NVL72 랙, 512 GPU)
GPU당 초당 토큰 수(TPS/GPU) 비교 결과입니다.
| 지표 | 베이스라인 | MoK | 향상 |
|---|---|---|---|
| GPU당 초당 토큰 수 | 760.9 | 1,070.2 | 1.41배 |
즉, 512개 GPU 규모에서도 41% 더 많은 토큰을 같은 시간에 처리할 수 있다는 의미입니다. 대규모 MoE 학습의 비용 구조를 실질적으로 바꿀 수 있는 숫자입니다.
6. 핵심 요약 5줄
- MoK는 NVL72 랙용으로 모든 MoE 통신과 연산을 하나의 결정론적 메가커널로 통합합니다.
- Pull dispatch + push combine 조합이 신호 전달 시간을 103 µs → 18 µs(약 5.8배)로 단축합니다.
- 링 토큰 버퍼는 토큰을 하나도 버리지 않으며 CPU-GPU 동기화를 완전히 제거합니다.
- 가장 빠른 공개 베이스라인 대비 최대 2.37배, 512 GPU 엔드투엔드에서 1.41배 성능 향상.
- Apache-2.0 라이선스지만 Blackwell SM100/SM103, CUDA 13.0+, PyTorch 2.10+가 필요해 도입 대상은 제한적입니다.
7. 자주 묻는 질문(FAQ)
Q1. Mixture-of-Kittens(MoK)는 무엇의 약자인가요?
"고양이 새끼들의 혼합물"이라는 말장난적 이름으로, Mixture of Experts(MoE)를 변형한 것입니다. Cursor Research가 자사의 Composer 모델 학습용으로 만든 MoE 메가커널의 고유 이름입니다.
Q2. Apache-2.0 라이선스면 누구나 무료로 쓸 수 있나요?
소스 코드는 자유롭게 사용·수정·배포할 수 있습니다(특허 방어 조항 포함). 다만 실제로 돌리려면 NVIDIA Blackwell SM100/SM103 GPU, CUDA 13.0 이상, PyTorch 2.10 이상이 필요하므로 NVL72 랙을 보유한 조직이 아니면 실전 적용은 어렵습니다.
Q3. NVL72가 뭔가요?
NVIDIA의 랙 스케일 AI 컴퓨팅 시스템입니다. 단일 NVLink 도메인 안에 72개의 Blackwell GPU를 묶어 놓은 구성으로, GPU들 사이의 세밀한 통신 오버랩을 가능하게 합니다. 대표 제품으로는 GB200 NVL72, GB300 NVL72 랙이 있습니다.
Q4. 왜 기존 MoE 학습은 느렸나요?
GPU 간 통신이 병목이었기 때문입니다. 연산 자체는 빨라도, 토큰을 다른 GPU로 보내고 신호를 돌려받는 과정에서 100 µs 단위의 지연이 누적돼 MoE 레이어가 학습 시간의 절반 이상을 잡아먹었습니다.
Q5. "결정론적(deterministic)"이라는 게 왜 중요한가요?
같은 입력을 넣으면 항상 같은 출력이 나온다는 뜻입니다. 이 덕분에 on-policy 강화학습과 내부 비교 실험(ablation)이 안정적으로 수행됩니다. 일반적인 분산 학습은 통신 스케줄이 매번 달라져 실험 재현이 흔들리는데, MoK는 이를 제거합니다.
Q6. BF16과 MXFP8은 어떤 차이가 있나요?
BF16(Brain Floating Point 16)은 FP32와 같은 표현 범위를 절반 크기로 제공하는 16비트 부동소수점 포맷입니다. MXFP8(Microscaling FP8)은 32개의 8비트 부동소수점을 8비트 공유 지수와 묶어 메모리·연산 효율을 극대화한 블록 부동소수점 포맷입니다. MoK는 두 정밀도 모드를 모두 지원합니다.
Q7. Composer 2.5 모델은 무엇인가요?
Cursor의 자체 코드 생성 모델입니다. 베이스 모델은 Kimi 2.5 형태(Shape)로 학습되며, MoK가 이를 구동하는 핵심 엔진 역할을 합니다. 이미 수만 개 GPU에서 학습이 운영되고 있습니다.
Q8. 일반적인 AI 개발자도 이 코드를 살펴볼 가치가 있나요?
직접 실행은 어렵지만, 결정론적 커널 설계, pull dispatch + push combine, 링 버퍼, 메가커널 통합 같은 패턴은 대규모 분산 학습 시스템을 만드는 모든 엔지니어에게 좋은 참고 사례입니다. 소스 코드를 읽고 아키텍처를 학습하는 것만으로도 충분히 가치가 있습니다.