처리량이 5배 증가합니다. 백엔드 시스템과 프런트엔드 언어를 공동 설계하기 위한 LLM 인터페이스가 여기에 있습니다.

PHPz
풀어 주다: 2024-03-01 22:55:13
앞으로
1103명이 탐색했습니다.

대형 언어 모델(LLM)은 다중 체인 생성 호출, 고급 힌트 기술, 제어 흐름 및 외부 환경과의 상호 작용이 필요한 복잡한 작업에 널리 사용됩니다. 그럼에도 불구하고 이러한 애플리케이션을 프로그래밍하고 실행하기 위한 현재의 효율적인 시스템에는 심각한 단점이 있습니다.

연구원들은 최근 LLM과의 상호 작용을 향상시키는 것을 목표로 하는 SGLang이라는 새로운 구조적 생성 언어를 제안했습니다. 백엔드 런타임 시스템과 프런트엔드 언어의 설계를 통합함으로써 SGLang은 LLM의 성능을 더욱 향상시키고 제어하기 쉽게 만듭니다. 이번 연구는 머신러닝 분야의 저명한 학자이자 CMU 조교수인 Chen Tianqi가 진행했습니다.

처리량이 5배 증가합니다. 백엔드 시스템과 프런트엔드 언어를 공동 설계하기 위한 LLM 인터페이스가 여기에 있습니다.

일반적으로 SGLang의 기여는 주로 다음과 같습니다.

  • 백엔드에서 연구팀은 자동적이고 효율적인 여러 LLM 생성 호출 전반에 걸쳐 KV 캐시(KV 캐시) 재사용 기술인 RadixAttention을 제안했습니다.

  • 프런트 엔드 개발에서 팀은 생성 프로세스를 제어하기 위해 Python에 내장할 수 있는 유연한 도메인별 언어를 개발했습니다. 이 언어는 인터프리터 모드 또는 컴파일러 모드에서 실행될 수 있습니다.

백엔드 및 프런트엔드 구성 요소가 함께 작동하여 복잡한 LLM 프로그램의 실행 및 프로그래밍 효율성을 향상시킵니다.

이 연구에서는 SGLang을 사용하여 에이전트, 추론, 추출, 대화 및 소수 학습 작업을 포함한 일반적인 LLM 워크로드를 구현하고 NVIDIA A10G GPU에서 Llama-7B 및 Mixtral-8x7B 모델을 채택합니다. 아래 그림 1과 그림 2에서 볼 수 있듯이 SGLang의 처리량은 기존 시스템(예: Guidance 및 vLLM)에 비해 5배 증가합니다.

처리량이 5배 증가합니다. 백엔드 시스템과 프런트엔드 언어를 공동 설계하기 위한 LLM 인터페이스가 여기에 있습니다.

그림 1: LLM 작업에 대한 다양한 시스템의 처리량(FP16의 A10G, Llama-7B, 텐서 병렬성 = 1)

처리량이 5배 증가합니다. 백엔드 시스템과 프런트엔드 언어를 공동 설계하기 위한 LLM 인터페이스가 여기에 있습니다.

그림 2: LLM 작업에 대한 다양한 시스템의 처리량( Mixtral-8x7B on A10G, FP16, 텐서 병렬성 = 8)

백엔드: RadixAttention을 사용한 자동 KV 캐시 재사용

SGLang 런타임 개발 과정에서 이 연구는 복잡한 LLM 프로그램을 최적화하는 열쇠인 KV 캐시 재사용을 발견했습니다. , 현재 시스템에서는 잘 처리되지 않습니다. KV 캐시 재사용은 동일한 접두어를 가진 여러 프롬프트가 중간 KV 캐시를 공유하여 중복 메모리 및 계산을 피할 수 있음을 의미합니다. 여러 LLM 호출이 포함된 복잡한 프로그램에는 다양한 KV 캐시 재사용 모드가 존재할 수 있습니다. 아래 그림 3은 LLM 워크로드에서 일반적으로 발견되는 4가지 패턴을 보여줍니다. 일부 시스템은 특정 시나리오에서 KV 캐시 재사용을 처리할 수 있지만 수동 구성 및 임시 조정이 필요한 경우가 많습니다. 또한 가능한 재사용 패턴의 다양성으로 인해 기존 시스템은 수동 구성을 통해서도 모든 시나리오에 자동으로 적응할 수 없습니다.

처리량이 5배 증가합니다. 백엔드 시스템과 프런트엔드 언어를 공동 설계하기 위한 LLM 인터페이스가 여기에 있습니다.

그림 3: KV 캐시 공유 예. 파란색 상자는 공유 가능한 프롬프트 부분, 녹색 상자는 공유할 수 없는 부분, 노란색 상자는 공유할 수 없는 모델 출력입니다. 공유할 수 있는 부분에는 소규모 학습 예시, 자기 일관성 질문, 여러 라운드의 대화에 대한 대화 기록, 생각나무의 검색 기록이 포함됩니다.

이러한 재사용 기회를 체계적으로 활용하기 위해 이 연구에서는 런타임 시 자동 KV 캐시 재사용을 위한 새로운 방법인 RadixAttention을 제안합니다. 빌드 요청을 완료한 후 KV 캐시를 삭제하는 대신 이 메서드는 빌드 결과의 프롬프트와 KV 캐시를 기수 트리에 유지합니다. 이 데이터 구조를 통해 효율적인 접두사 검색, 삽입 및 제거가 가능합니다. 본 연구에서는 캐시 적중률을 향상시키기 위해 캐시 인식 스케줄링 정책으로 보완된 LRU(최근 사용) 퇴거 정책을 구현합니다.

기수 트리는 트라이(접두사 트리) 대신 공간을 절약하는 대안으로 사용할 수 있습니다. 일반적인 트리와 달리 기수 트리의 가장자리는 단일 요소뿐만 아니라 다양한 길이의 요소 시퀀스로 표시될 수 있으므로 기수 트리의 효율성이 향상됩니다.

이 연구에서는 키 역할을 하는 토큰 시퀀스와 값 역할을 하는 해당 KV 캐시 텐서 간의 매핑을 관리하기 위해 기수 트리를 활용합니다. 이러한 KV 캐시 텐서는 각 페이지가 토큰 크기인 페이지 레이아웃으로 GPU에 저장됩니다.

GPU 메모리 용량이 제한되어 있고 무제한 KV 캐시 텐서를 재교육할 수 없다는 점을 고려하면 제거 전략이 필요합니다. 본 연구에서는 리프 노드를 재귀적으로 제거하기 위해 LRU 제거 전략을 채택했습니다. 또한 RadixAttention은 연속 일괄 처리 및 페이지 주의와 같은 기존 기술과 호환됩니다. 다중 모드 모델의 경우 RadixAttention을 쉽게 확장하여 이미지 토큰을 처리할 수 있습니다.

아래 다이어그램은 여러 수신 요청을 처리할 때 기수 트리가 유지되는 방법을 보여줍니다. 프런트 엔드는 항상 전체 프롬프트를 런타임에 보내고 런타임은 자동으로 접두사 일치, 재사용 및 캐싱을 수행합니다. 트리 구조는 CPU에 저장되며 유지 관리 오버헤드가 낮습니다.

처리량이 5배 증가합니다. 백엔드 시스템과 프런트엔드 언어를 공동 설계하기 위한 LLM 인터페이스가 여기에 있습니다.

그림 4. LRU 제거 정책을 사용한 RadixAttention 작업 예를 9단계로 설명합니다.

그림 4는 다양한 요청에 대한 응답으로 기수 트리가 역동적으로 진화하는 모습을 보여줍니다. 이러한 요청에는 두 개의 채팅 세션, 일련의 퓨샷 학습 쿼리 및 일관된 샘플링이 포함됩니다. 각 트리 가장자리에는 하위 문자열 또는 토큰 시퀀스를 나타내는 레이블이 지정됩니다. 노드는 다양한 상태를 반영하기 위해 색상으로 구분됩니다. 녹색은 새로 추가된 노드를 나타내고, 파란색은 해당 시점에 액세스된 캐시된 노드를 나타내고, 빨간색은 제거된 노드를 나타냅니다.

프런트엔드: SGLang으로 LLM 프로그래밍이 쉬워졌습니다

프론트엔드에서 연구는 고급 프롬프트 기술, 제어 흐름, 다중 양식을 표현할 수 있는 Python에 내장된 도메인별 언어인 SGLang을 제안합니다. , 제약 조건 및 외부 상호 작용을 디코딩합니다. SGLang 기능은 OpenAI, Anthropic, Gemini, 네이티브 모델 등 다양한 백엔드를 통해 실행될 수 있습니다.

처리량이 5배 증가합니다. 백엔드 시스템과 프런트엔드 언어를 공동 설계하기 위한 LLM 인터페이스가 여기에 있습니다.

그림 5. SGLang을 사용하여 다차원 기사 채점 구현.

그림 5는 구체적인 예를 보여줍니다. 다차원 기사 채점을 달성하기 위해 분기-해결-병합 프롬프트 기술을 활용합니다. 이 기능은 LLM을 사용하여 여러 측면에서 기사의 품질을 평가하고, 판단을 결합하고, 요약을 생성하고, 최종 등급을 할당합니다. 강조 표시된 영역은 SGLang API의 사용을 보여줍니다. (1) 포크는 프롬프트의 여러 병렬 복사본을 생성합니다. (2) gen은 LLM 생성을 호출하고 결과를 변수에 저장합니다. 이 호출은 비차단 호출이므로 여러 빌드 호출이 백그라운드에서 동시에 실행될 수 있습니다. (3) [variable_name]은 생성된 결과를 검색합니다. (4) 세대에 제한을 가하도록 선택합니다. (5) run은 해당 매개변수를 사용하여 SGLang 함수를 실행합니다.

이런 SGLang 프로그램이 있으면 인터프리터를 통해 실행하거나 데이터 흐름 그래프로 추적하고 그래프 실행기를 사용하여 실행할 수 있습니다. 후자의 경우 코드 이동, 명령 선택 및 자동 조정과 같은 일부 잠재적인 컴파일러 최적화를 위한 공간이 열립니다.

SGLang의 구문은 Guidance에서 크게 영감을 받았으며 새로운 기본 요소를 도입하고 절차 내 병렬 처리 및 일괄 처리도 처리합니다. 이러한 모든 새로운 기능은 SGLang의 뛰어난 성능에 기여합니다.

벤치마크

연구팀은 일반적인 LLM 워크로드에서 시스템을 테스트하고 달성된 처리량을 보고했습니다.

구체적으로, 연구에서는 FP16 정확도를 사용하고 vllm v0 .2.5, Guidance v0.1.8 및 Hugging Face TGI v1을 사용하여 텐서 병렬 처리를 갖춘 1개의 NVIDIA A10G GPU(24GB)에서 Llama-7B, 8개의 NVIDIA A10G GPU에서 Mixtral-8x7B를 테스트했습니다. .3.0을 기본 시스템으로 사용합니다.

그림 1과 그림 2에 표시된 것처럼 SGLang은 처리량이 5배 증가하여 모든 벤치마크에서 기본 시스템보다 성능이 뛰어납니다. 또한 대기 시간 측면에서도 좋은 성능을 발휘하며, 특히 접두사 캐시 적중이 상당한 이점을 가져올 수 있는 첫 번째 토큰 대기 시간의 경우 더욱 그렇습니다. 이러한 개선은 RadixAttention의 자동 KV 캐시 재사용, 인터프리터를 통해 지원되는 프로그램 내 병렬 처리, 프런트엔드 및 백엔드 시스템의 공동 설계 덕분입니다. 또한 제거 연구에 따르면 캐시 적중이 없는 경우에도 런타임에 RadixAttention이 항상 활성화되는 심각한 오버헤드가 없는 것으로 나타났습니다.

참고링크: https://lmsys.org/blog/2024-01-17-sglang/

위 내용은 처리량이 5배 증가합니다. 백엔드 시스템과 프런트엔드 언어를 공동 설계하기 위한 LLM 인터페이스가 여기에 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:jiqizhixin.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿