Speculative Decoding
울 아빠가 일하던 썰을 풀어본다.
어릴 적부터 아빠는 독수리 타법으로 모든 작업을 했다.
지켜보고 있으면 한없이 답답했지만 아빠 본인은 “한글자 한글자 신중히 생각하며 적는 것” 이라고 했다.
급하게 일을 처리해야 할 때면 어린 누나를 종종 활용했다. 성격이 급한 누나는 아빠의 말을 타이핑 해 주는 것을 넘어, 아빠가 작성할 문서를 미리 예측해 완성해두곤 했다.
아빠는 그것을 보며 흡족해 하다가도 때로는 “아니 아니, 다시” 라며 누나가 쓴 글을 지우고 다시 작성했다.
티격 태격 하면서도, 둘은 빠른 속도로 훌륭한 보고서를 완성하곤 했다.
누나를 업무에 활용하던 아빠의 꼼수가 현대 LLM 추론 엔진의 코어 테크닉이라면 믿겠는가? HuggingFace, vLLM 등 LLM 추론 프레임워크에는 Speculative Decoding 이라는 옵션이 들어간다. 대형 언어모델의 느린 추론 속도를 획기적으로 끌어올리기 위한 기법이다. 그 원리는 이렇다.
추론에 사용할 대형 LLM(예: 500B)을 준비한다.
소형 LLM(예: 14B) 도 같이 준비한다.
대형 LLM이 문장을 생성하기 전, 소형 LLM이 먼저 빠른 속도로 문장을 생성한다. 대략 10 토큰 정도.
대형 LLM은 생성된 문장이 잘 생성됐는지 검수한다.
잘 작성됐다면 소형 LLM이 계속 이어서 생성하고, 잘못됐다면 검수 결과에 따라 다시 생성한다.
즉, 마치 경험 없는 누나(소형 LLM)가 빠르게 보고서를 작성하고 경험 많은 아빠 (대형 LLM)가 단어 하나 하나 검수하듯이, 빠른 속도로 ChatGPT 의 결과를 받아보는 배경에는, 이런 식의 테크닉이 숨어 있는 셈이다.
엔지니어링이라는 것이 멀리 있는 것이 아니다. 어려워 보이는 문제들도, 화려해보이는 테크닉들도, 사소한 사소한 일상의 문제에서 출발하는 경우가 많다. 오늘 퇴근길도 최적의 지하철 동선을 계산하는 이유다.
