RadixAttention과 SGLang을 활용한 LLM 프로그래밍 혁신 (feat. LMSYS)

PyTorchKR​:fire::kr: :thinking::speech_balloon:

  • 이번 글에서는 LLM을 사용하는데 있어 효율성을 높이기 위한 시도 중 하나인 SGLang과 RadixAttention에 대해서 소개하려고 합니다. 복잡한 LLM 작업을 더 빠르고 효율적으로 수행할 수 있도록 하는 시도 중 하나로, 다양한 활용 사례에 적용하여 기존보다 최대 5배 높은 처리가 가능한 것으로 보입니다. SGLang과 RadixAttention이 각각 어떠한 기술들이고, 속도 및 효율성 향상을 위해 어떻게 접근하고 있는지 같이 한 번 살펴보시죠 :thinking:
  • 이 글은 GPT 모델로 정리한 것으로, 잘못된 부분이 있을 수 있으니 글 아래쪽의 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

SGLang과 RadixAttention 소개

SGLang(Structured Generation Language for LLMs)은 LLM를 위해 만들어진 언어로, 파이썬에 내장된 도메인 특화 언어로, 백엔드 런타임 시스템과 프론트엔드 언어를 공동 설계함으로써 LLM과의 상호 작용을 향상시켜 더 빠르고 더 쉽게 제어하는 것을 목표로 합니다. 이 언어는 프롬프트 기술, 제어 흐름, 다중 모달성, 디코딩 제약 조건 및 외부 상호 작용을 쉽게 표현할 수 있으며, SGLang의 함수는 인터프리터 모드 또는 컴파일러 모드로 실행될 수 있으며, 다양한 백엔드에서 실행될 수 있습니다.

RadixAttention은 LLM 호출 시, 자동적이고 및 효율적인 KV 캐시 재사용을 위한 기술입니다. 이는 다양한 KV 캐시 재사용 패턴을 자동으로 수용할 수 있게 함으로써, 복잡한 LLM 프로그램의 실행을 개선합니다. 이 기술은 Radix Tree 구조를 사용하여 효율적인 접두사 검색, 삽입 및 제거를 가능하게 합니다.

SGLang의 주요 기능

SGLang으로 다차원 에세이 평가 구현 예시

프롬프트 및 생성 관리

SGLang은 대규모 언어 모델(LLM)의 프로그래밍을 혁신화하는 데 필수적인 기능을 제공합니다. 이 언어의 문법은 Guidance로부터 많은 영감을 받았으며, 추가로 LLM의 프롬프트 및 생성 관리를 위한 다양한 기본 구성 요소를 포함하고 있습니다. 예를 들어, 'extend'와 'gen', 'select'와 같은 명령어들을 통해 사용자는 LLM의 응답을 조작하고, 특정 부분을 선택하거나 확장하는 등의 복잡한 작업을 쉽게 수행할 수 있습니다. 이러한 기능들은 LLM을 사용하여 다양한 언어 작업을 수행하는 데 있어서 훨씬 더 세밀한 제어를 가능하게 합니다.

병렬 처리 제어

또한, SGLang은 사용자가 직관적으로 복잡한 프롬프팅 전략과 에이전트를 개발할 수 있도록 병렬 처리를 제어하는 기능을 제공합니다. 'fork'와 'join'과 같은 명령어들을 통해 사용자는 LLM 작업을 병렬로 처리하고, 이를 통해 작업의 효율성과 속도를 대폭 향상시킬 수 있습니다. 이는 특히 대규모 데이터를 다루거나 복잡한 작업을 수행할 때 매우 유용하며, LLM의 활용 범위를 크게 확장시킵니다.

SGLang의 프론트엔드 구현 및 동작

  1. 프로그래밍 언어 통합: SGLang은 파이썬의 제어 흐름과 라이브러리와 호환되어, 사용자가 파이썬 구문을 사용하여 직관적으로 LLM 애플리케이션을 개발할 수 있도록 합니다. 사용자는 표준 파이썬 코드와 함께 SGLang의 기능을 사용하여 복잡한 LLM 프로그램을 쉽게 작성할 수 있습니다​​.
  2. 프롬프트 및 생성 관리: SGLang은 프롬프트 및 생성을 조작하기 위한 특수 기능을 제공합니다. 이를 통해 사용자는 LLM의 응답을 보다 세밀하게 조정하고, 특정 부분을 선택하거나 확장할 수 있습니다.
  3. 병렬 처리와 효율성: SGLang은 병렬 처리를 지원하는 구성 요소를 제공하여, 복수의 LLM 작업을 동시에 처리할 수 있도록 합니다. 이는 LLM 작업의 효율성과 속도를 크게 향상시킵니다.

RadixAttention의 주요 기능

KV 캐시 공유 예시 - 파란색은 공유 가능한 프롬프트, 녹색은 공유 할 수 없는 부분, 노란색은 공유할 수 없는 모델의 결과물

자동 캐시 재사용

RadixAttention은 기존 LLM 시스템에서 보이는 한계를 극복하는 중요한 기능을 제공합니다. 일반적으로 LLM 시스템에서는 각 요청의 KV 캐시가 처리가 끝난 후 폐기되어, 여러 생성 호출 간의 재사용이 불가능했습니다. RadixAttention은 이러한 문제를 해결하고, 다양한 재사용 패턴을 효율적으로 지원합니다. 이를 통해 LLM의 성능과 효율성을 크게 향상시킬 수 있으며, 복잡한 프로그램의 실행을 더욱 최적화할 수 있습니다.

캐시 인식 스케줄링 정책

RadixAttention은 캐시 적중률을 높이기 위해 캐시 인식 스케줄링 정책을 사용합니다. 이 정책은 LLM 시스템이 더 많은 데이터를 효율적으로 처리할 수 있도록 도와줍니다. 또한, 이 기술은 LLM 작업의 속도와 정확도를 향상시키는 데 중요한 역할을 합니다. 이러한 방식으로 RadixAttention은 LLM 시스템의 성능을 극대화하며, 다양한 언어 처리 작업에 대한 처리 능력을 향상시킬 수 있습니다.

RadixAttention의 백엔드 구현 및 동작

RadixAttention 동작 예시 - 9단계에 걸친 LRU 소거 정책

  1. KV 캐시 재사용: RadixAttention은 LLM 요청의 KV(Key-Value) 캐시를 radix tree 구조 내에 유지함으로써, 여러 생성 호출에 걸쳐 KV 캐시를 자동으로 재사용할 수 있게 합니다. 이는 기존 시스템에서 볼 수 있는 KV 캐시의 단일 사용 한계를 극복합니다​​.
  2. 효율적인 캐시 관리: 이 시스템은 최근에 사용된 캐시를 기반으로 LRU(Least Recently Used) 캐싱 메커니즘을 사용하여, 다양한 재사용 패턴을 효율적으로 처리할 수 있습니다. 또한 캐시 인식 스케줄링 정책을 통해 캐시 적중률을 높여 전체적인 시스템 성능을 향상시킵니다.

성능 개선

RadixAttention을 백엔드에, SGLang을 프론트엔드에 적용하여 복잡한 LLM 프로그램의 실행 및 개발 효율성을 향상시킬 수 있었습니다. 예를 들어, 에이전트나 추론, 채팅 등과 같은 일반적인 LLM 워크로드 구현 시 SGLang을 사용하였을 때, GuidancevLLM을 사용하는 기존 시스템 대비 최대 5배 높은 처리량(throughput)을 달성하였습니다. (NVIDIA A10G GPU, Llama-7B 및 Mixtral8x7B 모델 사용 시)

더 읽어보기

LMSYS의 SGLang 및 RadixAttention 소개 글

논문: SGLang을 활용한 효율적인 LLM 프로그래밍 (Efficiently Programming Large Language Models using SGLang)

SGLang GitHub 저장소 (SGLang 예시 포함)

Guidance

vLLM

LightLLM

FlashInfer

Outlines

LMQL


:fire:파이토치 한국 사용자 모임:kr:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:gift: 아래:arrow_lower_right:쪽에 좋아요:heart:를 눌러주시면 뉴스 발행에 힘이 됩니다~ :star_struck: