
한 번에 초안을 생성하는 DFlash, EAGLE-3의 순차 방식을 버리고 6배 속도 향상
요약
z-lab에서 발표한 DFlash는 기존 투기적 디코딩의 순차적 방식 한계를 극복하기 위해 블록 확산(Block Diffusion) 방식을 도입했습니다. 이를 통해 초안 생성 시 발생하는 병목 현상을 해결하여 EAGLE-3 대비 최대 2.5배, 표준 방식 대비 6배 이상의 속도 향상을 달성했습니다.
핵심 포인트
- 기존 투기적 디코딩의 순차적 초안 생성 방식이 가진 연산 비용 병목 해결
- 블록 확산(Block Diffusion)을 통해 다량의 토큰을 한 번의 순전파로 생성
- 타겟 모델의 은닉 특징을 주입하여 병렬 생성 시의 정확도 유지
- Qwen3-8B 벤치마크 기준 기존 최강 기법 대비 압도적인 가속 성능 증명
투기적 디코딩 (speculative decoding)은 지난 2년 동안 완전히 정석적인 가속화 기술이 되었다. 작은 "초안 모델 (draft model)"이 앞선 몇 개의 토큰을 예측하게 하고, 본래의 큰 모델이 한꺼번에 정답을 확인하게 하는 방식이다. 맞춘 만큼 한꺼번에 진행되므로, 출력 품질을 전혀 바꾸지 않고 생성을 빠르게 할 수 있다. 이론은 깔끔하다. 하지만 실제로 돌려보면 기대만큼 빨라지지 않는 경우가 많다. 소비자용 GPU나 MoE 구성에서는 "속도가 거의 변하지 않았다"는 검증 보고도 드물지 않다(예시).
그 한계의 정체에 손을 댄 것이 z-lab(Jian Chen, Yesheng Liang, Zhijian Liu)의 DFlash다. ICML 2026에 채택된 논문 「DFlash: Block Diffusion for Flash Speculative Decoding」에서 제안되었으며, 표준적인 자기회귀 생성(autoregressive generation)에 대해 6배를 초과하는 무손실 가속화, 현존 최강이라 불리는 EAGLE-3에 대해서도 최대 2.5배 빠르다고 보고하고 있다.
투기적 디코딩의 속도는 대략 "초안이 얼마나 맞추는가"와 "초안 자체의 비용이 얼마나 저렴한가"의 곱셈으로 결정된다. EAGLE-3와 같은 최신 기법은 전자인 수락률 (acceptance rate)을 높이는 데 성공하여 실용적으로 2~3배의 속도를 내왔다.
문제는 후자다. EAGLE-3의 초안 모델은 본래 모델과 마찬가지로 1토큰씩 왼쪽에서 오른쪽으로 써 내려가는 자기회귀형 (autoregressive) 방식으로 동작한다. 8토큰을 앞서 읽고 싶다면 초안 모델을 8번 순차적으로 돌려야 한다. 앞서 읽는 양을 늘릴수록 초안의 비용이 선형적으로 늘어나며, 그 지점이 새로운 병목 현상이 된다. 로컬 환경처럼 연산 자원이 제한된 상황에서는 이 "초안을 돌리는 시간"이 절약분을 잡아먹어 차액이 zero가 되기 쉽다.
DFlash의 발상은 이 부분을 벗어난다. 초안을 순차적으로 쓰는 것을 그만두고, 블록 단위로 묶어서 내뱉는다.
DFlash의 초안 모델은 자기회귀가 아닌 블록 확산 (block diffusion) 방식으로 동작한다. 확산 모델 (diffusion model)이 이미지를 노이즈로부터 한꺼번에 일으켜 세워 정리하는 것과 같은 요령으로, 16토큰이라면 16토큰 분량을 1회의 순전파 (forward pass)로 한꺼번에 생성하고 필요에 따라 정제 (refine)한다. 토큰 수가 늘어나도 초안의 계산 횟수는 늘어나지 않으므로 지연 시간은 거의 일정하게 유지된다. z-lab의 해설에 따르면, 16토큰을 내뱉는 다층 DFlash가 8토큰을 내뱉는 단층 EAGLE-3보다 저지연으로 끝난다고 한다. 깊게 앞서 읽어도 대가가 없다는 점이 핵심이다.
다만, 단순히 병렬 생성만 하면 정확도가 떨어질 수 있다. 왼쪽에서 오른쪽으로 이어지는 문맥을 갖지 않는 만큼, 초안의 질이 떨어져 수락률이 낮아질 수 있기 때문이다. DFlash는 그 부분을 본래 모델의 내부 상태로 메운다. 구체적으로는 타겟 모델의 여러 층에서 등간격으로 추출한 은닉 특징 (hidden features)을 경량 투영 (lightweight projection)으로 융합하여, 초안 측의 모든 층의 Key/Value에 주입한다. EAGLE-3가 첫 번째 층만을 조건화(conditioning)했던 것에 반해, DFlash는 각 층을 타겟의 단서로 묶어둔다. 병렬로 써도 빗나가지 않도록 설계된 것이다.
숫자로 보면 차이가 명확하다 (Qwen3-8B, 무손실 = 출력은 베이스라인과 동일).
| 벤치마크 | EAGLE-3 | DFlash |
|---|---|---|
| GSM8K | 2.13배 | 5.20배 |
| MATH-500 | 2.18배 | 6.17倍 |
샘플링이 포함된 (temperature=1) 추론 모델에서도 약 4.5배를 유지한다. 탐욕적 디코딩 (greedy decoding)에 한정된 속도가 아니라는 점은 실무적으로 고무적이다.
개인적으로 주목하고 있는 것은 이 기법이 효과를 발휘하는 지점이다. 배치를 두껍게 쌓을 수 있는 클라우드 GPU 팜보다는, GPU 1장으로 소소하게 돌리는 로컬 추론 쪽이 초안의 순차적 비용이 상대적으로 무겁다. DFlash의 평탄한 초안 비용은 바로 그 부분을 가볍게 만든다. "속도가 거의 변하지 않았다"고 여겨져 왔던 소비자용 환경이야말로 혜택이 클 가능성이 있다.
공식 구현은 SGLang과 transformers에서 동작한다. 초안 측의 GGUF가 아닌 전용 초안 모델은 HuggingFace의 z-lab 컬렉션에서 배포되고 있으며, Qwen3 계열이나 LLaMA-3.1, Gemma 계열의 타겟을 지원한다. SGLang에서의 기동은 공식 README에 나와 있는 대로, 초안 모델과 블록 길이를 지정하기만 하면 된다.
python -m sglang.launch_server \
--model-path Qwen/Qwen3.5-35B-A3B \
--speculative-algorithm DFLASH \
...
한편, 많은 로컬 사용자(local users)들이 기다리는 llama.cpp로의 통합은 이 기사 시점에서는 아직 메인 본체에 머지(merge)되지 않았다. Discussion #21569에서 논의가 진행 중이며, PR #22105가 --spec-type dflash 플래그를 통한 대응을 제안하고 있는 단계로, 실제로 테스트하려면 beellama.cpp나 buun-llama-cpp와 같은 자원봉사자들의 포크(fork) 버전을 사용해야 한다. PR의 코멘트에서는 Qwen3.5/3.6의 MoE 구성에서 "현재는 성능이 최적화되어 있지 않다"고 보고되었으며, 이는 llama.cpp 측의 MoE 구현 제약에 영향을 받고 있기 때문이다. 이 부분은 향후 개선 여부에 달려 있을 것이다.
확산 모델(Diffusion Model)을 언어 생성의 주류로 세우려는 시도는 아직 다듬어지지 않았으나, DFlash는 "확산 모델로 본체를 대체하는" 것이 아니라 "확산을 투기적 디코딩(Speculative Decoding)의 초안(draft) 역할로 활용하는" 실리적인 사용법을 제시했다는 점이 탁월하다. 초안은 다소 거칠더라도 본체(target model)가 정답을 확인하기 때문에, 확산 생성의 거친 정도가 품질에 영향을 미치지 않는다. 내용을 확인하고 싶은 사람은 먼저 논문과 z-lab의 프로젝트 페이지, 그리고 공식 리포지토리(repository)를 대조해 보는 것이 좋다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기