원고지 앞에 작가 한 사람이 앉아 있다. 책상 한쪽에는 베개만 한 사전이 놓여 있다. 이 작가에게는 끝내 고치지 못한 버릇이 하나 있다. 단어 하나를 쓰기 전에 반드시 사전을 첫 장부터 마지막 장까지 한 번 넘겨 본다. 다음 단어가 아무리 뻔해도 예외가 없다. “감사합니다”의 “합니다”를 쓸 때도 사전 전체를 넘긴다. 작가의 머리가 아무리 좋아도 원고가 나오는 속도는 결국 사전을 넘기는 손이 정한다. 사전이 두꺼울수록 원고는 느려진다.

사전을 얇게 만들면 빨라지기는 한다. 그러나 사전에서 뜯어낸 장만큼 작가의 문장도 조금씩 거칠어진다. 작가의 실력은 그대로 두고 빨라질 방법은 없을까?

작가 옆에 조수를 한 명 앉히면 된다. 조수는 작가가 다음에 쓸 문장을 짐작해 초안으로 적어 올린다. 작가는 사전을 한 번 넘기는 동안 그 초안을 한꺼번에 훑어보고, 맞는 데까지는 그대로 받아들인다. 처음 틀린 단어에서 멈추고 그 단어만 직접 고쳐 쓴 뒤 다음 초안을 받는다. 결재는 언제나 작가가 하므로 완성된 원고는 작가 혼자 쓴 것과 한 글자도 다르지 않다. 달라지는 것은 속도뿐이다.

조수가 일곱 단어짜리 초안을 올렸다고 해 보자. 작가는 사전을 한 번 넘기면서 일곱 단어를 모두 확인한다. 앞의 다섯 단어가 맞고 여섯 번째가 틀렸다면, 작가는 다섯 단어를 받아들이고 여섯 번째 단어를 직접 고쳐 쓴다. 사전을 한 번 넘겨 여섯 단어를 얻은 것이다. 조수가 첫 단어부터 틀렸다면 작가는 그 단어 하나만 고쳐 쓴다. 조수가 없을 때와 다르지 않다.

그래서 좋은 조수의 조건은 하나다. 작가의 다음 말을 잘 짐작해야 한다. 초안이 열 번에 아홉 번 통과되는 조수라면 작가는 거의 결재만 한다. 열 번에 한 번 통과되는 조수라면 작가는 혼자 쓰는 것과 다를 바 없다. 조수의 손이 얼마나 빠른지는 별로 중요하지 않다. 눈치가 전부다.

그런데 이 조수는 외국 지사에서 일을 배웠다. 영어 편지와 프로그램 코드라면 작가의 다음 말을 곧잘 맞힌다. 한국 본사의 보고서와 업무 메일 앞에서는 초안이 자꾸 빗나간다. 작가는 한국어를 잘 아는데 조수만 이곳의 말과 서식을 모른다. 작가는 초안을 몇 단어 읽다 말고 지우고, 조수를 둔 보람은 사라진다. 일솜씨는 그대로인데 이 사무실의 말을 들어 본 적이 없는 것이다.

이 장면은 오늘날 거대 언어 모델이 답을 만드는 방식을 거의 그대로 옮긴 것이다. 작가는 모델이고, 사전은 모델의 가중치다. 본문에서는 드래프터가 돕는 이 모델을 그냥 큰 모델이라 부른다. 조수는 추측 디코딩(speculative decoding)에서 초안을 쓰는 작은 모델, 곧 드래프터다. 이번에 작가는 그대로 두고 조수만 우리 사무실로 연수를 보냈다. 그 과정에서 겪은 실패와 결과를 정리하고, 그것이 큰 모델을 현장에서 빠르게 쓰는 방법에 대해 무엇을 알려 주는지 따져 본다.

답이 느린 까닭은 계산보다 읽기에 있다

언어 모델은 답을 토큰 단위로 하나씩 만든다. 토큰은 단어나 단어의 조각이다. 다음 토큰을 정하려면 앞서 만든 토큰이 모두 있어야 하므로, 열 번째 토큰은 아홉 번째 토큰이 나온 뒤에야 계산할 수 있다. 이를 자기회귀 방식이라고 한다. 수백억 개 매개변수를 가진 오픈 모델이든, 토큰마다 일부 전문가 층만 꺼내 쓰는 MoE 구조의 모델이든, 클라우드로만 쓸 수 있는 최상위 상용 모델이든 이 점은 같다.

토큰 하나를 만들 때마다 모델은 가중치를 메모리에서 읽어 연산 장치로 가져온다. 밀집 모델은 가중치 전체를, MoE 모델은 그 토큰이 부른 전문가들의 가중치를 읽는다. 2026년 8월 알리바바가 공개한 Qwen3.8-27B는 270억 개 매개변수를 가진 밀집 모델이다. 4비트로 줄여도 16기가바이트 남짓이다. 답 한 줄에 토큰이 수십 개 들어가니, 장비는 한 줄을 쓰는 동안 이 16기가바이트를 수십 번 읽는다.

정작 토큰 하나에 드는 곱셈과 덧셈은 요즘 GPU가 감당할 수 있는 양에 비하면 적다. 한 사람의 질문에 답하는 동안 GPU의 연산 장치는 대부분 가중치가 도착하기를 기다리며 논다. 이런 상태를 메모리 대역폭에 묶였다고 말한다. 생성 속도는 연산 능력보다 메모리에서 가중치를 얼마나 빨리 퍼 올리느냐에 달려 있다. 모델이 클수록 느린 이유가 여기에 있다.

책상 위 장비로 계산해 보면 이 한계가 숫자로 보인다. 맥 미니에 들어가는 M4 Pro 칩의 메모리 대역폭은 초당 273기가바이트다. 16기가바이트짜리 가중치를 1초에 17번 남짓 읽을 수 있다는 뜻이다. 다른 계산이 전혀 없다고 쳐도 이 장비에서 Qwen3.8-27B가 1초에 만들 수 있는 토큰은 17개 안팎이 상한이다. 연산 장치를 더 좋은 것으로 바꿔도 이 상한은 움직이지 않는다. 메모리를 더 빠른 것으로 바꾸거나, 한 번 읽을 때 더 많은 토큰을 얻어 내야 한다.

같은 이유로 문서를 읽는 일과 답을 쓰는 일의 속도는 크게 다르다. 질문과 첨부 문서를 처리하는 단계에서는 입력 토큰이 이미 모두 주어져 있다. 모델은 가중치를 한 번 읽어 수많은 토큰을 한꺼번에 계산하므로 연산 장치가 쉬지 않는다. 답을 쓰는 단계에서는 다음 토큰을 모르니 가중치를 한 번 읽어 토큰 하나만 계산한다. 계약서 수십 쪽을 읽어 들이는 데는 몇 초면 되는데, 몇 문단짜리 요약을 쓰는 데는 그보다 오래 걸리는 이유다.

MoE 구조가 빠른 이유도 여기서 나온다. 전체 매개변수가 수천억 개여도 토큰 하나를 만들 때는 불려 나온 전문가의 가중치만 읽으면 된다. 대신 다음 토큰에서 어떤 전문가가 불릴지 모르니 전체 가중치를 메모리에 올려 두어야 한다. 읽는 양은 줄지만 담아 둘 공간은 줄지 않는다. 어느 구조든 토큰 하나에 가중치를 한 번 읽어야 한다는 사실은 그대로다.

읽을 양을 줄이는 길도 있다. 가중치를 4비트보다 더 거칠게 줄이거나, 아예 작은 모델로 바꾸는 것이다. 두 방법 모두 속도를 얻는 대가로 답의 질을 조금씩 내준다. 4비트까지는 손실이 거의 없지만 그 아래로 내려가면 어려운 추론부터 무너진다. 작은 모델로 바꾸면 그 모델이 모르는 것은 아무리 빨라도 답하지 못한다. 답의 질을 그대로 두고 빨라지려면 다른 길이 필요하다.

이 구조에서 중요한 사실이 하나 나온다. 가중치를 한 번 읽어 오는 동안 토큰 하나를 계산하든 여덟 개를 함께 계산하든 걸리는 시간이 거의 같다. 시간은 대부분 읽기에 들고, 늘어난 계산은 놀고 있던 연산 장치가 처리하기 때문이다. 다음에 올 토큰 여덟 개를 미리 알 수만 있다면, 모델은 가중치를 한 번 읽는 동안 그 여덟 개가 맞는지 한꺼번에 확인할 수 있다.

이 발상은 컴퓨터 설계에서는 오래된 것이다. 프로세서는 프로그램이 어느 쪽으로 갈지 확정되기 전에 더 그럴 법한 쪽을 미리 실행해 둔다. 짐작이 맞으면 시간을 번 것이고, 틀리면 미리 한 일을 버리고 다시 하면 된다. 추측 실행이라 부르는 이 방법을 언어 모델에 옮긴 것이 추측 디코딩이다.

이 방법이 언어 모델에서 통하는 까닭은 글 안에 쉬운 대목이 많기 때문이다. 어려운 문장을 쓰는 중에도 다음 토큰이 거의 정해져 있는 곳이 곳곳에 있다. “감사합니다”의 “합니다”, 열어 둔 괄호의 짝, 앞에서 정의한 변수 이름 같은 것이다. 이런 대목은 큰 모델이 아니라 작은 모델도 맞힌다. 큰 모델의 힘이 꼭 필요한 대목은 생각보다 드물고, 나머지는 작은 모델에 맡겨도 된다.

출발점은 구글 리서치의 야니브 레비아탄(Yaniv Leviathan) 등이 2022년 11월 발표한 논문이다. 작은 모델이 토큰 몇 개를 먼저 쓰고, 큰 모델이 한 번의 계산으로 이를 검사한다. 핵심은 수락과 거절을 정하는 규칙이다. 큰 모델이 각 위치에서 매긴 확률과 작은 모델이 매긴 확률을 비교해 받아들일지 정하고, 거절한 위치에서는 큰 모델의 확률에 맞춰 토큰을 다시 뽑는다. 이 규칙 덕분에 최종 출력은 큰 모델이 혼자 만들었을 때와 확률 분포까지 수학적으로 같다. 논문은 T5-XXL 모델에서 출력을 하나도 바꾸지 않고 2~3배 빨라졌다고 보고했다. 비슷한 시기에 딥마인드도 같은 원리의 방법을 따로 내놓았다.

이 방법은 손해를 보는 경우가 거의 없다. 초안이 첫 토큰부터 틀려도 큰 모델은 검사하는 김에 그 위치의 올바른 토큰 하나를 만들어 낸다. 초안 없이 혼자 생성할 때와 같은 결과다. 잃는 것은 초안을 쓰는 데 든 작은 비용뿐이다. 드래프터가 엉뚱한 초안을 내면 원래 속도로 돌아가고, 잘 맞히면 그 배수로 빨라진다.

속도는 드래프터가 얼마나 맞히느냐로 정해진다

추측 디코딩의 성능은 한 번의 검사로 평균 몇 개의 토큰이 확정되느냐로 잰다. 이를 수락 길이라고 부른다. 드래프터가 일곱 개를 제안해 앞의 네 개가 맞았다면, 큰 모델이 고쳐 쓴 다섯 번째 토큰까지 다섯 개가 한 번에 확정된다. 수락 길이가 5라면 큰 모델이 가중치를 읽는 횟수가 5분의 1로 줄어든다. 드래프터를 돌리는 비용이 작을수록 이 차이가 그대로 속도가 된다.

초안이 맞았는지 판단하는 기준은 설정에 따라 다르다. 같은 질문에 늘 같은 답을 내는 설정이라면 큰 모델이 가장 높은 확률을 준 토큰과 같아야 통과한다. 답에 변화를 주려고 확률에 따라 토큰을 뽑는 설정이라면, 드래프터의 확률 분포와 큰 모델의 분포가 얼마나 겹치느냐가 통과율을 정한다. 드래프터는 큰 모델이 무엇을 쓸지뿐 아니라 무엇을 쓸 수도 있는지까지 닮아야 한다. 큰 모델이 실제로 쓴 답으로 드래프터를 가르쳐야 하는 이유가 여기서 나온다.

드래프터를 만드는 방법은 몇 갈래로 나뉜다. 가장 손쉬운 것은 같은 계열의 작은 모델을 따로 띄우는 방식이다. 레비아탄의 논문이 이 방식을 썼다. 작은 모델은 큰 모델과 같은 어휘를 쓰지만 큰 모델의 속사정은 모른다. 입력된 문장만 보고 혼자 다음 토큰을 짐작한다.

두 번째는 모델 안에 처음부터 예측 장치를 넣어 두는 방식이다. 다중 토큰 예측, 곧 MTP(multi-token prediction) 헤드다. 모델의 마지막 층이 만든 내부 표현을 받아 바로 다음 토큰 뒤에 올 토큰들을 하나씩 차례로 예측하는 작은 층이다. Qwen3.8-27B는 사전 학습과 사후 학습 모두에 MTP를 넣었고, 일곱 토큰을 내다보는 MTP 헤드를 기본으로 갖추고 나왔다. 본체와 함께 학습했으니 본체의 생각을 가장 가까이에서 읽고, 따로 모델을 올릴 필요도 없다.

이 발상의 뿌리는 2024년 초 프린스턴대와 투게더 AI 연구진이 내놓은 Medusa에 있다. 이미 학습을 마친 모델의 끝에 작은 예측 헤드 몇 개를 붙여, 각 헤드가 두 번째, 세 번째, 네 번째 다음 토큰을 따로 짐작하게 했다. 여러 갈래의 초안 조합을 한꺼번에 검사하는 방법도 함께 내놓았다. 그 뒤 모델 개발사들은 아예 사전 학습 단계부터 이런 예측 장치를 넣기 시작했다. 딥시크(DeepSeek)가 V3에서 그렇게 했고, Qwen도 Qwen3-Next와 3.5 세대부터 같은 길을 갔다.

세 번째는 큰 모델의 내부 표현을 넉넉하게 받아 쓰는 별도 드래프터다. 이 계열의 대표인 EAGLE-3은 큰 모델의 얕은 층, 중간 층, 깊은 층에서 나온 표현을 합쳐 드래프터에 넣는다. 마지막 층의 표현만 쓰던 이전 방식보다 학습 데이터를 늘릴수록 성능이 잘 오른다. 다만 EAGLE-3의 드래프터도 토큰을 하나씩 차례로 쓴다. 초안이 길어질수록 초안을 쓰는 시간도 함께 늘어난다.

2026년 초 UC 샌디에이고 연구진이 발표한 DFlash는 이 한계를 블록 단위의 확산 모델로 풀었다. 드래프터가 토큰 열여섯 개를 한 번의 계산으로 동시에 내놓는다. 작은 모델이 혼자 열여섯 개를 맞히기는 어려우므로, 큰 모델의 얕은 층부터 깊은 층까지 고르게 다섯 곳에서 내부 표현을 뽑아 드래프터의 모든 층에 넣어 준다. 큰 모델이 이미 해 둔 생각을 건네받아 그 생각이 향하는 곳을 한 번에 읽어 내는 구조다. 논문은 Qwen3-8B에서 출력을 바꾸지 않고 6배 넘게 빨라졌고, EAGLE-3보다 2.5배 가까이 앞섰다고 보고했다.

DFlash를 만든 팀이 꾸린 인코 AI(Inco AI)는 2026년 8월 DFlash 2를 내놓았다. 출발점은 흥미로운 관찰이었다. 영어 수학 문제에서 DFlash가 첫 위치에 내놓은 1순위 후보가 정답인 경우는 85.4퍼센트였다. 그런데 상위 16개 후보 안에 정답이 들어 있는 경우는 99.5퍼센트였다. 1순위가 틀려도 정답은 대개 후보 목록 어딘가에 있다는 뜻이다. DFlash 2는 위치마다 후보 16개를 남겨 두고, 가벼운 선택기가 앞뒤 후보끼리 이어지는 모양을 따져 가장 자연스러운 경로 하나를 고른다. Qwen3.8-27B에서 이 드래프터는 다섯 개 벤치마크 모두에서 모델에 기본으로 들어 있는 MTP보다 더 긴 초안을 통과시켰다.

DFlash 2는 블록 뒤쪽의 정확도 문제도 손봤다. 열여섯 개를 한꺼번에 내놓으면 뒤로 갈수록 맞히는 비율이 떨어진다. 인코 AI는 그 원인을 블록 안의 앞뒤 토큰이 서로를 충분히 참고하지 못하는 데서 찾았다. 그래서 각 위치가 바로 앞 위치의 표현을 함께 보도록 작은 합성곱 장치를 넣었다. 매개변수는 3퍼센트만 늘었는데, 층을 세 배로 늘린 드래프터에 가까운 정확도를 냈다.

같은 표를 조금 더 들여다보면 두 가지가 더 보인다. 하나는 글의 종류에 따른 차이다. Qwen3.8-27B에서 DFlash 2의 수락 길이는 수학 문제(GSM8K)에서 5.46이었지만 일반 대화(MT-Bench)에서는 4.10이었다. 수학 풀이는 형식이 정해져 있어 다음 토큰을 짐작할 근거가 많고, 자유로운 대화는 그 근거가 적다. 속도 향상도 수학 쪽이 대화 쪽보다 컸다.

코드가 빠른 이유도 같다. 코드에는 한 번 정의한 변수와 함수의 이름이 거듭 나오고, 열어 둔 괄호는 반드시 닫힌다. 함수의 이름과 인자가 정해지면 본문의 상당 부분이 따라 정해진다. 형식이 강한 글일수록 드래프터가 기댈 근거가 많다. 이 사실은 한국어 업무 문서를 다룰 때 다시 중요해진다. 회사의 문서도 형식이 강한 글이기 때문이다.

다른 하나는 동시 사용자 수에 따른 차이다. 요청 하나를 처리할 때 3배 넘게 빨라지던 것이, 동시에 32개 요청을 처리하면 1.0~1.45배로 줄었다. 같은 조건에서 MTP는 일부 과제에서 오히려 원래보다 느려졌다. 사용자가 많아지면 GPU의 연산 장치가 더 이상 놀지 않는다. 그때부터는 버려질 초안을 검사하는 계산이 공짜가 아니다. 추측 디코딩은 놀고 있는 연산 장치를 쓰는 기술이므로, 한 대의 장비를 소수가 함께 쓰는 환경에서 효과가 가장 크다. 이 점은 뒤에서 다시 중요해진다.

공개 드래프터는 한국어 업무 문서에서 자주 빗나간다

드래프터 성능표에는 한국어가 없다. GSM8K, MATH-500, HumanEval, MBPP, MT-Bench는 영어 수학, 영어 코드, 영어 대화다. 드래프터가 배운 데이터도 크게 다르지 않다. DFlash 논문의 드래프터는 엔비디아가 공개한 사후 학습 데이터와 코드 데이터에서 고른 약 80만 건으로 학습했다. 드래프터가 영어와 코드에서 잘 맞히는 것은 그것을 보며 배웠기 때문이다.

실제로 써 보면 차이는 바로 드러난다. 코드를 짜게 하면 초안이 줄 단위로 통과된다. 같은 모델에 한국어 보고서를 쓰게 하면 초안이 몇 토큰 만에 끊기는 일이 잦다. 큰 모델은 한국어를 잘 쓴다. Qwen 계열은 수많은 언어를 함께 학습했고 한국어 답변의 질도 높다. 문제는 큰 모델이 아니라 드래프터 쪽에 있다.

이 현상은 연구로도 확인된다. KAIST 윤세영 교수 연구팀과 KT 연구진은 2024년, 영어 대화 데이터로 학습한 기존 드래프터들이 번역 과제에서 거의 속도를 내지 못한다는 것을 보였다. 이들이 언어별로 따로 학습시킨 드래프터는 같은 크기로도 속도를 크게 끌어올렸다. 드래프터가 학습한 입력 언어와 실제 입력 언어가 같을 때 효과가 컸고, 학습 토큰이 늘어날수록 속도 향상이 로그 비례로 커졌다.

같은 연구에는 눈여겨볼 결과가 하나 더 있다. 드래프터를 크게 만들면 해결될 것 같지만 그렇지 않았다. 매개변수 10억 개짜리 드래프터는 번역 데이터로 다시 학습시킨 6800만 개짜리 드래프터와 비슷한 수의 토큰을 통과시켰다. 그런데 초안을 쓰는 데 시간이 너무 들어, 추측 디코딩을 아예 쓰지 않을 때보다 느려졌다. 드래프터는 작아야 쓸모가 있다. 그 작은 용량을 무엇으로 채우느냐가 성능을 정한다.

연구진은 또 드래프터가 학습한 데이터와 실제 입력이 같은 종류일 때 효과가 컸고, 출력 쪽만 맞아서는 효과가 작았다고 보고했다. 드래프터는 질문을 읽고 답의 흐름을 짐작한다. 어떤 질문이 들어오는지가 드래프터의 성능을 크게 좌우한다는 뜻이다. 고객의 실제 질문을 모아야 하는 이유다.

2026년 5월 미국 콜로라도대 연구진은 Qwen3.5 계열의 큰 모델과 작은 드래프터로 영어를 열한 개 언어로 번역하게 했다. 수락률은 낮았고, 학습 자원이 적은 언어일수록 더 낮았다. 작은 모델은 담을 수 있는 것이 적어 학습 데이터에 많이 나온 언어부터 채운다. 큰 모델은 여러 언어를 고르게 다루는데, 같은 계열의 작은 모델은 영어 쪽으로 기운다.

이 연구에는 뜻밖의 결과도 있었다. 신경망 대신 단어가 이어지는 빈도만 세어 둔 n-gram 드래프터는 수락률이 더 낮았는데도 꾸준히 큰 속도 향상을 냈다. 초안을 쓰는 비용이 거의 없었기 때문이다. 한국어 업무 문서에도 시사하는 바가 있다. 요약이나 답장처럼 입력 문서의 표현을 그대로 옮겨 적는 일이 많다면, 입력에서 이어질 말을 찾아 초안으로 내는 값싼 방법도 효과를 볼 수 있다. 드래프터가 꼭 똑똑할 필요는 없고, 큰 모델의 다음 토큰을 맞히기만 하면 된다.

한국어 업무 문서에는 사정이 하나 더 있다. 회사의 보고서에는 정해진 양식이 있다. 개요, 현황, 문제점, 개선 방안 같은 소제목이 같은 순서로 반복되고, 결재 요청 문구와 사내 약어와 시스템 이름이 매번 등장한다. 이런 말은 공개 데이터에 거의 없다. 큰 모델은 문맥을 읽고 그 형식을 따라 쓰는데, 드래프터는 그 형식을 처음 본다. 큰 모델이 형식을 따르는 만큼 드래프터의 초안은 빗나간다.

빗나가는 방식에도 특징이 있다. 드래프터가 틀리는 곳은 대개 그 회사에만 있는 말이다. “검토 결과를 보고드립니다” 같은 평범한 문장은 곧잘 맞힌다. 그 사이에 사내 시스템 이름이나 부서 약어가 끼어드는 순간 초안이 끊긴다. 검사는 처음 틀린 토큰에서 멈추므로, 그 뒤에 이어지던 평범한 문장까지 모두 버려진다. 낯선 단어 하나가 블록 전체를 무너뜨린다.

DFlash 2의 선택기도 이 문제를 비켜 가지 못한다. 선택기는 정답이 후보 16개 안에 있다는 전제 위에서 일한다. 영어 수학 문제에서는 그 전제가 99.5퍼센트 맞았다. 드래프터가 한국어 업무 용어를 모르면 정답 토큰은 아예 후보 목록에 오르지 못한다. 목록에 없는 것은 아무리 잘 골라도 고를 수 없다.

큰 모델은 그대로 두고 드래프터만 다시 가르쳤다

그래서 큰 모델은 손대지 않고 드래프터만 다시 학습시켰다. 대상은 두 가지였다. 하나는 모델에 기본으로 들어 있는 MTP 헤드이고, 다른 하나는 DFlash 2 드래프터다. 학습 데이터는 실제 업무에서 오가는 대화와 문서, 개발 지시였다. 이름, 연락처, 계좌처럼 사람을 알아볼 수 있는 정보는 모두 가렸다.

개인 정보를 가려도 학습 효과는 크게 줄지 않는다. 사람 이름과 전화번호는 어차피 드래프터가 짐작할 수 없는 토큰이다. 그런 토큰이 나오면 큰 모델이 직접 쓰면 된다. 드래프터가 배워야 할 것은 그 주변의 형식, 곧 이름 앞에 붙는 직함과 번호 뒤에 오는 문장이다. 가려 둔 표시 대신 실제 값이 들어와도 그 형식은 그대로 남는다.

가장 중요한 결정은 정답을 누가 쓰느냐였다. 사람이 쓴 모범 답안을 정답으로 쓰지 않았다. 같은 질문을 큰 모델에게 다시 던져 큰 모델이 실제로 쓴 답을 정답으로 삼았고, 그 답을 쓰는 동안 큰 모델 안에서 만들어진 내부 표현을 함께 뽑았다. 드래프터가 배워야 할 것은 바른 한국어가 아니라 이 모델이 이 회사의 일을 할 때 쓰는 말버릇이다. 사람이 쓴 답이 아무리 훌륭해도 큰 모델이 쓰지 않을 문장이라면 검사에서 거절된다. DFlash 논문도 원래 데이터셋의 답 대신 큰 모델이 새로 생성한 답으로 드래프터를 학습시켰고, KAIST와 KT의 연구도 같은 방식을 썼다.

내부 표현을 뽑는 일은 생각보다 무겁다. 답에 들어간 토큰마다 큰 모델의 여러 층에서 나온 벡터를 저장해야 한다. 뽑는 층이 다섯 개면 저장할 양도 다섯 배가 된다. DFlash 논문도 뽑는 층의 수를 늘리면 수락 길이는 오르지만 저장 비용이 그만큼 커진다고 적었다. 데이터를 미리 다 뽑아 두는 대신, 큰 모델을 띄워 둔 채 학습하면서 그때그때 내부 표현을 받아 쓰는 방법도 있다. vLLM의 드래프터 학습 도구는 MTP 헤드를 이렇게 학습시키는 절차를 제공한다.

데이터의 일부에는 영어 글과 코드도 섞었다. 작은 모델은 새 분야를 배우는 동안 원래 잘하던 것을 쉽게 잊는다. 한국어 업무 문서에서 빨라지는 대신 개발자들이 쓰던 코드 생성이 느려지면 얻는 것이 없다.

개발 지시는 따로 챙겼다. 한국 개발자들의 지시문은 한국어 문장 사이에 코드와 영어 용어가 섞여 있다. 주석은 한국어로 달고 변수 이름은 영어로 짓는다. 영어 코드만 보고 배운 드래프터에게 이런 글은 한국어도 영어도 아닌 낯선 글이다. 코딩 에이전트처럼 토큰을 많이 쓰는 일일수록 이 부분의 속도가 전체 작업 시간을 좌우한다.

첫 번째 실패는 MTP 헤드에서 나왔다. 처음에는 MTP 헤드의 원래 가중치는 얼려 두고, 그 옆에 작은 보정 행렬을 붙여 학습하는 LoRA 방식을 썼다. 학습은 잘 됐고, 원래 정밀도에서 잰 수락 길이도 올랐다. 그런데 실제로 배포할 때는 모델 전체를 4비트로 줄여서 올린다. 장비의 메모리에 넣으려면 그래야 한다. 보정 행렬을 원래 가중치에 합친 뒤 4비트로 줄이자 학습 효과가 거의 사라졌다. LoRA가 만든 변화는 가중치 하나하나로 보면 아주 작다. 4비트 양자화는 가중치를 16단계 눈금 중 가장 가까운 값으로 반올림하는데, 보정 폭이 그 눈금 간격보다 작으면 반올림 과정에서 원래 값으로 돌아간다.

해결책은 MTP 헤드 전체를 학습시키는 것이었다. 가중치를 얼리지 않고 헤드 전체를 고객 데이터로 다시 학습시키자, 변화가 양자화 눈금을 넘을 만큼 커졌고 4비트로 줄인 뒤에도 남았다. MTP 헤드가 양자화에 예민하다는 것은 다른 곳에서도 확인된다. Qwen3.5-27B를 4비트 부동소수점으로 줄여 공개한 한 커뮤니티 배포판은 본체만 줄이고 MTP 헤드는 원래 정밀도로 되돌려 넣었다. 헤드까지 줄이면 추측 디코딩의 효과가 무너지기 때문이다. 학습한 결과물이 실제로 돌아갈 형태에서 살아남는지 확인하지 않으면 학습은 하지 않은 것과 같다.

두 번째 실패는 DFlash 2의 선택기에서 나왔다. 선택기를 학습할 때, 드래프터가 내놓은 후보 16개 안에 정답 토큰이 없으면 정답을 후보 목록에 억지로 끼워 넣었다. 그래야 선택기가 정답 경로를 고르는 연습을 할 수 있다고 봤다. 결과적으로 학습 중의 모든 예제에는 정답이 후보 안에 있었다. 실제 한국어 업무 문서에서는 사정이 다르다. 드래프터가 아직 모르는 말이 나오면 정답은 후보 목록에 없다. 선택기는 정답이 없는 목록을 한 번도 본 적이 없으니 그 상황에서 어떻게 해야 할지 배우지 못했다. 학습 지표는 좋아졌는데 실제 수락 길이는 거의 그대로였다.

학습 조건을 실제 추론 조건과 똑같이 맞추자 그제야 수락 길이가 늘기 시작했다. 정답을 끼워 넣지 않고 드래프터가 실제로 내놓은 후보 목록 그대로 학습시켰다. 정답이 목록에 없는 경우도 그대로 두었다. 같은 교훈은 앞선 연구에도 있다. EAGLE-3 연구진은 이전 방식이 학습할 때는 정답 데이터를 보고 추론할 때는 자기가 만든 초안을 보는 차이 때문에 데이터를 늘려도 성능이 잘 오르지 않는다고 진단했다. 그래서 학습 단계에서 실제 추론 과정을 흉내 내는 방법을 넣었다. 드래프터는 시험 요령보다 현장의 조건에서 배워야 한다.

두 실패는 같은 뿌리에서 나왔다. 학습할 때의 조건과 실제로 돌아갈 때의 조건이 달랐다. 첫 번째는 정밀도가 달랐고, 두 번째는 후보 목록이 달랐다. 두 경우 모두 학습 지표는 좋아 보였다. 드래프터의 성능은 실제로 배포할 형태 그대로, 실제 업무 문서로 수락 길이를 재야 알 수 있다. 학습 손실이 아무리 내려가도 현장의 수락 길이가 그대로면 아무것도 나아지지 않은 것이다.

효과를 가른 것은 데이터의 양이었다. 같은 데이터로 학습을 여러 바퀴 더 돌려도 수락 길이는 거의 늘지 않았다. 데이터를 여러 배로 늘렸을 때 비로소 크게 달라졌다. KAIST와 KT 연구가 보인 대로, 드래프터의 속도 향상은 학습한 토큰 수에 따라 커진다. 드래프터를 똑똑하게 만드는 것은 같은 문장의 반복이 아니라 더 많은, 더 그 회사다운 문장이다.

결과는 이렇다. 학습을 마친 DFlash 2 드래프터를 붙이자 한국어 업무 문서에서 같은 일을 하는 데 걸리는 시간이 4분의 1가량 줄었다. 예전에는 큰 모델이 초안을 몇 토큰 받다가 끊었다면, 이제는 한 문단을 거의 통째로 받아들이는 일이 잦아졌다. 영어와 코드에서는 원래 속도를 지켰다. 답의 내용은 바뀌지 않았다. 검사는 여전히 큰 모델이 하기 때문이다.

나아진 정도는 글의 종류에 따라 달랐다. 보고서나 업무 메일처럼 형식이 있는 글은 크게 빨라졌다. 수필처럼 형식이 없는 글은 조금 나아지는 데 그쳤다. 회사의 말은 되풀이되고 쓰는 단어가 정해져 있다. 수필은 누구의 말버릇도 따르지 않으니 다음 문장을 짐작할 근거가 애초에 적다. 이런 글에서는 열여섯 개를 한꺼번에 내놓는 DFlash 2보다 한 토큰씩 차례로 짚는 MTP 헤드가 나을 때도 있었다. 앞쪽에서 초안이 끊기면 블록의 나머지는 버려진다. 예측의 근거가 약한 글에서는 길게 던지기보다 짧게 확실히 맞히는 편이 손실이 적다.

모델은 그대로 두고 드래프터를 고객마다 맞춘다

이 실험이 보여 주는 것은 큰 모델을 현장에 들일 때 무엇을 바꿔야 하느냐에 대한 답이다. 흔히 떠올리는 방법은 큰 모델 자체를 고객 데이터로 미세 조정하는 것이다. 그렇게 하면 모델의 답이 달라진다. 답이 달라지면 정확도, 안전성, 보안 점검을 처음부터 다시 해야 한다. 드래프터만 바꾸면 검사 기준이 그대로이므로 이런 검증을 다시 할 필요가 없다. 기업이 한 번 승인한 모델을 그대로 둔 채 속도만 올릴 수 있다.

학습도 가볍다. Qwen3.8-27B용 DFlash 2 드래프터는 매개변수가 약 20억 개로, 큰 모델의 10분의 1이 안 된다. MTP 헤드는 그보다 훨씬 작다. 거대 모델 전체를 다시 학습시키는 일과 비교하면 필요한 장비도 시간도 한참 적다. 문서와 업무가 바뀌면 그때그때 다시 학습시킬 수 있는 규모다.

짚어 둘 점도 있다. 드래프터는 특정 큰 모델의 내부 표현을 받아 쓰므로 큰 모델이 바뀌면 다시 만들어야 한다. Qwen3.8-27B용 드래프터는 다음 세대 모델에서 쓸 수 없다. 대신 고객 데이터를 모으고, 큰 모델에게 다시 답하게 하고, 드래프터를 학습시켜 실제 형태로 재는 과정을 한 번 갖춰 두면 된다. 새 모델이 나올 때 같은 과정을 다시 돌리기만 하면 된다.

데이터가 밖으로 나가지 않아도 된다는 점도 크다. 드래프터가 작으니 고객의 장비 안에서 고객의 데이터로 학습하고 그대로 배포할 수 있다. 금융사나 병원처럼 데이터를 바깥에 내보내기 어려운 곳에서 이 차이는 결정적이다. 큰 모델이 쓴 답과 그때의 내부 표현을 뽑는 일도, 드래프터를 학습시키는 일도 모두 고객의 서버 안에서 끝난다.

앞에서 본 동시 사용자 수의 문제도 여기서 장점으로 바뀐다. 추측 디코딩은 수많은 사용자가 몰리는 대형 클라우드보다, 한 대의 장비를 한 부서가 나눠 쓰는 사내 환경에서 효과가 크다. 사내에 둔 GPU 서버 한 대나 책상 위 작은 장비에서 큰 모델을 돌리는 고객이 바로 그런 환경에 있다. 큰 모델을 직접 들여놓고 싶어 하는 고객일수록 드래프터를 맞춰 주는 효과도 크다.

모델을 4비트로 줄여 사내 장비에 올리는 양자화와 이 방법은 서로 부딪치지 않는다. 양자화는 한 번에 읽어야 할 양을 줄이고, 추측 디코딩은 한 번 읽을 때 얻는 토큰 수를 늘린다. Qwen3.5-27B의 커뮤니티 배포판에서도 4비트로 줄인 본체에 MTP를 함께 쓸 때 가장 빨랐다. 다만 앞서 본 실패처럼 양자화가 드래프터 학습의 효과를 지울 수 있다. 처음부터 두 가지를 한 묶음으로 설계해야 하는 이유다.

클라우드로만 쓰는 상용 모델도 원리는 같다. 모델 회사들은 이미 자기 서비스에 들어오는 요청에 맞춰 드래프터를 다듬고 있을 가능성이 크다. 그러나 고객은 그 드래프터를 자기 문서로 다시 가르칠 수 없다. 큰 모델을 자기 장비에 들여놓은 고객만 드래프터를 직접 고를 수 있고, 자기 사무실의 말로 가르칠 수 있다.

그리고 드래프터는 고객마다 달라야 한다. 콜로라도대 연구진은 특정 과제의 데이터로 학습한 드래프터가 그 과제에서는 효율을 크게 높이지만 새로운 과제로는 잘 옮겨 가지 못한다는 것을 확인했다. 연구 입장에서는 한계지만 현장에서는 오히려 당연한 결론이다. 같은 큰 모델이라도 금융사의 드래프터는 보고서와 약관의 말을, 제조사의 드래프터는 설비 로그와 정비 매뉴얼의 말을, 병원의 드래프터는 진료 기록의 말을 배워야 한다. 하나의 드래프터가 모든 고객에게서 똑같이 빠를 수는 없다.

업계도 이미 그 방향으로 움직이고 있다. 메타, 엔비디아, 샤오미 같은 모델 개발사들은 새 모델을 내놓을 때 공식 DFlash 드래프터를 함께 공개하기 시작했다. 드래프터가 모델에 딸려 나오는 기본 부품이 된 것이다. 인코 AI는 고객이 미세 조정한 모델용 드래프터도 만들어 준다고 밝혔다. 다만 모델 개발사가 함께 내놓는 드래프터는 영어 벤치마크에서 잘 맞히도록 다듬어져 있다. 한국 기업의 업무 문서에서 그만큼의 속도가 나온다는 보장은 없다. 고객의 문서로 다시 가르친 드래프터가 필요한 이유다.

시작은 어렵지 않다. 먼저 자기 장비에서 공개 드래프터를 붙인 채 실제 업무 질문 몇백 건을 돌려 수락 길이를 잰다. 같은 장비에서 영어 벤치마크로 잰 값과 비교하면 자기 문서에서 얼마나 손해를 보고 있는지 바로 보인다. 그 차이가 크다면 드래프터를 다시 가르칠 이유가 충분하다. 학습을 마친 뒤에도 같은 질문으로 같은 방식으로 재면 얼마나 나아졌는지 숫자로 확인할 수 있다.

이 원리는 큰 모델의 크기와 구조를 가리지 않는다. 오픈 모델이든 MoE 모델이든, 토큰을 하나씩 순서대로 만드는 모델이라면 드래프터를 붙일 수 있다. 모델이 클수록 가중치를 한 번 읽는 비용이 크고, 그만큼 초안 하나가 통과될 때 아끼는 시간도 커진다.

에이전트가 늘어날수록 이 차이는 더 커진다. 에이전트는 문서를 읽고, 계획을 세우고, 도구를 부르고, 결과를 정리하는 일을 몇 시간씩 이어 간다. 사람과 주고받는 대화보다 훨씬 많은 토큰을 쓴다. 단계마다 조금씩 줄인 시간이 수백 번 쌓이면 작업 전체의 길이가 달라진다. 사내 문서를 다루는 에이전트라면 그 토큰 대부분이 그 회사의 말로 이루어진다. 큰 모델을 현장에서 빠르게 쓰는 가장 현실적인 방법은 모델을 줄이는 것보다 고객마다 맞춘 드래프터를 붙이는 것이다.

말을 잘 듣는 조수

다시 원고지 앞의 작가로 돌아가 보자. 작가는 여전히 단어 하나를 쓸 때마다 사전을 끝까지 넘긴다. 사전은 얇아지지 않았고 작가의 실력도 그대로다. 달라진 것은 곁에 앉은 조수다.

일 잘하는 조수를 두고 흔히 말을 잘 듣는다고 한다. 시키는 대로 고분고분 따른다는 뜻만은 아니다. 작가가 평소 어떤 말을 쓰고 어떤 서식을 좋아하는지 귀담아들어 두었다가, 시키기 전에 그에 맞는 초안을 올리는 조수를 두고 하는 말이다. 이런 조수와 일하면 고칠 것이 적으니 일이 빨라지고, 원하던 대로 나오니 만족도도 높다. 작가는 결재에만 마음을 쓰면 된다.

외국 지사에서 온 조수는 처음에 이 사무실의 말을 잘 알아듣지 못했다. 일솜씨가 모자라서가 아니라 이곳의 말을 들어 본 적이 없어서였다. 몇 달 동안 이곳의 보고서와 메일과 개발 지시를 듣고 나자 달라졌다. 이제 조수가 올리는 초안은 한 문단씩 통째로 결재를 통과한다. 원고는 예전과 한 글자도 다르지 않은데, 작가의 하루는 눈에 띄게 짧아졌다.

작가를 바꾸는 일은 어렵고 위험하지만 조수를 가르치는 일은 가볍고, 잘못돼도 원래 속도로 돌아갈 뿐이다. 개발팀의 조수는 코드를, 법무팀의 조수는 계약서를, 병원의 조수는 진료 기록을 들어야 한다. 어느 사무실이든 좋은 조수가 되는 길은 같다. 그곳의 말을 오래, 많이 듣는 것이다.

큰 모델을 현장에서 빠르게 만드는 것도 결국 이 조수다. 우리의 말을 잘 듣는 조수를 곁에 두면, 같은 작가와 일해도 일은 더 빨리, 더 만족스럽게 끝난다.

참고 자료