RTX 3090 단일 카드에서 Qwen3.8-27B 구동: 커스텀 메가커널로 140 tok/s 달성
Qwen3.8-27B on a single 3090: 140 tok/s on code with a custom megakernel
핵심 요약
RTX 3090에서 커스텀 CUDA 메가커널을 사용해 추론 속도를 최대 1.9배 향상시킨 사례입니다.
- 성능 최적화 — 커스텀 메가커널 도입으로 llama.cpp 대비 1.4~1.9배 속도 향상됨
- 기술적 구현 — 추측 디코딩 주기를 단일 커널 실행으로 통합하여 효율성 극대화함
- 호환성 유지 — OpenAI 호환 서버로 llama 서버를 즉시 대체 가능함
- 제한 사항 — 특정 모델(unsloth Q4_K_M) 및 RTX 3090 환경에 최적화됨
내 PC(rtx 3090)에서 Qwen3.8-27B 속도 좀 올리려고 Claude Opus 5.5 써봤는데, llama.cpp보다 작업이나 컨텍스트 길이에 따라 1.4~1.9배 더 빠른 CUDA 메가커널을 짜주더라. 결과랑 코드는 아래에 있음.
결과 (같은 하드웨어, 내 메가커널 vs MTP 적용 llama.cpp):
- 코드 작성: 140 tok/s vs 73 (1.9배 빠름)
- 4K 토큰 파일 컨텍스트에 넣고 코딩: 95 tok/s vs 56 (1.7배 빠름)
- 프롬프트 처리 (prefill): ~1,600 tok/s vs ~1,100 (1.4배 빠름)
속도 빨라진 이유는 추측 디코딩(speculative-decoding) 사이클 전체를 커널 하나 실행할 때 다 돌려버려서 그럼. 그래서 초안 토큰 4~5개 검사하는 게 토큰 하나 검사하는 거랑 비용이 거의 비슷함. OpenAI 호환 서버라 llama 서버 대신 바로 갖다 써도 문제없다.
주의사항 및 한계: 3090 전용이고 특정 모델(unsloth의 Q4_K_M)에 맞춰서 만들어짐. 출력값은 반올림 오차 거의 없는 수준이라 llama.cpp랑 똑같음. KVCache는 컨텍스트 ~80k까지는 fp16이고, 그 이상은 q8임.
코드랑 전체 벤치마크: https://github.com/L-Forster/open-jet/tree/master/megakernel

