์ธ๊ณต์ง๋ฅ
SGLang: ๊ตฌ์กฐํ๋ ์ธ์ด ๋ชจ๋ธ ํ๋ก๊ทธ๋จ์ ํจ์จ์ ์ธ ์คํ
대규모 언어 모델(Large Language Models, LLM)은 복잡한 작업을 위해 여러 생성 호출, 고급 프롬프트 기술, 제어 흐름, 구조화된 입력/출력이 필요한 작업에서 점점 더 많이 사용되고 있습니다. 그러나 이러한 응용 프로그램을 프로그래밍하고 실행하는 효율적인 시스템은 부족합니다. SGLang이라는 새로 소개된 시스템은 효율적인 프론트엔드 언어와 런타임을 제공함으로써 이러한 문제를 해결합니다. SGLang은 구조화된 언어 모델 프로그램의 효율적인 실행을 제공합니다. SGLang은 프론트엔드 언어와 런타임으로 구성됩니다. 프론트엔드는 생성과 병렬성 제어를 위한 원시 함수를 제공하여 프로그래밍을 단순화하고, 런타임은 RadixAttention과 같은 새로운 최적화를 통해 실행을 가속화합니다. 실험 결과는 SGLang이 다양한 대규모 언어 및 멀티모달 모델에서 상태 오프-the-아트 추론 시스템에 비해 최대 6.4배 높은 처리량을 달성한다는 것을 보여줍니다.
최근의 LLM 능력의 발전은 그들의 유용성을 확대하여 더广い 범위의 일반 작업을 처리하고 자율 에이전트로 작동할 수 있게 했습니다. 이러한 응용 프로그램에서 LLM은 외부 환경과 상호 작용하는 다중 라운드 계획, 추론, 도구 사용, 여러 입력 모달리티 및 다양한 프롬프트 기술(예: few-shot 학습, 자기 일관성, 스켈레톤-오브-사고, 트리-오브-사고)을 통해 다중 생성 호출을 필요로 합니다. 이러한 새로운 사용 사례는 복잡한 작업을 완료하기 위해 종종 의존하는 여러 LLM 생성 호출을 필요로 하므로 다중 호출 구조를 사용하는 경향이 있습니다.
이 전환은 단순한 채팅에서 더 소피스틱한 프로그래밍 방식의 LLM 사용으로 표시되며, 여기서 프로그램은 LLM의 생성 프로세스를 예약하고 제어합니다. 이러한 프로그램은 “언어 모델 프로그램”으로 참조됩니다. 고급 프롬프트 기술과 에이전트 워크플로는 LM 프로그램의 범위에 속합니다. LM 프로그램에는 두 가지 공통 속성이 있습니다. (1) LM 프로그램은 일반적으로 복잡한 작업을 완료하고 전체 품질을 향상시키기 위해 제어 흐름과 함께 여러 LLM 호출을 포함합니다. (2) LM 프로그램은 구조화된 입력을 받고 구조화된 출력을 생성하여 LM 프로그램의 구성과 기존 소프트웨어 시스템との 통합을 가능하게 합니다.
이 기사에서는 SGLang 프레임워크에 대해 더 깊이 있는 탐구를 하여, 그 아키텍처를 탐색하고, 그 성능을 분석하며, 상태 오프-the-아트 프레임워크와 비교합니다. 그래서 시작해 봅시다.
SGLang 소개
LM 프로그램의 광범위한 사용에도 불구하고, 현재 시스템은 효율적으로 그들을 표현하고 실행하는 데 부족합니다. SGLang은 두 가지 주요 도전을 식별합니다.
- 프로그래밍 복잡성: LM 프로그램을 개발하는 것은 LLM의 비결정성으로 인해 번거롭고 어렵습니다. 이것은 광범위한 문자열 조작, 프롬프트의 실험적 조정, 취약한 출력 파싱, 여러 입력 모달리티의 처리 및 병렬성 메커니즘의 구현을 포함합니다. 이 복잡성은 심지어 간단한 프로그램의 가독성을 크게 줄입니다.
- 실행 비효율성: LM 프로그램을 실행하는 것은 중복된 계산과 메모리 사용으로 인해 비효율적입니다. 상태 오프-the-아트 추론 엔진은 대기 시간을 줄이고 처리량을 개선하기 위해 최적화되었지만, 작업에 대한 직접적인 지식이 없기 때문에 상당한 비효율성을 초래합니다. 예를 들어, 생성적 추론에 필수적인 재사용 가능한 중간 텐서로 구성된 Key-Value(KV) 캐시의 재사용은 현재 시스템에서 효과적인 메커니즘을缺乏합니다. 또한, 구조화된 출력(예: JSON 모드)의 제한된 디코딩은 기존 시스템에서 최적화되지 않습니다.
이러한 도전을 해결하기 위해 SGLang은 LLM을 위한 구조화된 생성 언어를 도입합니다. 핵심 아이디어는 LM 프로그램의 다중 호출 구조를 효율적인 실행을 위해 체계적으로 활용하는 것입니다. 다음 그림에서 보여지듯이, SGLang에는 두 가지 부분이 있습니다. 프론트엔드 언어와 백엔드 런타임입니다.

프론트엔드는 LM 프로그램의 프로그래밍을 단순화하고, 런타임은 실행을 가속화합니다. 이러한 부분은 함께 더 나은 성능을 위해 작동하거나 독립적으로 작동할 수 있습니다.
SGLang은 Python에 내장된 도메인 특화 언어로, 생성(예: extend, gen, select) 및 병렬성 제어(예: fork, join)를 위한 원시 함수를 제공합니다. Python의 제어 흐름 및 라이브러리와 호환되므로 사용자가 원시 Python 구문으로 쉽게 고급 프롬프트 워크플로를 개발할 수 있습니다. SGLang에는 인터프리터와 컴파일러가 포함되어 있습니다. 인터프리터는 프롬프트 상태를 스트림으로 관리하고, 비동기 실행을 위해 원시 연산을 스트림에 제출하여 동기화 및 프로그램 내 병렬성에 대한 적절한 제어를 보장합니다. 또한, SGLang 프로그램은 추적되고 컴파일되어 추가 최적화를 위해 컴퓨팅 그래프로 실행할 수 있습니다.
… (rest of the translation remains the same, following the exact structure and format as the original)












