cuda: 288명의 전문가(experts)를 위한 topk-moe fusion 활성화 ([#25267](https://github.com/gg
요약
llama.cpp에서 288명의 전문가를 가진 MoE 모델을 위해 topk-moe fusion을 활성화하는 업데이트가 적용되었습니다. 이를 통해 디코드 단계에서 발생하는 불필요한 그래프 노드를 줄여 성능을 최적화합니다.
핵심 포인트
- 288명의 전문가를 가진 모델(Step-3.7-Flash 등)에서 MoE fusion 지원
- 디코드 라우팅 시 발생하는 약 330개의 추가 그래프 노드 제거
- 짧은 컨텍스트 환경에서 디코드 성능 약 2.4% 향상
- 컨텍스트가 길어질수록 어텐션 바운드 현상으로 인해 이득 감소
cuda: 288명의 전문가(experts)를 위한 topk-moe fusion 활성화 (#25267)
- cuda: 288명의 전문가(experts)를 위한 topk-moe fusion 활성화
기존의 topk-moe fusion은 2의 거듭제곱 형태의 전문가 수(또는 특수 사례인 576)만 허용했기 때문에, 288명의 전문가를 가진 모델(예: Step-3.7-Flash)은 fusion되지 않은 레이어별 라우팅 체인(unfused per-layer routing chain)인 softmax/sigmoid, argsort, get_rows, sum_rows, div, clamp, scale로 되돌아갔습니다(fell back). 배치 크기(batch size)가 1일 때, 이는 토큰당 약 330개의 추가적인 작은 그래프 노드(tiny graph nodes)를 발생시킵니다.
288은 워프 크기(warp size)의 배수이므로 기존 커널(kernel)이 이미 이를 처리할 수 있습니다. 이번 변경 사항은 누락되었던 템플릿 인스턴스화(template instantiation)를 추가하고, 적격성 검사(eligibility check)에서 288을 허용하도록 합니다.
Step-3.7-Flash IQ4_XS를 사용하여 gfx1151에서 측정한 결과(llama-bench, -b 4096 -ub 4096 -fa 1 -dio 1 -ctk q8_0 -ctv q8_0; 머신 유휴 상태, 부하 제어를 위해 pp4096을 일치시킨 전/후 쌍 비교):
test | before | after
----------------+----------------+----------------
pp4096 | 460.99 ± 0.45 | 462.47 ± 0.34 (변화 없음)
tg128 | 19.10 ± 0.04 | 19.56 ± 0.03 (+2.4%)
tg128 @ d30000 | 12.68 ± 0.04 | 12.69 ± 0.03 (변화 없음)
프롬프트 처리(Prompt processing)는 영향을 받지 않습니다 (fusion은 디코드 라우팅(decode routing)에만 적용됩니다). 디코드 이득(decode gain)은 짧은 컨텍스트(shallow context)에서 약 +2.4%이며, 컨텍스트가 깊어질수록 점차 사라집니다. 30k 토큰에 도달하면 각 단계가 KV 캐시(KV cache)에 대한 어텐션 바운드(attention-bound) 상태가 되므로, 고정된 라우팅 오버헤드(fixed routing overhead)를 제거하는 효과가 더 이상 눈에 띄지 않게 됩니다.
Assisted-By: Claude Fable 5 noreply@anthropic.com
- tests/test-backend-ops.cpp 업데이트
Co-authored-by: Oliver Simons osimons@nvidia.com
- topk-moe.cu의 288 케이스에 대한 주석 추가
Co-authored-by: Oliver Simons osimons@nvidia.com
macOS/iOS:
macOS/iOS:
- macOS Apple Silicon (arm64)
- macOS Apple Silicon (arm64, KleidiAI enabled) DISABLED
- macOS Intel (x64)
- iOS XCFramework
Linux:
- Ubuntu x64 (CPU)
- Ubuntu arm64 (CPU)
- Ubuntu s390x (CPU)
- Ubuntu x64 (Vulkan)
- Ubuntu arm64 (Vulkan)
- Ubuntu x64 (ROCm 7.2)
- Ubuntu x64 (OpenVINO)
- Ubuntu x64 (SYCL FP32)
- Ubuntu x64 (SYCL FP16)
Android:
Windows:
Windows:
- Windows x64 (CPU)
- Windows arm64 (CPU)
- Windows arm64 (OpenCL Adreno)
- Windows x64 (CUDA 12) - CUDA 12.4 DLLs
- Windows x64 (CUDA 13) - CUDA 13.3 DLLs
- Windows x64 (Vulkan)
- Windows x64 (OpenVINO)
- Windows x64 (SYCL)
- Windows x64 (HIP)
openEuler:
- DISABLED
- openEuler x86 (310p)
- openEuler x86 (910b, ACL Graph)
- openEuler aarch64 (310p)
- openEuler aarch64 (910b, ACL Graph)
UI:
AI 자동 생성 콘텐츠
본 콘텐츠는 llama.cpp Releases의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기