RTX 3090 한 장으로 Qwen3.8-27B 모델 124 tps 달성
I pushed Qwen3.8-27B to 124 tps on a single request on a RTX 3090
핵심 요약
RTX 3090 환경에서 추론 엔진 최적화를 통해 Qwen3.8-27B 모델의 단일 요청 처리 속도를 124 tps까지 끌어올렸습니다.
- 성능 최적화 — 추론 엔진 개선으로 단일 요청 처리 속도를 124 tps까지 향상함
- 기술적 개선 — 드래프트 어휘 확장, Split-KV 어텐션 커널, 샘플러 패치 등을 적용함
- 하드웨어 제약 — 250W 전력 제한 환경에서 테스트되었으며 추가 전력 시 더 높은 성능 가능
- 호환성 확인 — 4비트 양자화 모델에 최적화되어 있으며 262k 컨텍스트까지 지원함
이틀 전에 RTX 3090용 hyper-optimized Qwen3.8-27B 추론 엔진을 공개했었지(단일 요청 82 tps, 피크 672 tps). 어제 업데이트로 단일 사용자 99 tps, 동시 접속 64명 기준 약 1,000 tps까지 찍었어.
그 이후로 품질 저하 없이 단일 요청 속도 올리는 데만 집중했다. 이제 기본 샘플링에서 약 114 tps, 그리디(greedy) 방식(랜덤 토큰 말고 실제 채팅 프롬프트 기준)에서 약 124 tps까지 뽑아냈어. 기존 90 / 98 tps에서 더 오른 거지.
기존에 적용했던 것들:
- fp8 KV 캐시, lm_head + embed_tokens int8, fp16 리커런트 스테이트, int8 활성화 함수, 40k 토큰 드래프트 헤드를 갖춘 MTP-4 드래프트, draft_sample_method=probabilistic
이번에 추가한 것들:
- 모델 자체 출력값을 기반으로 드래프트 어휘 사전 재구성 - 기존 웹 텍스트 리스트는 모델 출력의 약 92%(코드 83%)만 커버해서, 못 맞추면 무조건 리젝됐거든. 이제 97.5%까지 커버함. 그리디 기준 98 → 109 tps 달성.
- GPTQ-int4 lm_head 및 MTP 모듈, 모델 자체 히든 스테이트로 보정: PPL 0.6% 상승, GSM8K 변화 없음, 수락률 유지, 스텝당 -1.8ms 단축. "fast variant"로 배포 중 (python fetch_fast_variant.py, 허브에서 약 1GB).
- 검증 단계를 위한 Split-KV 어텐션 커널... FlashAttention-2는 단일 쿼리 디코드에서만 KV를 분할해서, 드래프트 4개 쓸 때 3090의 SM 82개 중 24개밖에 못 썼거든. 작은 Triton 커널 하나 짰더니 1.5k 컨텍스트에서 5배, 16k에서 10배 빨라짐.
- 샘플러 패치 - 정렬이 필요 없는 top-k/top-p, 멀티 블록 소프트맥스, 타겟의 truncated support에서 샘플링한 드래프트: 기본 샘플링에서 +4% 성능 향상.
- KVarN 4/2-bit KV 캐시를 vLLM 0.27.1로 포팅: 이제 262k 컨텍스트 전부 다 들어가고, 니들(needle) 테스트 240k까지 통과, PPL +0.16%, 100k에서 디코드 속도 약 20% 저하. 선택 사항임 (KV=kvarn / CTX=huge).
- bench/run_benchmarks.sh + verify.sh 추가해서 표 재현하고 설치 제대로 됐는지 확인 가능.
동시 접속 피크 처리량은 그대로야(동시 64명 기준 약 1,000 tps). 추론 디코딩은 구조상 결과값이 똑같으니까, 샘플링 분포도 안 쓴 거랑 차이 없다.
저장소: https://github.com/syv-ai/qwen38-27b-rtx3090
Fast-variant 텐서: https://huggingface.co/syvai/qwen3.8-27b-3090-fast-variant
누가 또 기가 막힌 아이디어 들고 와서 테스트해볼 만한 거 던져주지 않는 이상, 이번이 추론 스택 마지막 업데이트가 될 듯. 쥐꼬리만한 성능 향상 쥐어짜는 것도 이제 지친다 :)

