PyTorchKR


- 이번 글에서는 LLM을 사용하는데 있어 효율성을 높이기 위한 시도 중 하나인 SGLang과 RadixAttention에 대해서 소개하려고 합니다. 복잡한 LLM 작업을 더 빠르고 효율적으로 수행할 수 있도록 하는 시도 중 하나로, 다양한 활용 사례에 적용하여 기존보다 최대 5배 높은 처리가 가능한 것으로 보입니다. SGLang과 RadixAttention이 각각 어떠한 기술들이고, 속도 및 효율성 향상을 위해 어떻게 접근하고 있는지 같이 한 번 살펴보시죠
- 이 글은 GPT 모델로 정리한 것으로, 잘못된 부분이 있을 수 있으니 글 아래쪽의 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다.
SGLang과 RadixAttention 소개
SGLang(Structured Generation Language for LLMs)은 LLM를 위해 만들어진 언어로, 파이썬에 내장된 도메인 특화 언어로, 백엔드 런타임 시스템과 프론트엔드 언어를 공동 설계함으로써 LLM과의 상호 작용을 향상시켜 더 빠르고 더 쉽게 제어하는 것을 목표로 합니다. 이 언어는 프롬프트 기술, 제어 흐름, 다중 모달성, 디코딩 제약 조건 및 외부 상호 작용을 쉽게 표현할 수 있으며, SGLang의 함수는 인터프리터 모드 또는 컴파일러 모드로 실행될 수 있으며, 다양한 백엔드에서 실행될 수 있습니다.
RadixAttention은 LLM 호출 시, 자동적이고 및 효율적인 KV 캐시 재사용을 위한 기술입니다. 이는 다양한 KV 캐시 재사용 패턴을 자동으로 수용할 수 있게 함으로써, 복잡한 LLM 프로그램의 실행을 개선합니다. 이 기술은 Radix Tree 구조를 사용하여 효율적인 접두사 검색, 삽입 및 제거를 가능하게 합니다.
SGLang의 주요 기능
프롬프트 및 생성 관리
SGLang은 대규모 언어 모델(LLM)의 프로그래밍을 혁신화하는 데 필수적인 기능을 제공합니다. 이 언어의 문법은 Guidance로부터 많은 영감을 받았으며, 추가로 LLM의 프롬프트 및 생성 관리를 위한 다양한 기본 구성 요소를 포함하고 있습니다. 예를 들어, 'extend'와 'gen', 'select'와 같은 명령어들을 통해 사용자는 LLM의 응답을 조작하고, 특정 부분을 선택하거나 확장하는 등의 복잡한 작업을 쉽게 수행할 수 있습니다. 이러한 기능들은 LLM을 사용하여 다양한 언어 작업을 수행하는 데 있어서 훨씬 더 세밀한 제어를 가능하게 합니다.
병렬 처리 제어
또한, SGLang은 사용자가 직관적으로 복잡한 프롬프팅 전략과 에이전트를 개발할 수 있도록 병렬 처리를 제어하는 기능을 제공합니다. 'fork'와 'join'과 같은 명령어들을 통해 사용자는 LLM 작업을 병렬로 처리하고, 이를 통해 작업의 효율성과 속도를 대폭 향상시킬 수 있습니다. 이는 특히 대규모 데이터를 다루거나 복잡한 작업을 수행할 때 매우 유용하며, LLM의 활용 범위를 크게 확장시킵니다.
SGLang의 프론트엔드 구현 및 동작
- 프로그래밍 언어 통합: SGLang은 파이썬의 제어 흐름과 라이브러리와 호환되어, 사용자가 파이썬 구문을 사용하여 직관적으로 LLM 애플리케이션을 개발할 수 있도록 합니다. 사용자는 표준 파이썬 코드와 함께 SGLang의 기능을 사용하여 복잡한 LLM 프로그램을 쉽게 작성할 수 있습니다.
- 프롬프트 및 생성 관리: SGLang은 프롬프트 및 생성을 조작하기 위한 특수 기능을 제공합니다. 이를 통해 사용자는 LLM의 응답을 보다 세밀하게 조정하고, 특정 부분을 선택하거나 확장할 수 있습니다.
- 병렬 처리와 효율성: SGLang은 병렬 처리를 지원하는 구성 요소를 제공하여, 복수의 LLM 작업을 동시에 처리할 수 있도록 합니다. 이는 LLM 작업의 효율성과 속도를 크게 향상시킵니다.
RadixAttention의 주요 기능
자동 캐시 재사용
RadixAttention은 기존 LLM 시스템에서 보이는 한계를 극복하는 중요한 기능을 제공합니다. 일반적으로 LLM 시스템에서는 각 요청의 KV 캐시가 처리가 끝난 후 폐기되어, 여러 생성 호출 간의 재사용이 불가능했습니다. RadixAttention은 이러한 문제를 해결하고, 다양한 재사용 패턴을 효율적으로 지원합니다. 이를 통해 LLM의 성능과 효율성을 크게 향상시킬 수 있으며, 복잡한 프로그램의 실행을 더욱 최적화할 수 있습니다.
캐시 인식 스케줄링 정책
RadixAttention은 캐시 적중률을 높이기 위해 캐시 인식 스케줄링 정책을 사용합니다. 이 정책은 LLM 시스템이 더 많은 데이터를 효율적으로 처리할 수 있도록 도와줍니다. 또한, 이 기술은 LLM 작업의 속도와 정확도를 향상시키는 데 중요한 역할을 합니다. 이러한 방식으로 RadixAttention은 LLM 시스템의 성능을 극대화하며, 다양한 언어 처리 작업에 대한 처리 능력을 향상시킬 수 있습니다.
RadixAttention의 백엔드 구현 및 동작
- KV 캐시 재사용: RadixAttention은 LLM 요청의 KV(Key-Value) 캐시를 radix tree 구조 내에 유지함으로써, 여러 생성 호출에 걸쳐 KV 캐시를 자동으로 재사용할 수 있게 합니다. 이는 기존 시스템에서 볼 수 있는 KV 캐시의 단일 사용 한계를 극복합니다.
- 효율적인 캐시 관리: 이 시스템은 최근에 사용된 캐시를 기반으로 LRU(Least Recently Used) 캐싱 메커니즘을 사용하여, 다양한 재사용 패턴을 효율적으로 처리할 수 있습니다. 또한 캐시 인식 스케줄링 정책을 통해 캐시 적중률을 높여 전체적인 시스템 성능을 향상시킵니다.
성능 개선
RadixAttention을 백엔드에, SGLang을 프론트엔드에 적용하여 복잡한 LLM 프로그램의 실행 및 개발 효율성을 향상시킬 수 있었습니다. 예를 들어, 에이전트나 추론, 채팅 등과 같은 일반적인 LLM 워크로드 구현 시 SGLang을 사용하였을 때, Guidance 및 vLLM을 사용하는 기존 시스템 대비 최대 5배 높은 처리량(throughput)을 달성하였습니다. (NVIDIA A10G GPU, Llama-7B 및 Mixtral8x7B 모델 사용 시)
더 읽어보기
LMSYS의 SGLang 및 RadixAttention 소개 글
논문: SGLang을 활용한 효율적인 LLM 프로그래밍 (Efficiently Programming Large Language Models using SGLang)
SGLang GitHub 저장소 (SGLang 예시 포함)
https://github.com/sgl-project/sglang
Guidance
https://github.com/guidance-ai/guidance
vLLM
https://github.com/vllm-project/vllm
LightLLM
https://github.com/ModelTC/lightllm
FlashInfer
https://github.com/flashinfer-ai/flashinfer
Outlines
https://github.com/outlines-dev/outlines
LMQL
https://github.com/eth-sri/lmql
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 뉴스 발행에 힘이 됩니다~