콘텐츠로 이동

6.7. SGLang 가속

개발 중

이 기능은 현재 활발히 개발 중입니다. 정식 릴리즈 버전에는 포함되지 않았거나 기능이 제한적일 수 있습니다.

SGLang은 대규모 언어 모델을 위한 빠른 서빙 엔진으로, vLLM처럼 OpenAI 호환이지만 운영상 강점이 다릅니다. GPU 컨테이너로 실행되며 NVIDIA GPU에서 전체 Hugging Face safetensors 저장소를 서빙합니다.

SGLang이란 무엇인가요?

  • 저장소: github.com/sgl-project/sglang

  • 핵심 혁신: RadixAttention. 프롬프트 접두사를 공유하는 요청들 사이에서 KV 캐시를 재사용하는 자동 접두사 캐시입니다.

주요 이점

  • 자동 접두사 캐싱: RadixAttention은 요청 간에 공유되는 프롬프트 접두사를 재사용하여, 긴 시스템 프롬프트나 유사한 요청이 많은 작업(에이전트, few-shot 프롬프팅, 멀티턴 채팅)의 속도를 높입니다.

  • 구조화된 출력: 제약 디코딩(JSON Schema, 정규식, EBNF)을 기본 지원하므로, 요청이 스키마를 준수하는 유효한 출력을 반환하도록 보장할 수 있습니다.

  • OpenAI 호환 API: /v1/chat/completions, /v1/completions, /v1/models를 노출하므로, 채팅 UI와 관리 API가 vLLM과 동일한 방식으로 통신합니다.

Backend.AI GO에서의 역할

SGLang은 vLLM과 나란히 NVIDIA GPU 사용자(Linux 또는 Windows WSL 환경)를 위한 컨테이너 엔진으로 자리합니다. Hugging Face safetensors 저장소의 기본 엔진은 vLLM이며, SGLang은 접두사 캐싱이나 구조화된 출력 강점이 작업에 맞을 때 직접 선택하는 대안입니다.

참고: Backend.AI GO의 SGLang 지원은 현재 베타(Beta) 상태입니다.

언제 SGLang을 사용해야 하나요?

다음과 같은 경우 SGLang을 고려해보세요:

  1. 요청들이 프롬프트 접두사를 공유할 때: 크고 안정적인 시스템 프롬프트를 쓰는 에이전트나 채팅 세션이 RadixAttention의 자동 접두사 캐싱에서 가장 큰 이점을 얻습니다.

  2. 유효성이 보장된 구조화된 출력이 필요할 때: SGLang의 제약 디코딩(JSON Schema / 정규식 / EBNF)은 지정한 스키마를 준수하는 출력을 반환합니다.

  3. VRAM이 넉넉한 NVIDIA GPU 보유: vLLM과 마찬가지로 SGLang은 RTX 5090 (32GB), 전문가용 RTX Pro 6000 (96GB), 또는 DGX Spark (GB10, 128GB) 워크스테이션을 대상으로 합니다.

호스트 요구 사항

SGLang은 Linux 컨테이너 안에서 실행되므로, 엔진 페이지는 SGLang 옵션을 제공하기 전에 vLLM과 동일한 준비 상태 확인을 수행합니다.

확인 항목:

  • Docker(또는 지원되는 다른 컨테이너 런타임)의 설치 여부.
  • GPU를 컨테이너에 전달할 수 있는지 여부 (NVIDIA와 AMD GPU는 가능하며, Apple Metal과 Intel GPU는 불가능합니다).
  • 선택한 모델이 사용 가능한 VRAM에 맞는지 여부.

차단 조건이 발견되면, 엔진 페이지는 알기 쉬운 설명과 단계별 해결 방법이 포함된 배너를 표시합니다. 조건이 해결될 때까지 해당 옵션은 비활성화됩니다.

macOS 사용자

컨테이너 엔진은 Linux 환경이 필요하며 Mac GPU를 사용할 수 없습니다. macOS에서 Backend.AI GO는 vLLM과 SGLang을 자동으로 차단하고 대신 네이티브 MLX 엔진을 권장합니다.

지원 모델 형식

SGLang은 Hugging Face 표준 형식, 즉 일반적인 .safetensors 가중치(단일 GGUF 파일이 아닌 전체 저장소)를 직접 지원합니다. vLLM이 서빙하는 것과 동일한 safetensors-repo 형식입니다.

Backend.AI GO가 SGLang을 실행하는 방식

컨테이너 실행은 Backend.AI GO가 담당하므로 docker run을 직접 실행할 필요가 없습니다. 다운로드한 Hugging Face safetensors 저장소를 SGLang 엔진으로 시작하면 Backend.AI GO는 다음을 수행합니다:

  1. 처음 사용할 때 lmsysorg/sglang 이미지를 받아옵니다. vLLM 이미지처럼 크기가 커서 첫 시작에서는 이미지를 받고 준비하는 데 시간이 걸린 뒤에 모델이 로드됩니다. 이후 시작에서는 캐시된 이미지를 재사용합니다.

  2. GPU 전달(--gpus all), 큰 공유 메모리 영역(--shm-size 32g, SGLang은 vLLM의 --ipc=host 대신 이 방식을 사용합니다), 읽기 전용으로 마운트한 모델, 루프백에 게시한 호스트 포트로 컨테이너를 실행합니다. SGLang의 컨테이너 내부 포트는 30000입니다(vLLM은 8000을 사용합니다).

  3. 서버를 Python 모듈 python3 -m sglang.launch_server로 실행하며, 라우팅을 올바르게 유지하는 플래그를 설정합니다:

    • --served-model-name을 라우터가 노출하는 별칭과 맞춰, 모델 id로 보낸 요청이 엔진에 도달합니다.
    • --trust-remote-code로 커스텀 모델링 코드가 있는 저장소를 로드할 수 있게 합니다.

    SGLang의 도구 호출 파서는 모델별로 다르며(qwen25, llama3, mistral 등) 보편적인 기본값이 없으므로, Backend.AI GO는 자동으로 하나를 활성화하지 않습니다. 특정 모델의 도구 호출 활성화는 내장 매니페스트를 재정의하는 다운로드 엔진 변형으로 처리합니다.

컨테이너가 /health에서 정상으로 보고하면 Backend.AI GO가 자체 호스팅 OpenAI 호환 백엔드(라우터의 generic 백엔드 타입으로, 라우터 관리 웹 검색이 계속 적용되고 모델 소유자가 재지정되지 않습니다)로 라우터에 등록합니다. 그러면 모델은 채팅 UI와 관리 API 모두에서 /v1/chat/completions에 응답합니다. 모델을 중지하면 컨테이너를 정리하고 경로 등록을 해제합니다. 예기치 않은 충돌도 같은 방식으로 회수하므로 끊긴 경로가 남지 않습니다.


SGLang은 자동 접두사 캐싱과 보장된 구조화된 출력을 여러분의 고성능 NVIDIA 워크스테이션으로 가져옵니다.