AMD MI355X에서 Kimi K3 실행하기: 오픈 소스 AI 추론이 달러당 성능 측면에서 승리하는 방법
요약
AMD MI355X가 2.8조 파라미터 규모의 Kimi K3 모델 서빙 시 NVIDIA B300 대비 우수한 달러당 성능을 제공함을 분석합니다. 대규모 MoE 모델의 효율적인 추론을 위한 메모리 대역폭 및 분산 병렬 처리의 중요성을 다룹니다.
핵심 포인트
- AMD MI355X가 Kimi K3 추론에서 NVIDIA 대비 높은 경제성 입증
- 2.8T 파라미터 MoE 모델의 효율적 서빙을 위한 메모리 최적화 필요
- 1M 컨텍스트 지원을 위한 KV 캐시 관리 및 분산 텐서 병렬성 필수
- 추측 디코딩(Speculative decoding)을 통한 디코드 병목 현상 완화
AMD의 MI355X는 2.8조 개의 파라미터를 가진 MoE (Mixture-of-Experts) 모델인 Kimi K3를 서빙하는 데 있어 NVIDIA의 B300보다 더 나은 달러당 성능을 제공합니다. 이 모델은 단일 GPU 추론의 한계를 밀어붙이며, 오픈 웨이트 (open-weight) 모델을 위한 GPU 경제성에 대한 재고를 강요합니다.
Kimi K3란 무엇이며 왜 계산 방식이 바뀌는가
Kimi K3는 Moonshot AI가 출시한 2.8조 파라미터 규모의 MoE (Mixture-of-Experts) 모델입니다. 이 모델은 오픈 웨이트 (open weights) 형태로 제공되지만, 훈련 코드나 데이터셋은 포함되어 있지 않아 진정한 오픈 소스라기보다는 "오픈 웨이트" 진영에 속합니다. 이 모델은 긴 컨텍스트 추론 (long-context reasoning) 및 코딩 작업을 위해 설계되었으며, 생성되는 각 토큰에 대해 2.8T 파라미터의 일부만 활성화하는 밀집 라우팅 (dense routing) 메커니즘을 사용합니다.
추론 엔지니어들에게 Kimi K3가 주목받는 이유는 그 규모 때문입니다. 오늘날 대부분의 LLM (Large Language Model) 서빙 배포는 7B에서 70B 범위의 모델을 실행합니다. Kimi K3는 이보다 두 자릿수 더 큽니다. 이를 효율적으로 서빙하려면 메모리 대역폭 (memory bandwidth), 인터커넥트 지연 시간 (interconnect latency), 그리고 커널 수준 최적화 (kernel-level optimization)에 세심한 주의를 기울여야 합니다.
2.8T 파라미터, 1M 컨텍스트 서빙의 현실
Kimi K3는 100만 토큰의 컨텍스트 윈도우 (context window)를 지원합니다. 그 정도 길이라면 KV 캐시 (KV cache)만으로도 수백 기가바이트의 GPU 메모리를 소비합니다. 192GB의 HBM을 탑재한 단일 B200 노드는 가중치(weights)와 KV 풀(pool)을 모두 수용하기에 용량이 턱없이 부족합니다. 이 모델을 실행하려면 여러 GPU에 걸친 분산 텐서 병렬성 (distributed tensor parallelism)이 필요하며, 보통 여러 노드에 걸쳐 실행되어야 합니다.
메모리 벽 (Memory Wall): 왜 단일 B200 노드로는 부족한가
단일 8-GPU B200 노드는 모델 가중치만으로도 GPU에 샤딩 (sharding)했을 때 가용 메모리를 초과하기 때문에 한계가 있습니다. 1M 토큰 컨텍스트를 위한 KV 캐시는 또 다른 거대한 점유 공간을 추가합니다. 이로 인해 최소 두 개의 노드에 걸쳐 실행해야 하며, 이는 디코드 (decode)의 임계 경로(critical path)에서 노드 간 통신 오버헤드를 발생시킵니다.
GPU 서빙의 과제
Kimi K3와 같은 모델을 실행하는 것은 단순히 메모리에 모델을 올리는 것만이 아닙니다. 부하(load)가 걸린 상태에서 시스템을 통해 토큰을 얼마나 효율적으로 밀어낼 수 있느냐의 문제입니다. 병목 현상(bottleneck)은 단일 스트림 지연 시간(single-stream latency)을 보느냐, 아니면 많은 동시 요청에 대한 총 처리량(aggregate throughput)을 보느냐에 따라 달라집니다.
추측 디코딩 (Speculative decoding)이 여기서 도움이 됩니다. Kimi K3는 내장된 드래프트 텐서 (draft tensors) 없이 출시되었기 때문에, Wafer는 RadixArk의 외부 DSpark 드래프트 모델을 사용했습니다. 이는 토큰을 예측하기 위해 더 작은 모델을 병렬로 실행한 다음, 대형 모델을 통한 단일 순전파 (forward pass)를 통해 해당 예측을 검증합니다. 이를 통해 디코드 제한적 (decode-bound) 워크로드에서 동일한 지연 시간 대비 더 높은 처리량을 얻을 수 있습니다.
AMD MI355X vs NVIDIA B300 vs B200: 사양 및 가격
Wafer는 세 가지 구성(8x MI355X, 2x8x B200, 분산 캐시 병렬성 (distributed cache parallelism)을 적용한 B300)에서 서빙되는 Kimi K3를 비교한 벤치마크를 발표했습니다. 그들이 사용한 가격 가정은 gpus.io의 GPU 대여 요율을 기준으로 MI355X는 시간당 $2.50, B200은 시간당 $4.25, B300은 시간당 $6.00입니다.
수치는 다음과 같이 세분화됩니다:
| 지표 | 8x MI355X (TP8) | 2x8 B200 (TP16) | B300 (TP8+DCP8) |
|---|---|---|---|
| 스트림당 디코드 토큰/초 (Decode tok/s per stream) | 118 | 90 | 172 |
| ... |
B300이 원시 처리량 (raw throughput) 측면에서 승리합니다. 하지만 MI355X는 달러당 성능 측면에서 승리하며, B300의 달러당 33 토큰 및 B200의 달러당 7 토큰과 비교했을 때 달러당 48 토큰을 제공합니다. 그 격차는 극적입니다.
원시 처리량 vs 경제적 처리량
B200과의 비교는 다소 불공평합니다. B200은 두 개의 노드에 걸쳐 있으며, 디코드 임계 경로 (decode critical path)에서 노드 간 올리듀스 (all-reduce) 비용을 지불해야 합니다. MI355X는 8개의 GPU가 장착된 단일 노드에서 실행되므로, B300 구성과 더 깔끔한 비교가 됩니다.
그럼에도 불구하고, 달러당 성능 이야기는 유효합니다. MI355X의 시간당 비용은 B300 비용의 절반 미만이며, 여전히 사용 가능한 처리량을 제공합니다. Kimi K3를 대규모로 운영하는 팀에게 이는 상당한 운영 비용 차이를 의미합니다.
최적화 작업: 추측 디코딩 및 프리필 커널 수정 (Speculative Decode and Prefill Kernel Fixes)
Kimi K3를 ROCm에서 효율적으로 실행하기 위해서는 두 가지 핵심 수정 사항이 필요했습니다. 두 가지 모두 큰 변화는 아니었지만, Wafer가 보고한 성능 수치를 달성하기 위해서는 반드시 필요했습니다.
추측 디코딩(Speculative Decode) 수정: 누락된 top_k_renorm_prob
첫 번째 문제는 DSpark 초안 모델(draft model)과 함께 추측 디코딩(speculative decode)을 실행할 때 나타났습니다. sglang 샘플링 검증기(sampling verifier)는 CUDA 샘플링 커널로부터 top_k_renorm_prob라고 불리는 텐서를 기대했습니다. 하지만 ROCm 빌드는 Triton top-p 커널만을 별칭(alias)으로 지정했을 뿐, 해당 텐서를 정의하지 않았습니다. 이로 인해 밀집 샘플링 경로(dense sampling path)를 타는 요청들은 NameError와 함께 실패했습니다.
해결 방법은 ROCm 샘플링 브랜치에 누락된 top-k 재정규화(renormalization) 계산을 추가하는 것이었습니다. 별도의 커스텀 커널은 필요하지 않았습니다. 작은 배관(plumbing) 작업이었지만, 이를 통해 추측 디코딩(speculative decode)이 완전히 정상화되었습니다.
프리필(Prefill) 병목 현상 및 AITER MLA 헤드 패딩(Head-Padding) 수정
두 번째 문제는 프리필(prefill) 성능 문제였습니다. Kimi K3는 다중 잠재 어텐션(Multi-Latent Attention, MLA)을 사용하며, AITER MLA 패스트 패스(fast-path) 커널은 랭크(rank)당 헤드(head) 수가 4, 8 또는 16의 배수와 같은 특정 형태와 일치할 때만 로드됩니다.
TP8(Tensor Parallelism 8) 환경에서 각 랭크는 12개의 헤드를 가졌습니다. 이는 커널이 기대하는 형태와 일치하지 않았고, 결과적으로 시스템은 느린 범용 Triton 어텐션(attention) 구현으로 대체되었습니다. 172k 토큰의 콜드 프리필(Cold prefill) 속도는 초당 약 4,000~7,000 토큰이었는데, 이는 1M 컨텍스트를 가진 모델에게는 받아들이기 힘들 정도로 느린 속도였습니다.
해결 방법은 빠른 AITER MLA 커널을 호출하기 전에 헤드 차원(head dimension)을 12에서 16으로 제로 패딩(zero-pad)한 다음, 나중에 실제 12개 헤드의 출력을 추출하는 것이었습니다. 이를 통해 디코딩 속도에 영향을 주지 않으면서도, 정상 상태(steady-state)의 프리필 처리량(throughput)을 약 4~7k tok/s에서 약 13k tok/s로 끌어올렸습니다.
수정 사항을 통한 측정 가능한 이득
이 두 가지 수정 사항을 통해 다음과 같은 상당한 이득을 얻었습니다.
- 싱글 스트림 디코딩(Single-stream decode) 약 2.2배 향상
- 중간 부하 시 스트림당 처리량(Per-stream throughput) 약 1.7배 향상
- 피크 총 처리량(Peak aggregate throughput) 약 18% 향상
- 동시성 최적 지점(Concurrency sweet spot)이 c24에서 c64로 이동 (즉, 시스템이 더 많은 동시 요청을 효율적으로 처리할 수 있음을 의미함)
이것이 오픈 소스 AI 생태계에 의미하는 바
MI355X의 결과는 오픈 웨이트 (open-weight) 추론 경제학의 변화를 시사합니다. AMD는 NVIDIA와의 소프트웨어 격차를 좁히고 있으며, 대규모 모델을 대규모로 서비스해야 하는 팀들에게 달러당 성능 (performance-per-dollar) 이야기는 더욱 설득력을 얻고 있습니다.
CUDA의 해자 (Moat)가 보이는 것보다 약한가?
CUDA는 수년간 LLM 서빙의 기본값이었습니다. 하지만 Kimi K3를 ROCm에서 실행하는 데 필요한 수정 사항은 작고 국소적이었습니다. 커널 (kernel)을 다시 작성하거나 새로운 인프라를 구축할 필요가 없었습니다. 이러한 패턴은 더 많은 오픈 웨이트 모델이 현재 하드웨어의 한계까지 밀어붙임에 따라, ROCm의 격차가 계속해서 좁혀질 것임을 시사합니다.
수정 사항은 커스텀 커널 작업이 아니라 sglang 및 AITER에서의 프레임워크 레벨 (framework-level) 변경이었습니다. 이는 의미 있는 차이입니다. 즉, 동등한 수준에 도달하는 경로가 스택을 재발명하는 것이 아니라, 이미 존재하는 격차를 메우는 것에 있다는 것을 의미합니다.
AMD의 소프트웨어 격차가 여전히 드러나는 부분
ROCm 생태계는 여전히 프런티어 모델 (frontier models)이 작동하도록 만들기 위해 엔지니어링 노력을 필요로 합니다. 위의 수정 사항들은 sglang 및 AITER에 익숙한 팀에게는 간단했지만, 클릭 한 번으로 해결되는 솔루션은 아닙니다. 프로덕션 LLM 서빙을 위해 AMD를 검토하는 팀은 최적화 작업에 투자할 것을 예상해야 합니다.
누락된 top-k renorm은 버그였습니다. head-padding 수정은 형상 제약 (shape constraint)에 대한 임시 방편 (workaround)이었습니다. 이것들은 체계적인 실패는 아니지만, AMD가 한계를 돌파하는 모델들을 위한 소프트웨어 계층에서 여전히 추격 중이라는 신호입니다.
이것이 모델 서빙 경제학에 미치는 영향
Kimi K3 또는 유사한 대규모 MoE 모델을 실행하는 팀에게 MI355X는 NVIDIA에 대한 매력적인 대안을 제공합니다. 달러당 이점은 실질적이며, 규모가 커질수록 복리로 작용합니다. B300 대신 MI355X에서 64개의 GPU를 실행하는 배포 모델은 시간당 클라우드 비용의 유의미한 절감을 경험하게 될 것입니다.
트레이드오프(Trade-off)는 가공되지 않은 처리량(Raw throughput)입니다. B300은 여전히 MI355X보다 초당 토큰 수가 약 65% 더 많습니다. 만약 지연 시간(Latency)에 민감한 싱글 스트림(Single-stream) 성능이 우선순위라면, B300이 여전히 더 강력한 선택지입니다. 하지만 배치 서빙(Batch serving) 및 고동시성(High-concurrency) 워크로드의 경우, 달러당 처리량 측면에서는 MI355X가 승리합니다.
미결 과제 및 반론
벤치마크 결과는 유망하지만, 몇 가지 질문은 면밀한 검토가 필요합니다.
가격에 대한 회의론과 실제 GPU 비용
시간당 2.50달러라는 MI355X의 요금은 특정 렌탈 애그리게이터(Aggregator) 기준입니다. 다른 제공업체들은 시간당 2.95달러에서 3.00달러에 가까운 요금을 나열하고 있으며, 스팟(Spot) 또는 온디맨드(On-demand) 가격은 이보다 더 높을 수 있습니다. 이러한 요율에서도 달러당 성능 우위는 줄어들 뿐 사라지지는 않습니다.
시간당 4.25달러인 B200에 대해서도 각주가 필요합니다. 노드 간(Cross-node) 비교는 B200 구성에 불리하게 작용하며, Hacker News의 일부 댓글 작성자들은 이 비교가 팀들이 실제로 B200 클러스터를 어떻게 배포할지를 반영하지 못할 수 있다고 지적했습니다.
벤치마크 투명성 및 재현 가능성
Wafer는 재현을 위한 전체 구성이나 코드를 공개하지 않았습니다. 벤치마크 수치는 블로그 포스트에 보고되었지만, 아직 독립적인 검증은 불가능합니다. 이는 기업 블로그 포스트로서 합리적인 기대치 차이일 수 있으나, 이 수치에만 의존하여 조달 결정을 내리려는 사람들에게는 유의할 만한 사항입니다.
핵심 요약
- Kimi K3는 멀티 노드(multi-node), 멀티 GPU 서빙이 필요한 2.8T 오픈 웨이트 (open-weight) MoE 모델입니다. 단일 B200 노드는 1M 토큰 컨텍스트를 위한 가중치(weights)와 KV 캐시(KV cache)를 모두 수용할 수 없습니다.
- Wafer의 벤치마크와 gpus.io의 GPU 대여 요율을 기준으로 했을 때, Kimi K3 서빙 시 AMD MI355X는 달러당 48 tok/s를 제공하며, 이는 B300의 33 tok/s 및 B200의 7 tok/s와 비교됩니다.
- 두 가지 ROCm 수정 사항이 성능을 끌어올렸습니다: 투기적 디코딩 (speculative decode)을 위한 누락된 top-k 재정규화 (renorm) 추가와 AITER MLA 커널을 위한 헤드 차원 (head dimensions)의 12에서 16으로의 제로 패딩 (zero-padding)입니다.
- B300이 여전히 원시 처리량 (raw throughput) 측면에서는 승리하지만, MI355X는 처리량에 민감한 고동시성 (high-concurrency) 워크로드에 대해 더 나은 경제성을 제공합니다.
- AMD의 소프트웨어 격차가 좁혀지고 있습니다. 필요한 수정 사항들은 작고 국소적이었으며, 시스템 전체를 재작성해야 하는 수준은 아니었습니다. 하지만 팀들은 여전히 최적화 노력을 계획에 포함해야 합니다.
FAQ
Kimi K3를 소비자용 GPU에서 실행할 수 있나요?
아니요. Kimi K3는 2.8T 파라미터 모델입니다. 양자화 (quantization)를 적용하더라도 데이터 센터용 GPU의 메모리 대역폭 (memory bandwidth)과 용량이 필요합니다. 최소 실행 가능한 구성은 텐서 병렬성 (tensor parallelism)을 통해 여러 GPU에서 구동됩니다. RTX 4090과 같은 소비자용 카드는 이 모델을 효과적으로 서빙할 만큼 충분한 VRAM이나 상호 연결 대역폭 (interconnect bandwidth)을 갖추고 있지 않습니다.
투기적 디코딩 (speculative decode)이란 무엇인가요?
투기적 디코딩은 더 작은 초안 모델 (draft model)을 병렬로 실행하여 토큰을 예측한 다음, 대형 모델을 통한 단일 순전파 (forward pass) 과정에서 해당 예측들을 모두 검증하는 방식입니다. 이는 순차적 디코딩 단계를 줄이고 동일한 지연 시간 (latency)에서 처리량 (throughput)을 높여줍니다. Kimi K3는 내장된 초안 텐서 (draft tensors)를 제공하지 않으므로, Wafer는 RadixArk의 DSpark 외부 초안 모델을 사용했습니다.
AMD가 프로덕션 환경의 LLM 서빙을 수행할 준비가 되었나요?
AMD는 근접해 있지만, 노력이 전혀 들지 않는 것은 아닙니다. Kimi K3를 위한 ROCm 수정 사항은 작고 국소적이었지만, 프레임워크 수준의 엔지니어링이 필요했습니다. ROCm 전문 지식을 갖춘 팀은 이 작업을 재현할 수 있습니다. 해당 경험이 없는 팀은 AMD를 CUDA 배포의 즉각적인 대체재 (drop-in replacement)로 취급하기 전에, 결코 작지 않은 최적화 단계를 계획해야 합니다.
Kimi K3는 추론 측면에서 다른 오픈 웨이트 (open-weight) 모델들과 어떻게 비교되나요?
Kimi K3는 오픈 웨이트 (open-weight) 모델 중에서도 규모가 큰 편에 속합니다. DeepSeek V3 및 Qwen 2.5와 같은 모델들은 더 작으며 단일 GPU 또는 소규모 멀티 GPU 설정에서 더 쉽게 실행됩니다. Kimi K3의 크기는 추론 인프라에 대한 스트레스 테스트 (stress test) 역할을 하며, 이것이 바로 MI355X의 결과가 주목할 만한 이유입니다.
AITER MLA 패스트 패스 (fast path)란 무엇인가요?
AITER는 머신러닝 (machine learning) 워크로드를 위해 AMD가 최적화한 커널 라이브러리 (kernel library)입니다. MLA 패스트 패스 (fast path)는 Kimi K3에서 사용되는 어텐션 메커니즘 (attention mechanism)인 멀티 레이턴트 어텐션 (multi-latent attention)을 매우 최적화하여 구현한 것입니다. 이는 랭크 (rank)당 헤드 수 (head count)가 특정 형태 (shape)와 일치할 때만 로드됩니다. 헤드 패딩 (head-padding) 수정 사항은 12개에서 16개 헤드로 제로 패딩 (zero-padding)을 수행함으로써 해당 제약 조건을 해결했습니다.
관련 읽을거리
- Kimi K3 Unleashed: Moonshot AI's 2.8T Open-Weight Model
- Mixture of Experts (MoE) Explained: How Sparse Routing Powers Modern LLMs
- The Open-Source AI Revolution in 2026: How Llama, Mistral, and Gemma Are Closing the Gap
출처 / 참고 문헌
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기