서픽스 디코딩

서픽스 디코딩 (Suffix Decoding)

서픽스 디코딩(Suffix Decoding)은 패턴 매칭을 통해 제안(proposal)을 생성하는 스페큘레이티브 디코딩 방식이에요. 기술 보고서에서 제안된 기법이죠.

n-gram 방식처럼, 서픽스 디코딩은 마지막 n개 생성 토큰을 사용해 패턴 매칭으로 드래프트 토큰을 만들 수 있어요. 다만 n-gram과 달리 서픽스 디코딩은 (1) 프롬프트와 이전 생성 결과 모두에 대해 패턴 매칭을 할 수 있고, (2) 빈도 수(frequency counts)를 활용해 가장 그럴듯한 연속을 제안하며, (3) 각 요청마다 각 반복에서 적응형으로 스페큘레이티브 토큰 수를 조절해 더 나은 수용률(acceptance rate)을 얻어요.

코드 편집, 에이전트 루프(예: 자기 반성, 자기 일관성)와 RL 롤아웃처럼 반복이 많은 작업에서 서픽스 디코딩이 더 좋은 성능을 낼 수 있어요.

출처: vLLM 공식 문서 — features-speculative_decoding-suffix

Arctic Inference 설치 (Install Arctic Inference)

서픽스 디코딩은 Arctic Inference가 필요해요. pip install arctic-inference로 설치할 수 있어요.

서픽스 디코딩 스페큘레이티브 토큰

서픽스 디코딩은 각 디코딩 단계마다 각 요청에 대해 동적인 토큰 수를 스페큘레이션하므로, num_speculative_tokens 설정은 스페큘레이티브 토큰의 최대 개수를 지정하는 거예요. 16이나 32(기본값)처럼 큰 값을 쓰는 걸 권장해요.

from vllm import LLM, SamplingParams

prompts = ["The future of AI is"]
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)

llm = LLM(
    model="Qwen/Qwen3-8B",
    tensor_parallel_size=1,
    speculative_config={
        "method": "suffix",
        "num_speculative_tokens": 32,
    },
)
outputs = llm.generate(prompts, sampling_params)

for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

더 알아보기 (Learn more)