Speculative Decoding 벤치마크 결과 — a = 3.5로도 충분하지 않았다
Speculative Decoding (SD)은 다음과 같은 간단한 수학적 규칙에 의존합니다: a > 1 + α + β
수락 길이(a)는 1에 연산 비율(α)과 검증 오버헤드(β)를 더한 값보다 커야 합니다. 이 조건을 만족하면 SD는 이득을 보지만, 그렇지 않으면 손해를 봅니다.
저는 실제 환경에서 이 이론을 테스트했습니다. 12세대 Intel CPU와 64GB RAM을 사용했으며, 작은 Qwen2.5-0.5B 초안(draft) 모델과 더 큰 Qwen2.5-1.5B 타겟(target) 모델을 조합했습니다.
결과는 놀라웠습니다. SD는 일반 생성(raw generation)보다 49%에서 62% 더 느렸습니다.
작업 유형별 수락 길이(a)의 변화는 다음과 같습니다:
• JSON (구조화된 데이터): a = 3.50. 초안 모델이 형식을 잘 예측했습니다. • 코드 (반구조화된 데이터): a = 3.00. 양호하지만, 명명 패턴(naming patterns)이 다양했습니다. • 스토리 (창의적 글쓰기): a = 2.11. 초안 모델이 단어 선택에 어려움을 겪었습니다.
"a" 값이 높았음에도 불구하고, CPU 환경에서 SD는 실패했습니다. 왜일까요?
가장 큰 문제는 '제로 수락률(zero-accept rate)'이었습니다. 전체 라운드의 15%에서 30% 사이에서 수락된 토큰이 단 하나도 없었습니다.
이러한 라운드에서는 초안 모델이 작동하고 타겟 모델이 검증을 수행하지만, 새로 얻은 것은 아무것도 없습니다. 토큰 하나를 얻기 위해 두 번의 연산 비용을 지불한 셈입니다. 이는 동일한 출력을 얻기 위해 SD 비용이 2배 더 많이 들게 만듭니다.
이는 왜 SD가 GPU 최적화 기술인지를 잘 보여줍니다.
GPU에서는 초안 모델의 비용이 거의 들지 않습니다. 연산 비율(α)이 매우 작기 때문입니다. 반면 CPU에서는 초안 모델이 메모리 대역폭(memory bandwidth)을 두고 경쟁해야 합니다. 즉, 공짜가 아닙니다. CPU에서는 이 부등식이 성립하지 않게 됩니다.
CPU에서 SD를 사용하려 한다면, 하지 마십시오. 수치가 뒷받침되지 않습니다.
배포 시 고려해야 할 핵심 사항:
- 자신만의 "a" 값을 측정하십시오. 벤더의 주장을 맹신하지 마세요.
- 데이터를 작업 유형별로 나누십시오. 코드와 채팅은 수락률이 다릅니다.
- 제로 수락률을 주시하십시오. 높은 변동성은 p99 지연 시간(latency)을 망가뜨립니다.
- 초안 모델 비용이 최소화되는 GPU에서 SD를 사용하십시오.
최고의 최적화는 언제 기능을 꺼야 할지 아는 것입니다.
Source: https://dev.to/zxpmail/i-benchmarked-speculative-decoding-a-35-wasnt-enough-1geb
Optional learning community: https://t.me/GyaanSetuAi
