vLLM의 진화와 Upstage Solar-Open-100B 서빙 최적화 가이드
vLLM의 진화와 Upstage Solar-Open-100B 서빙 최적화 가이드
대규모 언어 모델(LLM)의 파라미터가 수천억 개 단위로 커지면서, 모델을 학습시키는 것만큼이나 효율적으로 서빙(Serving)하는 것이 중요한 기술적 과제가 되었습니다. 특히 Mixture-of-Experts (MoE) 아키텍처와 복잡한 에이전트 기능을 갖춘 모델들은 범용 추론 엔진만으로는 성능을 100% 이끌어내기 어렵습니다.
이번 포스트에서는 LLM 서빙의 혁명이라 불리는 vLLM 의 역사와 핵심 기술을 살펴보고, Upstage가 자사의 플래그십 모델인 Solar-Open-100B 를 위해 vLLM을 어떻게 커스터마이징(v0.12.0-solar-open)하여 엔터프라이즈급 기능을 구현했는지 심층 분석합니다.
1. vLLM: 메모리 병목을 해결한 Game Changer
UC Berkeley SkyLab에서의 탄생
vLLM(Virtual Large Language Model) 프로젝트는 UC Berkeley의 Sky Computing Lab 에서 시작되었습니다. 기존의 LLM 서빙 시스템(HuggingFace Transformers 등)은 텍스트 생성 시 KV 캐시(Key-Value Cache) 메모리를 비효율적으로 관리하여 GPU 메모리 낭비가 심각했습니다. 이는 동시 처리량(Throughput)을 저하시키는 주된 원인이었습니다.
핵심 기술: PagedAttention
vLLM의 핵심은 운영체제(OS)의 가상 메모리 관리 기법에서 영감을 받은 PagedAttention 알고리즘입니다.
작동 원리: KV 캐시를 연속된 메모리 공간에 할당하는 대신, 고정된 크기의 '블록'으로 나누어 비연속적인 메모리 공간에 저장합니다.
효과: 메모리 단편화(Fragmentation)를 거의 제로에 가깝게 줄이고(near-zero waste), 동일한 프롬프트에 대한 메모리 공유를 가능하게 하여 처리량을 기존 대비 2~4배 향상시켰습니다.
이러한 혁신 덕분에 vLLM은 현재 가장 널리 사용되는 오픈소스 LLM 추론 엔진으로 자리 잡았으며, 연속 배칭(Continuous Batching), 양자화(GPTQ, AWQ, FP8) 등 다양한 최신 기능을 지속적으로 통합하고 있습니다.
2. Upstage Solar-Open-100B와 커스텀 포크의 필요성
Upstage가 공개한 Solar-Open-100B 는 1026억(102.6B) 개의 파라미터를 가진 대형 모델로, Mixture-of-Experts (MoE) 아키텍처를 채택했습니다.
왜 공식 vLLM이 아닌 포크(Fork) 버전을 쓰는가?
공식 vLLM도 MoE를 지원하지만, Solar-Open-100B는 다음과 같은 독특한 구조적 특징과 요구사항을 가지고 있어 별도의 최적화가 필요했습니다.
독특한 MoE 라우팅: 일반적인 MoE와 달리 128개의 라우팅 전문가(Routed Experts) 외에 항상 활성화되는 1개의 공유 전문가(Shared Expert) 를 포함하는 구조(Top-8 among 128 + 1)를 가집니다.
엄격한 출력 형식: 에이전트(Agent)로서 기능하기 위해 도구 호출(Tool Call) 및 추론(Reasoning) 과정에서 특정 XML 태그 구조를 완벽하게 준수해야 합니다.
병렬 도구 호출: 한 번의 턴에 여러 도구를 동시에 호출하는 기능을 지원하기 위해 로짓(Logit) 레벨에서의 제어가 필요합니다.
이에 Upstage는 vLLM v0.12.0 버전을 베이스로 하여 Solar-Open 전용 기능을 탑재한 커스텀 포크 git+https://github.com/UpstageAI/vllm.git@v0.12.0-solar-open 을 배포했습니다.
3. Deep Dive: Upstage vLLM 포크의 주요 변경 사항
GitHub 리포지토리 분석을 통해 확인된 Upstage 커스텀 vLLM의 핵심 변경 사항은 다음과 같습니다.
3.1 커스텀 로짓 프로세서 (Logits Processors)
모델이 다음 토큰을 생성할 확률을 조작하여 특정 형식을 강제하거나 기능을 활성화하는 모듈이 추가되었습니다.
SolarOpenTemplateLogitsProcessor: 모델이 구조화된 출력(Structured Outputs) 제약 조건을 준수하도록 강제합니다. XML 태그가 올바르게 닫히지 않거나, 허용되지 않은 토큰이 생성되는 것을 방지하여 파싱 에러를 최소화합니다.
ParallelToolCallLogitsProcessor: Solar-Open의 강력한 에이전트 기능을 뒷받침합니다. 모델이 하나의 도구 호출을 마친 후 즉시 생성을 끝내지 않고, 필요한 경우 추가적인 도구 호출을 이어갈 수 있도록 생성 흐름을 제어합니다.
3.2 전용 파서 (Parsers) 지원
서버 실행 시점에 모델의 출력을 애플리케이션이 이해할 수 있는 형태로 변환해주는 파서가 추가되었습니다.
--tool-call-parser solar_open: Solar-Open 모델 특유의 도구 호출 포맷을 해석합니다. <tool_call>{function-name}... 형태의 XML 출력을 파싱하여 API 실행 가능한 객체로 변환합니다.
--reasoning-parser solar_open: Chain-of-Thought(CoT) 추론 과정을 처리합니다. 모델이 답변을 생성하기 전에 수행하는 내부 추론 내용(Thought Process)과 최종 답변을 분리하여, 사용자가 필요에 따라 추론 과정을 보거나 숨길 수 있게 지원합니다.
3.3 모델링 코드 최적화 (modeling_solar_open.py)
vllm/model_executor/models/ 경로에 Solar-Open 전용 모델링 파일이 추가되었습니다. 여기에는 Shared Expert가 포함된 MoE 레이어의 순전파(Forward Pass) 로직과 100B 규모의 파라미터를 텐서 병렬화(Tensor Parallelism) 환경에서 효율적으로 로드하기 위한 가중치 매핑 로직이 포함되어 있습니다.
4. 실전 가이드: 설치 및 실행
Upstage는 복잡한 의존성 문제를 피하고 빠른 설치를 위해 Python 패키지 매니저인 uv 사용을 권장하고 있습니다.
4.1 uv를 활용한 설치
기존 pip보다 훨씬 빠른 uv를 사용하여 가상 환경을 만들고 사전 컴파일된 바이너리를 설치합니다.
# 1. 가상 환경 생성 (Python 3.12 권장)
uv venv --python 3.12 --seed
source .venv/bin/activate
# 2. Solar Open 최적화 vLLM 설치
# 컴파일 시간을 줄이기 위해 사전 빌드된 Wheel 파일을 지정합니다.
VLLM_PRECOMPILED_WHEEL_LOCATION="https://github.com/vllm-project/vllm/releases/download/v0.12.0/vllm-0.12.0-cp38-abi3-manylinux_2_31_x86_64.whl" \
VLLM_USE_PRECOMPILED=1 \
uv pip install git+https://github.com/UpstageAI/vllm.git@v0.12.0-solar-open
4.2 Docker를 이용한 실행 (권장)
프로덕션 환경에서는 Docker 이미지를 사용하는 것이 가장 안정적입니다. 다음은 8개의 GPU를 사용하여 모델을 서빙하는 예시입니다.
docker run --gpus all \
--ipc=host \
-p 8000:8000 \
upstage/vllm-solar-open:latest \
upstage/Solar-Open-100B \
--trust-remote-code \
--enable-auto-tool-choice \
--tool-call-parser solar_open \
--reasoning-parser solar_open \
--logits-processors vllm.model_executor.models.parallel_tool_call_logits_processor:ParallelToolCallLogitsProcessor \
--logits-processors vllm.model_executor.models.solar_open_logits_processor:SolarOpenTemplateLogitsProcessor \
--tensor-parallel-size 8
4.3 하드웨어 요구사항
Solar-Open-100B는 거대한 모델 크기로 인해 상당한 VRAM을 요구합니다.
최소 사양: NVIDIA A100 (80GB) x 4장 (TP=4)
권장 사양: NVIDIA A100 (80GB) x 8장 또는 B200 x 8장 (TP=8). TP=8 설정 시 메모리 대역폭을 최대로 활용하여 추론 속도를 높일 수 있습니다.
5. 마치며
Upstage의 Solar-Open-100B는 단순한 텍스트 생성을 넘어 복잡한 추론과 도구 사용이 가능한 고성능 모델입니다. 이러한 모델의 잠재력을 온전히 활용하기 위해서는 vLLM의 PagedAttention 기술 과 Upstage의 커스텀 엔지니어링(전용 파서 및 로짓 프로세서) 이 결합된 전용 포크 버전을 사용하는 것이 필수적입니다.
앞으로 공식 vLLM 버전에 이러한 기능들이 통합될 가능성도 있지만, 현재로서는 v0.12.0-solar-open 브랜치가 Solar-Open 모델을 위한 가장 안정적이고 강력한 서빙 솔루션입니다.
참고 자료
vllm-project/vllm: A high-throughput and memory-efficient inference engine - GitHub
vLLM - UC Berkeley Sky Computing Lab, Link
vLLM: Revolutionizing Large Language Model Serving with PagedAttention - Medium
Fast LLM Serving with vLLM and PagedAttention - YouTube
upstage/Solar-Open-100B - Hugging Face
README.md upstage/Solar-Open-100B - Link
Need guidance in reproducing AIME25 score - Discussions
mike-ravkine/Solar-Open-100B-FP8-Dynamic - Link
Add files using upload-large-folder tool - Commit
README.md upstage/Solar-Open-100B blob - Link
GLM-4.5: Agentic, Reasoning, and Coding (ARC) Foundation Models - ResearchGate