Gemma 4 31B 모델에서 E2B draft 모델을 활용한 Speculative Decoding 성능 향상 (+29% 평균, 코드 생성 +50%)
Speculative Decoding works great for Gemma 4 31B with E2B draft (+29% avg, +50% on code)
핵심 요약
Gemma 4 31B 모델에 E2B를 draft로 사용해 Speculative Decoding을 적용하여 평균 29%의 속도 향상을 달성한 벤치마크 결과 공유.
- 성능 최적화 — E2B draft 모델을 활용해 평균 29%, 코드 생성 시 50% 속도 향상 달성함.
- 메타데이터 수정 — GGUF 파일의 add_bos_token 불일치 문제를 해결하여 성능 저하를 방지함.
- 최적 설정 — draft-max 8이 혼합 작업에서 가장 효율적이며, parallel 1 설정이 필수적임.
- 하드웨어 활용 — RTX 5090 환경에서 128K 컨텍스트를 유지하며 VRAM 효율성을 극대화함.
이전 Gemma 4 31B 벤치마크 게시물에 이어, Gemma 4 E2B (4.65B)를 draft 모델로 사용하여 Speculative Decoding을 테스트했습니다.
결과가 예상보다 훨씬 좋아서 통제된 벤치마크 수치를 공유하고자 합니다.
설정
- GPU: RTX 5090 (32GB VRAM)
- OS: Windows 11
- 메인 모델: Gemma 4 31B UD-Q4_K_XL (18.3GB)
- Draft 모델: Gemma 4 E2B UD-Q4_K_XL (3.0GB)
- 백엔드: TurboQuant KV 캐시(turbo3)가 포함된 llama.cpp 포크
- 설정: 128K 컨텍스트, parallel=1, Flash Attention,
--draft-max 8 --draft-min 1
벤치마크 결과
두 모델 모두 동일한 서버 설정, max_tokens=500, temp=0.7, 측정 전 웜업 쿼리 제외.
|쿼리 유형|Baseline (t/s)|SpecDec (t/s)|수락률|속도 향상|
|:-|:-|:-|:-|:-|
|수학 설명|57.45|85.86|62.9%|+49.5%|
|한국어 시|56.93|62.34|44.1%|+9.5%|
|코드 생성|57.15|86.05|60.7%|+50.5%|
|과학 설명|57.19|71.14|50.9%|+24.4%|
|번역 + 분석|57.14|63.26|42.2%|+10.7%|
|평균|57.17|73.73|52.2%|+29.0%|
수락률이 42%일 때조차도, 어휘가 호환되면 토큰 변환 오버헤드가 없기 때문에 Speculative Decoding이 10% 더 빠릅니다.
GGUF 버전의 함정
처음에는 결과가 매우 나빴습니다. draft 모델이 아예 없을 때보다 더 느렸습니다(7.31 t/s vs 57 t/s baseline). 모든 draft 모델 조합에서 다음 경고가 떴습니다:
the target and draft vocabs are not compatible - tokens will be translated between the two
speculative.cpp를 파헤쳐 본 결과, 호환성 검사가 타겟과 draft 간의 add_bos_token을 비교한다는 것을 발견했습니다. 제 31B GGUF는 Gemma 4가 처음 나왔을 때의 4월 초 버전이라 add_bos_token = false였습니다. E2B 모델(나중에 다운로드함)은 add_bos_token = true였습니다. 이 메타데이터 불일치 하나가 llama.cpp를 토큰 변환 모드로 강제하여 모든 성능 향상을 죽이고 있었습니다.
31B GGUF를 다시 다운로드하니(Unsloth가 최근 수정된 모든 Gemma 4 GGUF를 다시 양자화함) 경고가 사라지고 +29%의 속도 향상이 해제되었습니다.


