SGLang 의 Transformers 백엔드 통합
요약
SGLang이 Hugging Face transformers 라이브러리를 백엔드로 공식 통합하여, 개발자들이 기존의 유연한 transformers 생태계를 유지하면서도 고성능 추론 환경을 구축할 수 있게 되었습니다. 이 통합을 통해 SGLang은 자체적으로 지원하지 않는 다양한 커스텀 모델이나 최신 트렌드의 모델(예: Kyutai Helium)까지 자동으로 처리하여, 임베디드 및 프로덕션 환경에서 일관된 고성능 추론 경험을 제공합니다. 특히, SGLang의 핵심 강점인 RadixAttention과 같은 메모리 효율적인 메커니즘을 활용하면서도 transformers의 광범위한 호환성을 확보함으로써, 개발자는 모델 선택의 폭을 넓히고 엔지니어링 오버헤드를 크게 줄일 수 있습니다.
핵심 포인트
- SGLang이 Hugging Face transformers를 백엔드로 통합하여 호환성과 성능을 동시에 확보했습니다.
- 통합 덕분에 SGLang은 자체 지원하지 않는 커스텀 모델이나 최신 트렌드의 다양한 모델(예: Kyutai Helium)도 쉽게 실행할 수 있습니다.
- transformers의 유연성(실험, 소규모 작업에 적합)과 SGLang의 고효율 추론 성능(고 부하, 저 지연 시나리오에 최적화)을 결합했습니다.
- SGLang은 OpenAI 호환 API를 제공하며, `impl="transformers"` 설정을 통해 모델 구현 방식을 명시적으로 제어할 수 있습니다.
- 향후 계획으로는 네이티브 성능 격차 해소, LoRA 지원, 그리고 VLM(Vision-Language Models) 통합 등이 예정되어 있습니다.
하지만 노브북에서 프로덕션으로 이동할 준비가 되면 추론 성능은 임무 결정적 (mission-critical) 입니다. 이것이 바로 SGLang 이 등장한 이유입니다.
고 트루풋, 저 지연 추론을 위해 설계된 SGLang 은 이제 transformers 를 백엔드로 원활하게 통합합니다. 이는 transformers 의 유연성과 SGLang 의 원시 성능을 함께 사용할 수 있음을 의미합니다.
이 통합이 가능하게 하는 내용과 어떻게 사용할 수 있는지 살펴보겠습니다.
SGLang 은 이제 Hugging Face transformers 를 백엔드로 지원하여, 고품질 추론으로 바로 임베디드할 수 있는 transformers 호환 모델을 실행할 수 있게 합니다.
import sglang as sgl
llm = sgl.Engine("meta-llama/Llama-3.2-1B-Instruct", impl="transformers")
print(llm.generate(["The capital of France is"], {"max_new_tokens": 20})[0])
원래 지원이 필요 없습니다 — SGLang 은 필요할 때 자동으로 Transformers 로 전환하거나, impl="transformers" 를 명시적으로 설정할 수 있습니다.
meta-llama/Llama-3.2-1B-Instruct 를 사용하여 두 접근법을 비교하는 간단한 텍스트 생성 예제를 살펴보겠습니다.
transformers 라이브러리는 실험, 소규모 작업 및 훈련에 뛰어납니다. 하지만 고 부하 또는 저 지연 시나리오에는 최적화되지 않았습니다.
from transformers import pipeline
pipe = pipeline("text-generation", model="meta-llama/Llama-3.2-1B-Instruct")
generate_kwargs = {
...
SGLang 은 효율성을 최우선으로 하는 다른 접근법을 취합니다. RadixAttention (메모리 효율적인 attention 메커니즘) 과 같은 기능을 통해 추론 속도가 눈에 띄게 빨라지고 자원 효율성이 향상됩니다. 특히 부하가 있을 때 더 그렇습니다. SGlang 에서 오프라인 엔진을 사용하여 동일한 작업을 수행하는 방법은 다음과 같습니다:
import sglang as sgl
if __name__ == '__main__':
llm = sgl.Engine(model_path="meta-llama/Llama-3.2-1B-Instruct")
...
또는 서버를 시작하고 요청을 보낼 수도 있습니다:
python3 -m sglang.launch_server \
--model-path meta-llama/Llama-3.2-1B-Instruct \
--host 0.0.0.0 \
...
response = requests.post(
"http://localhost:30000/generate",
json={
...
SGLang 은 또한 OpenAI 호환 API 를 제공하여 외부 서비스와의 교체로 쉽게 사용할 수 있습니다.
새로운 transformers 백엔드 통합으로 SGLang 은 이제 자체적으로 지원하지 않는 transformers 모델을 자동으로 사용하도록 전환할 수 있습니다. 이는 실제로 다음을 의미합니다:
- transformers 에 추가된 새로운 모델에 대한 즉시 액세스
- Hugging Face Hub 에서 커스텀 모델 지원
- 엔지니어링 오버헤드 감소
이를 통해 transformers 생태계의 단순성과 다용도성을 희생하지 않으면서 더 빠른 추론 및 최적화된 배포 (예: RadixAttention 활성화) 를 가능하게 합니다.
llm = sgl.Engine(model_path="meta-llama/Llama-3.2-1B-Instruct", impl="transformers")
impl 파라미터를 지정하는 것은 선택 사항입니다. SGLang 이 자체적으로 지원하지 않는 모델의 경우 transformers 구현으로 전환합니다.
Hugging Face Hub 의 transformers 를 사용하여 작동하는 모든 모델은 trust_remote_code=True 를 사용하고 attention 을 올바르게 구현하면 SGLang 과 호환됩니다. 정확한 요구 사항은 공식 문서에서 찾을 수 있습니다. 커스텀 모델이 이 기준을 충족하는 경우, 모든 것이 필요한 것은 로드할 때 trust_remote_code=True 를 설정하는 것입니다.
llm = sgl.Engine(model_path="new-custom-transformers-model", impl="transformers", trust_remote_code=True)
Kyutai 팀의 Helium 은 아직 SGLang 의 자체 지원이 없습니다. 이것이 transformers 백엔드가 빛을 발하는 곳이며, 자체 지원 대기 없이 최적화된 추론을 가능하게 합니다.
python3 -m sglang.launch_server
--model-path kyutai/helium-1-preview-2b
--impl transformers
...
response = requests.post(
"http://localhost:30000/generate",
json={
...
}
)
이 통합을 개선하기 위해 현재 활발히 작업 중인 몇 가지 핵심 영역은 다음과 같습니다:
성능 개선 (Performance Improvements): 현재 transformer 모델의 성능은 네이티브 통합에 비해 뒤처지고 있습니다. 우리는 이 격차를 최적화하고 좁히는 것이 주요 목표입니다.
LoRA 지원
VLM 통합: 우리는 또한 범용성과 사용 사례를 확대하기 위해 Vision-Language Models (VLM) 을 추가하는 작업을 진행 중입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Hugging Face Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기