AMD GPU에서 vLLM 추론 디코딩 활용하기
AMD Instinct MI300X/MI355X GPU와 ROCm 플랫폼에서 vLLM의 추론 디코딩(Speculative Decoding) 성능을 실험한 글입니다. 초안-검증(draft-and-verify) 방식으로 원본 모델의 출력을 유지하면서 한 번의 검증으로 여러 토큰을 커밋해 처리량을 높일 수 있으며, 그 효과는 초안 생성 방식(MTP, EAGLE-3, DFlash, DSpark 등), 제안 길이, 모델 계열, 워크로드에 따라 달라졌습니다. LLM 서빙 최적화에 실용적인 참고 자료입니다.
목차
TL;DR: 추론 디코딩(Speculative Decoding)을 통해 vLLM은 단 한 번의 타깃 모델 패스에서 여러 초안(draft) 토큰을 검증할 수 있습니다. 실험 결과, 출력 토큰 처리량에 미치는 효과는 초안 생성 방식과 제안 길이에 따라 달랐으며, 모델 계열, 초안 체크포인트, 워크로드, 수용(acceptance) 동작에도 영향을 받았습니다.
소개 대규모 언어 모델(LLM)은 다양한 애플리케이션을 지원하지만, 대규모로 서빙하려면 신중한 최적화가 필요합니다. 표준 자기회귀(autoregressive) 디코딩은 대부분의 LLM 서빙 시스템이 사용하는 기준 방식입니다. 모델이 토큰 하나를 생성하고 이를 시퀀스에 추가한 뒤, 업데이트된 시퀀스로 다음 토큰을 생성합니다. 이 과정은 단순하고 안정적이지만, 출력 토큰이 엄격한 왼쪽에서 오른쪽 순서로 생성되어야 하기 때문에 서빙 루프는 한 번에 커밋된 토큰 하나씩만 진행됩니다.
추론 디코딩[1]은 이 기준 위에 초안-검증(draft-and-verify) 메커니즘을 더한 것입니다. 가벼운 초안(draft) 컴포넌트가 미래의 후보 토큰을 제안하고, 타깃 모델이 이들을 커밋하기 전에 검증합니다. 여러 초안 토큰이 수용되면, 타깃 모델의 출력 동작을 유지하면서도 단 한 번의 검증 단계로 여러 출력 토큰을 커밋할 수 있습니다.
이 글은 vLLM에서 추론 디코딩이 어떻게 작동하는지 살펴보고, 저희 테스트 환경에서의 측정 결과를 공유합니다. 먼저 자기회귀 디코딩 기준 방식과 초안-검증 과정을 살펴봅니다. 그다음 다섯 가지 초안 생성 방식을 검토합니다: 네이티브 MTP, Gemma 4 MTP, EAGLE-3, DFlash, DSpark입니다. 이 방법들은 초안 컴포넌트가 타깃 모델로부터 정보를 받는 방식, 그리고 후보 토큰을 순차적으로(자기회귀 방식으로) 생성하는지, 병렬로 생성하는지, 아니면 하이브리드 방식으로 생성하는지에 따라 다릅니다. 마지막으로 테스트 환경에서 이 방법들을 활성화하는 방법을 보여주고, AMD Instinct™ MI300X 및 MI355X GPU에서 ROCm™ 오픈 소프트웨어 플랫폼을 사용한 실험 측정 결과를 보고하며, 실무 튜닝과 관측 가능성(observability) 관련 고려사항을 논의합니다.
자기회귀 디코딩 기준 방식 표준 자기회귀 디코딩에서는 각 디코딩 단계가 새 토큰 하나를 생성하고 커밋합니다. 예를 들어, 출력 토큰 네 개를 생성하려면 네 번의 순차적 디코딩 단계가 필요합니다:
1단계: 컨텍스트 → 모델 → T1 2단계: 컨텍스트 + T1 → 모델 → T2 3단계: 컨텍스트 + T1 T2 → 모델 → T3 4단계: 컨텍스트 + T1 T2 T3 → 모델 → T4
각 단계 후 생성된 토큰은 시퀀스에 추가되어 다음 단계의 입력 일부가 됩니다. 이는 디코딩 루프를 단순하게 만들지만, 모든 출력 토큰마다 한 번의 모델 디코딩 단계가 필요합니다. 긴 생성 작업 중에는 이 토큰별 루프가 지연 시간을 지배하고 서빙 처리량을 제한할 수 있습니다.
따라서 추론 디코딩의 핵심 질문은 다음과 같습니다: 원본 모델의 출력 동작을 유지하면서 한 번에 토큰 하나씩만 진행되는 생성 빈도를 줄일 수 있을까? 추론 디코딩은 제안(proposal)과 검증(verification)을 분리하여 이를 해결합니다. 초안 컴포넌트가 먼저 여러 미래 후보 토큰을 제안하고, 타깃 모델 역할을 하는 원본 모델이 커밋 전에 이들을 검증합니다.
추론 디코딩의 핵심 아이디어 추론 디코딩은 원본 모델을 대체하지 않습니다. 대신 최종 출력을 담당하는 타깃 모델로 원본 모델을 유지하고, 그 앞에 더 빠른 제안 단계를 추가합니다. 과정은 두 부분으로 구성됩니다:
초안(Draft): 여러 미래 후보 토큰을 제안합니다. 검증(Verify): 타깃 모델을 사용해 후보를 확인합니다.
그림 1에 나타난 것처럼 각 추론 디코딩 라운드 동안 가벼운 초안 컴포넌트가 하나 이상의 미래 토큰을 제안합니다. 이 토큰들은 후보일 뿐이며 즉시 커밋되지 않습니다. 그런 다음 타깃 모델이 한 번의 검증 패스로 후보 토큰 시퀀스를 평가합니다. 검증은 왼쪽에서 오른쪽으로 진행되며, 각 초안 토큰은 해당 위치에서 타깃 모델의 결과를 사용해 검사됩니다. 수용된 토큰은 출력 시퀀스에 커밋됩니다. (원문이 여기서 중단됨)