서픽스 디코딩
서픽스 디코딩 (Suffix Decoding)
서픽스 디코딩(Suffix Decoding)은 패턴 매칭을 통해 제안(proposal)을 생성하는 스페큘레이티브 디코딩 방식이에요. 기술 보고서에서 제안된 기법이죠.
n-gram 방식처럼, 서픽스 디코딩은 마지막 n개 생성 토큰을 사용해 패턴 매칭으로 드래프트 토큰을 만들 수 있어요. 다만 n-gram과 달리 서픽스 디코딩은 (1) 프롬프트와 이전 생성 결과 모두에 대해 패턴 매칭을 할 수 있고, (2) 빈도 수(frequency counts)를 활용해 가장 그럴듯한 연속을 제안하며, (3) 각 요청마다 각 반복에서 적응형으로 스페큘레이티브 토큰 수를 조절해 더 나은 수용률(acceptance rate)을 얻어요.
코드 편집, 에이전트 루프(예: 자기 반성, 자기 일관성)와 RL 롤아웃처럼 반복이 많은 작업에서 서픽스 디코딩이 더 좋은 성능을 낼 수 있어요.
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}")