연구에서 프로덕션까지: Vertex에서 EAGLE-3로 OSS LLM 가속화

요약: 추측 디코딩은 LLM 추론을 향상하지만 기존 방법에는 별도의 비효율적인 초안 모델이 필요합니다. Vertex AI는 EAGLE-3를 활용하여 내부 레이어에 작은 초안 헤드 (타겟 모델의 2~5%)를 추가하여 학습을 간소화하고 디코딩 속도를 2~3배 높입니다. 이 게시물에서는 Vertex AI에서 SGLang을 사용하여 EAGLE-3를 대규모로 정리, 삽입, 학습, 제공하는 파이프라인을 설명합니다.
읽기 시간: 10분
LLM을 사용하는 사람들에게는 한 번에 하나의 토큰이라는 병목 현상이 익숙한 문제입니다. 표준 자기 회귀 생성은 본질적으로 순차적입니다. 이렇게 하면 계산이 아닌 모든 단일 단계에서 메모리에서 대규모 모델 가중치를 읽는 데 필요한 시간으로 속도를 제한하는 클래식 메모리 바운드 프로세스가 생성되어 GPU 코어가 제대로 활용되지 않습니다.

해결 방법은 추측 디코딩입니다. 이 최적화 기법은 초안 메커니즘을 도입하여 대규모 LLM (타겟 모델)이 한 번에 하나의 토큰을 생성하는 느리고 순차적인 프로세스를 가속화합니다.

이 초안 메커니즘은 여러 개의 다음 토큰을 한 번에 빠르게 제안합니다. 그런 다음 대규모 타겟 모델이 단일 병렬 배치에서 이러한 제안을 확인합니다. 자체 예측에서 가장 긴 일치 프리픽스를 수락하고 해당 새 지점부터 생성을 계속합니다.

하지만 모든 드래프트 메커니즘이 동일하게 만들어지는 것은 아닙니다. 클래식 초안 타겟팅 접근 방식은 별도의 소규모 LLM 모델을 초안 작성자로 사용하므로 더 많은 서비스 리소스를 호스팅하고 관리해야 하여 추가 비용이 발생합니다.

초안-타겟 접근 방식을 사용하는 예시를 보여주는 순서도 '샌프란시스코는'이라는 프롬프트는 두 단계로 안내합니다. 1. 초안 모델은 토큰('a', 'city', 'in')의 순차적 체인을 생성하고 2. 타겟 모델은 예상 초안 토큰('a', 'city', 'in' 토큰, 'in' 토큰은 모델에서 거부됨)을 확인하고 선택합니다. 그렇지 않으면 새 토큰('a', 'city', 'known' 토큰)을 생성합니다. 두 단계의 결과가 '샌프란시스코는 ~로 알려진 도시입니다'라는 최종 출력으로 수렴됩니다.

이미지를 확대하려면 클릭하세요

이때 EAGLE-3 (Extrapolative Attention Guided LEarning)가 사용됩니다. EAGLE-3은 더 고급 접근 방식입니다. 전체 별도 모델 대신 타겟 모델 크기의 2~5% 에 불과한 매우 가벼운 '초안 헤드'를 내부 레이어에 직접 연결합니다. 이 헤드는 특성 및 토큰 수준에서 모두 작동하며, 타겟 모델의 숨겨진 상태에서 특성을 수집하여 미래 토큰의 트리를 외삽하고 예측합니다.

그 결과 두 번째 모델을 학습하고 실행하는 오버헤드를 제거하면서 추측 디코딩의 모든 이점을 누릴 수 있습니다.

EAGLE-3의 접근 방식은 수십억 개의 매개변수가 있는 별도의 초안 모델을 학습시키고 유지하는 복잡하고 리소스 집약적인 작업보다 훨씬 효율적입니다. 기존 모델의 일부로 추가되는 경량 '초안 헤드'(타겟 모델 크기의 2~5%)만 학습합니다. 이 간단하고 효율적인 학습 프로세스를 통해 Llama 70B와 같은 모델의 디코딩 성능이 2~3배 향상됩니다 (다중 턴, 코드, 긴 컨텍스트 등 워크로드 유형에 따라 다름).

EAGLE-3 접근 방식을 사용하는 예시를 보여주는 플로우 차트 '샌프란시스코는'이라는 프롬프트는 여러 레이어가 포함된 EAGLE-3가 있는 타겟 모델로 안내합니다. 임베딩 레이어는 디코더와 숨겨진 레이어로 흘러 들어가고, 이는 다시 EAGLE-3 헤드로 흘러 들어갑니다. EAGLE-3 헤드 레이어는 임베딩 레이어로 다시 전달되는 두 개의 토큰 체인 ('a', 'city', 'in' 및 'a', 'city', 'known')으로 분할됩니다. 검증된 토큰 'a', 'city', 'known'이 최종 출력인 'San Francisco is a city known'으로 흘러 들어갑니다.

이미지를 확대하려면 클릭하세요

하지만 이 간소화된 EAGLE-3 접근 방식을 종이에서 확장된 프로덕션 지원 클라우드 서비스로 옮기는 것은 실제 엔지니어링 여정입니다. 이 게시물에서는 기술 파이프라인, 주요 과제, 그 과정에서 얻은 소중한 교훈을 공유합니다.

과제 1: 데이터 준비

EAGLE-3 헤드를 학습시켜야 합니다. 명백한 첫 번째 단계는 일반적인 공개 데이터 세트를 가져오는 것입니다. 이러한 데이터 세트 대부분에는 다음과 같은 문제가 있습니다.

  • 엄격한 서비스 약관: 이러한 데이터 세트는 원래 제공업체와 경쟁하는 모델을 개발하는 데 사용할 수 없는 모델을 사용하여 생성됩니다.
  • PII 오염: 이러한 데이터 세트 중 일부에는 이름, 위치, 금융 식별자를 비롯한 상당한 PII가 포함되어 있습니다.
  • 품질 보장 없음: 일부 데이터 세트는 일반적인 '데모' 사용 사례에만 적합하며 실제 고객의 전문 워크로드에는 적합하지 않습니다.

이 데이터를 그대로 사용하는 것은 불가능합니다.

수업 1: 합성 데이터 생성 파이프라인 빌드

한 가지 해결책은 합성 데이터 생성 파이프라인을 빌드하는 것입니다. Google은 고객의 사용 사례에 따라 품질이 우수할 뿐만 아니라 다양한 워크로드에 대해 고객의 프로덕션 트래픽과 가장 잘 일치하는 적절한 데이터 세트를 선택합니다. 그런 다음 이러한 데이터 세트에서 사용자 프롬프트만 추출하고 엄격한 DLP (데이터 손실 방지) 및 PII 필터링을 적용할 수 있습니다. 이러한 클린 프롬프트는 채팅 템플릿을 적용하고 토큰화한 후 타겟 모델 (예: Llama 3.3 70B)를 사용하여 대답을 수집합니다.

이 접근 방식은 규정을 준수하고 깨끗할 뿐만 아니라 모델의 실제 출력 분포와도 잘 일치하는 타겟 생성 데이터를 제공합니다. 이는 초안 헤드를 학습하는 데 적합합니다.

합성 데이터 생성 파이프라인을 보여주는 선형 흐름도 사용자 프롬프트는 정리되고 필터링된 원시 데이터에서 추출됩니다. 정리된 프롬프트는 채팅 템플릿과 토큰화 도구를 사용하여 토큰화됩니다. 그런 다음 토큰화된 프롬프트는 생성된 응답 토큰을 반환하는 타겟 모델과 함께 응답을 생성하는 데 사용됩니다.

이미지를 확대하려면 클릭하세요

챌린지 2: 학습 파이프라인 엔지니어링

또 다른 중요한 결정은 EAGLE-3 헤드에 학습 데이터를 제공하는 방법입니다. 두 가지 뚜렷한 경로가 있습니다. 임베딩이 '즉석에서 생성'되는 온라인 학습과 '학습 전에 임베딩이 생성'되는 오프라인 학습입니다.

Google의 경우 온라인 학습보다 하드웨어가 훨씬 적게 필요하므로 오프라인 학습 방식을 선택했습니다. 이 프로세스에는 EAGLE-3 헤드를 학습시키기 전에 모든 특징과 임베딩을 사전 계산하는 작업이 포함됩니다. 이러한 이미지는 GCS에 저장되며 경량 EAGLE-3 헤드의 학습 데이터가 됩니다. 데이터가 있으면 학습 자체는 빠릅니다. EAGLE-3 헤드의 크기가 작기 때문에 원래 데이터 세트로 초기 학습을 진행하려면 단일 호스트에서 약 하루가 걸렸습니다. 하지만 데이터 세트의 규모가 커짐에 따라 학습 시간도 비례적으로 증가하여 이제 며칠에 걸쳐 진행됩니다.

학습 파이프라인을 나타내는 선형 플로차트 토큰화된 프롬프트와 생성된 대답 토큰은 타겟 모델로 특징과 임베딩을 생성하는 데 사용되며, 타겟 모델은 토큰과 특징을 반환합니다. 이러한 토큰과 기능은 드래프트 모델로 EAGLE 헤드를 학습시키는 데 사용되며, 학습된 EAGLE 헤드를 반환합니다.

이미지를 확대하려면 클릭하세요

이 과정에서 무시할 수 없는 두 가지 교훈을 얻었으며 이를 염두에 두어야 합니다.

수업 2: 채팅 템플릿은 선택사항이 아님

명령어 튜닝 모델을 학습하는 동안 채팅 템플릿이 올바르지 않으면 EAGLE-3 성능이 크게 달라질 수 있는 것으로 확인되었습니다. 타겟 모델의 특정 채팅 템플릿 (예: 기능과 임베딩을 생성하기 전에 원시 텍스트를 연결하기만 하면 임베딩이 잘못되고 헤드가 잘못된 분포를 예측하도록 학습합니다.

강의 3: 마스크에 유의하기

학습 중에 모델에는 프롬프트와 응답 표현이 모두 제공됩니다. 하지만 EAGLE-3 헤드는 대답 표현을 예측하는 것만 학습해야 합니다. 손실 함수에서 프롬프트 부분을 수동으로 마스크해야 합니다. 제공하지 않으면 헤드가 이미 제공된 프롬프트를 예측하는 방법을 학습하는 데 용량을 낭비하므로 성능이 저하됩니다.

손실 마스크의 예를 보여주는 다이어그램 '샌프란시스코는 도시로 알려져 있습니다'라는 문구는 이미 알려진 토큰 ('샌', '프란시스코', '는')과 예측해야 하는 토큰 ('도시로', '알려져')의 두 부분으로 나뉩니다. 손실 마스크에서 이미 알려진 토큰은 0으로 표시되고 예측해야 하는 토큰은 1로 표시됩니다.

이미지를 확대하려면 클릭하세요

과제 #3: 서빙 및 확장

학습된 EAGLE-3 헤드를 사용하여 서빙 단계로 진행했습니다. 이 단계에서 상당한 확장 문제가 발생했습니다. 주요 학습 내용은 다음과 같습니다.

강의 4: 서빙 프레임워크가 중요함

SGLang팀과 긴밀히 협력하여 최고의 성능으로 EAGLE-3를 프로덕션에 성공적으로 도입했습니다. 기술적인 이유는 SGLang이 중요한 트리 어텐션 커널을 구현하기 때문입니다. 이 특수 커널은 EAGLE-3가 단순한 체인이 아닌 가능성의 '초안 트리'를 생성하기 때문에 중요하며, SGLang의 커널은 한 단계에서 이러한 모든 분기 경로를 병렬로 검증하도록 특별히 설계되었습니다. 이러한 조치를 취하지 않으면 실적을 놓치게 됩니다.

5단원: CPU가 GPU의 병목 현상을 일으키지 않도록 방지

EAGLE-3로 LLM을 가속화한 후에도 CPU라는 또 다른 성능 장벽에 부딪힐 수 있습니다. GPU가 LLM 추론을 실행할 때 최적화되지 않은 소프트웨어는 커널 실행 및 메타데이터 관리와 같은 CPU 오버헤드에 엄청난 시간을 낭비합니다. 일반적인 동기 스케줄러에서 GPU는 단계(예: 초안 작성)를 실행한 다음 CPU가 장부 정리를 하고 다음 확인 단계를 실행하는 동안 유휴 상태로 유지됩니다. 이러한 동기화 버블이 누적되어 귀중한 GPU 시간을 엄청나게 낭비합니다.

일반적인 동기 스케줄러의 예 각 단계는 순차적으로 표시되며 각 단계에서 소요된 시간은 초안 (10ms), 확인 (15ms), 확장 (10ms), CPU 동기화 (5ms), 초안 (10ms), 확인 (15ms)입니다. 동기화 CPU 단계는 CPU 오버헤드에 소요된 최적화되지 않은 시간을 나타내기 위해 다른 색상으로 강조 표시됩니다.

이미지를 확대하려면 클릭하세요

이 문제는 SGLang의 오버헤드 제로 오버랩 스케줄러를 사용하여 해결했습니다. 이 스케줄러는 추측 디코딩의 다단계 초안 -> 확인 -> 초안 확장 워크플로에 맞게 특별히 조정되었습니다 . 핵심은 계산을 중복하는 것입니다. GPU가 현재 Verify 단계를 실행하는 동안 CPU는 이미 다음 DraftDraft Extend 단계의 커널을 실행하기 위해 병렬로 작동하고 있습니다 . 이렇게 하면 GPU의 다음 작업이 항상 준비되도록 하여 유휴 버블이 제거됩니다. GPU가 아직 작동 중인 동안 CPU가 다음 일괄 처리를 준비할 수 있는 스마트 데이터 구조인 FutureMap를 사용합니다.

오버헤드 제로 오버랩 스케줄러의 예 대부분의 단계와 시간은 이전 이미지와 동일하지만 동기화 CPU 단계 대신 쓰기 및 읽기 단계가 동시에 발생하고 각각 완료하는 데 0.1ms가 걸린다는 것을 나타내는 더 작은 단계가 있습니다.

이미지를 확대하려면 클릭하세요

이 CPU 오버헤드를 제거함으로써 오버랩 스케줄러는 전반적으로 10~20%의 속도 향상을 제공합니다. 이는 훌륭한 모델이 절반의 전투에 불과하며 이를 따라갈 수 있는 런타임이 필요하다는 것을 증명합니다.

벤치마크 결과

이 여정을 마친 후, 그만한 가치가 있었나요? 물론입니다.

학습된 EAGLE-3 헤드를 Llama 4 Scout 17B Instruct와 함께 SGLang을 사용하여 비추측 기준선에 대해 벤치마킹했습니다. Google의 벤치마크에 따르면 워크로드 유형에 따라 디코딩 지연 시간이 2~3배 빨라지고 처리량이 크게 향상됩니다.

전체 세부정보를 확인하고 포괄적인 노트북을 사용하여 직접 벤치마킹하세요.

측정항목 1: 출력 토큰당 시간 (TPOT)의 중앙값

출력 토큰당 시간 (TPOT)과 동시성을 보여주는 선 그래프로, 낮을수록 좋다는 메모가 있습니다. Y축은 밀리초 단위의 중간 TPOT를 나타내고 X축은 최대 동시성을 나타냅니다. 그래프에는 기준 결과와 EAGLE의 결과를 나타내는 두 개의 선이 표시되어 있으며, 기준 결과가 EAGLE 결과보다 일관되게 높은 점수를 기록합니다. 두 선 모두 그래프의 왼쪽 하단 모서리 근처에서 시작하여 최대 동시성이 증가함에 따라 위쪽으로 추세를 보이며, 기준 결과는 그래프 가장자리를 향해 더 급격한 위쪽 스파이크를 보입니다.

이미지를 확대하려면 클릭하세요

이 차트는 EAGLE-3의 지연 시간 성능이 더 우수함을 보여줍니다. 출력 토큰당 시간 (TPOT) 차트는 테스트된 모든 동시성 수준에서 EAGLE-3 가속 모델 (녹색 선)이 기준 (파란색 선)보다 일관되게 낮은 (빠른) 지연 시간을 달성하는 것을 보여줍니다.

측정항목 2: 출력 처리량

토큰 처리량과 동시성을 보여주는 선 그래프로, 높을수록 좋다는 메모가 있습니다. Y축은 초당 토큰의 처리량을 나타내고 X축은 최대 동시성을 나타냅니다. 그래프에는 기준 결과와 EAGLE의 결과를 나타내는 두 개의 선이 표시됩니다. EAGLE 결과는 기준 결과보다 일관되게 높은 점수를 기록합니다. 두 선 모두 왼쪽 하단에서 시작하여 최대 동시성이 증가함에 따라 위쪽으로 추세를 보이며, EAGLE 결과는 기준 결과보다 더 부드럽고 유의미한 비율로 추세를 보입니다.

이미지를 확대하려면 클릭하세요

이 차트는 EAGLE-3의 처리량 이점을 더욱 강조합니다. 토큰 처리량 대 동시성 차트를 보면 EAGLE-3 가속 모델 (녹색 선)이 기준 모델 (파란색 선)보다 일관되고 실질적으로 우수함을 명확하게 알 수 있습니다.

더 큰 모델에서도 유사한 관찰이 적용되지만 다른 성능 측정항목과 비교했을 때 첫 번째 토큰까지의 시간 (TTFT)이 증가할 수 있습니다. 또한 이러한 성능은 다음 예와 같이 작업에 따라 달라집니다.

기준 모델과 Vertex AI를 사용하여 학습된 EAGLE-3 가속화 모델 간의 카테고리별 출력 속도를 비교하는 막대 그래프 모든 카테고리(코드, 채팅, 긴 컨텍스트, 수학, 다국어)에서 EAGLE-3 모델의 출력 속도는 기준 모델보다 훨씬 높습니다.

이미지를 확대하려면 클릭하세요

결론: 이제 여러분의 차례입니다

EAGLE-3는 단순한 연구 개념이 아니라 디코딩 지연 시간을 2배 단축할 수 있는 프로덕션 지원 패턴입니다. 하지만 확장하려면 실제 엔지니어링 노력이 필요합니다. 사용자를 위해 이 기술을 안정적으로 배포하려면 다음을 충족해야 합니다.

  1. 규정을 준수하는 합성 데이터 파이프라인을 빌드합니다.
  2. 채팅 템플릿과 손실 마스크를 올바르게 처리하고 대규모 데이터 세트에서 모델을 학습합니다.

Vertex AI에서는 LLM 기반 애플리케이션을 확장하도록 설계된 최적화된 컨테이너와 인프라를 제공하여 이 전체 프로세스를 이미 간소화했습니다. 시작하려면 다음 리소스를 확인하세요.

읽어 주셔서 감사합니다.

Vertex AI에 대한 의견과 질문을 환영합니다.

감사의 말씀

이 프로젝트 전반에 걸쳐 귀중한 지원을 제공해 주신 SGLang팀(특히 Ying Sheng, Lianmin Zheng, Yineng Zhang, Xinyuan Tong, Liangsheng Yin)과 SGLang/SpecForge팀(특히 Shenggui Li, Yikai Zhu)에 진심으로 감사드립니다. 이 프로젝트의 성공에 아낌없는 지원과 깊이 있는 기술적 통찰력을 제공해 주셨습니다.