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

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

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

이 초안 메커니즘은 한 번에 여러 개의 다음 토큰을 신속하게 제안합니다. 그러면 대규모 대상 모델은 이러한 제안들을 단일 병렬 배치로 검증합니다. 모델은 자체 예측에서 일치하는 가장 긴 프리픽스를 선택하고, 해당 지점부터 생성을 계속합니다.

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

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

이미지를 확대하려면 클릭

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

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

EAGLE-3의 접근 방식은 수십억 개의 파라미터가 있는 별도의 초안 모델을 학습하고 유지 관리하는 복잡하고 리소스 집약적인 태스크보다 훨씬 효율적입니다. 기존 모델의 일부로 추가되는 가벼운 '초안 헤드'(타겟 모델 크기의 2~5%)만 학습합니다. 이처럼 간단하고 효율적인 학습 프로세스는 Llama 70B와 같은 모델에서 작업 부하 유형(예: 멀티턴, 코드, 긴 텍스트 등)에 따라 디코딩 성능을 2~3배 향상시킵니다.

EAGLE-3 접근 방식을 사용하는 예시를 보여주는 플로우 차트 'San Francisco is'이라는 프롬프트가 여러 레이어가 포함된 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 헤드에 학습 데이터를 제공하는 방법입니다. 크게 두 가지 방식이 있는데, 하나는 임베딩이 '실시간으로 생성되는' 온라인 학습이고, 다른 하나는 '학습 전에 임베딩이 생성되는' 오프라인 학습입니다.

여기에서는 온라인 학습보다 하드웨어가 훨씬 적게 필요한 오프라인 학습을 선택했습니다. 이 과정은 EAGLE-3 헤드를 학습시키기 전에 모든 특성과 임베딩을 미리 계산하는 것을 포함합니다. 계산된 데이터는 GCS에 저장되며 경량형 EAGLE-3 헤드의 학습 데이터로 활용됩니다. 데이터 준비가 완료되면 학습 자체는 신속하게 진행됩니다. EAGLE-3 헤드의 크기가 작기 때문에 초기 학습은 단일 호스트에서 기존 데이터 세트 기준으로 약 하루가 소요되었습니다. 그러나 데이터 세트 규모가 확장됨에 따라 학습 시간도 비례하여 증가하여 현재는 며칠이 소요됩니다.

학습 파이프라인을 보여주는 선형 플로우 차트 토큰화된 프롬프트와 생성된 대답 토큰은 토큰과 특성을 반환하는 타겟 모델로 특징과 임베딩을 생성하는 데 사용됩니다. 이러한 토큰과 특성은 학습된 EAGLE 헤드를 반환하는 초안 모델로 EAGLE 헤드를 학습하는 데 사용됩니다.

이미지를 확대하려면 클릭

이 과정에서 반드시 명심해야 할 두 가지 중요한 교훈을 얻었습니다.

강의 2: 채팅 템플릿은 선택사항이 아님

요청 사항 조정이 적용된 모델을 학습하는 과정에서 채팅 템플릿이 올바르지 않으면 EAGLE-3의 성능이 크게 달라질 수 있다는 것을 확인했습니다. 특성과 임베딩을 생성하기 전에 타겟 모델(예: Llama 3)에 맞는 특정 채팅 템플릿을 반드시 적용해야 합니다. 원시 텍스트를 연결하기만 하면 임베딩이 잘못 생성되며 헤드가 잘못된 분포를 예측하게 됩니다.

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

학습 중 모델에는 프롬프트와 응답 표현이 모두 입력됩니다. 하지만 EAGLE-3 헤드는 대답 표현만 예측하도록 학습해야 합니다. 따라서 손실 함수에서 프롬프트 부분을 수동으로 마스킹해야 합니다. 그렇지 않으면 헤드가 이미 입력된 프롬프트를 예측하는 데 용량을 낭비하게 되어 성능이 저하됩니다.

손실 마스크의 예를 보여주는 다이어그램 'San Francisco is a city known'이라는 문구는 두 부분으로 나뉘는데, 이미 알려진 토큰('San', 'Francisco', 'is')은 손실 마스크에서 0으로 표현되고 예측이 필요한 토큰('a', 'city', 'known')은 손실 마스크에서 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 시간이 엄청나게 낭비됩니다.

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

이미지를 확대하려면 클릭

이 문제는 SGLang의 제로 오버헤드 오버랩 스케줄러를 사용하여 해결했습니다. 이 스케줄러는 추측 디코딩의 다단계 워크플로(초안 -> 검증 -> 초안 확장)에 특화되어 있습니다. 핵심은 계산을 중첩하는 것입니다. GPU가 현재 검증 단계를 실행하는 동안 CPU는 이미 다음 초안초안 확장 단계에 필요한 커널을 병렬로 실행합니다. 이렇게 하면 GPU가 항상 다음 작업을 처리할 수 있도록 FutureMap이라는 스마트 데이터 구조를 활용하여 GPU가 아직 작동 중일 때 CPU가 다음 배치를 준비할 수 있도록 함으로써 유휴 시간을 없앨 수 있습니다.

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

이미지를 확대하려면 클릭

이 CPU 오버헤드를 제거함으로써 오버랩 스케줄러는 전반적인 속도를 10~20% 더 향상시킵니다. 이는 훌륭한 모델만으로는 충분하지 않으며, 그에 걸맞은 런타임이 필요하다는 것을 증명합니다.

벤치마크 결과

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

SGLang 및 Llama 4 Scout 17B Instruct를 사용하여 학습된 EAGLE-3 헤드를 비추측 기준 모델과 비교 벤치마킹했습니다. 벤치마크 결과, 워크로드 유형에 따라 디코딩 지연 시간이 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)에게 진심으로 감사드립니다. 이분들의 아낌없는 도움과 심층적인 기술 인사이트는 본 프로젝트의 성공에 매우 중요한 역할을 했습니다.