TL;DR
온프레미스에서 데이터를 외부로 내보내지 않고 LLM을 운영하기 위한 vLLM 배포 구성을 8-GPU GLM-5.2/5.3 노드와 단일 L40S gemma-4-26B 환경으로 나눠 제시합니다. 설치 단계에서는 uv 가상환경, FlashInfer 버전, SM120용 미완성 backend 패치처럼 실제 장애를 일으킨 의존성을 조정하고, GLM 노드는 Expert Parallelism과 FP8 KV 캐시를 사용해 256K 문맥을 처리합니다. GPU 메모리 사용률 0.98은 256K 문맥에서 OOM을 일으켰으므로 0.95와 --max-model-len 256K 조합을 안정점으로 선택했으며, gemma-4-26B는 초안 모델과 4개 speculative token을 이용합니다. systemd의 900초 시작 제한과 SIGINT 종료, 오프라인 Hugging Face 캐시, nftables 포트 제한을 더해 운영 환경의 재시작과 보안을 보완하고, ShareGPT 기반 동시성 테스트로 플래그 변경 전후 수치를 비교해야 한다고 정리합니다.
섹션별 상세
Install
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=autoUbuntu 24.04에서 uv로 Python 3.12 가상환경을 만들고 vLLM을 설치하는 초기 구성입니다.
pip install -U flashinfer-python flashinfer-cubin
export FLASHINFER_DISABLE_VERSION_CHECK=1vLLM과 호환되지 않는 오래된 FlashInfer를 업데이트하고 버전 검사 우회를 활성화하는 명령입니다.
vllm serve /models/GLM-5.2-NVFP4 --served-model-name glm-5.2 \
--tensor-parallel-size 8 --enable-expert-parallel \
--disable-custom-all-reduce --numa-bind --performance-mode interactivity \
--trust-remote-code --kv-cache-dtype fp8_e4m3 \
--gpu-memory-utilization 0.95 --max-model-len 256K \
--host --port 80008개 GPU 노드에서 GLM-5.2-NVFP4를 Expert Parallelism과 FP8 KV 캐시로 제공하는 최종 안정 실행 명령입니다.
vllm serve /models/gemma-4-26B-A4B-it --quantization fp8 \
--served-model-name gemma-4-26b-a4b --tensor-parallel-size 1 \
--gpu-memory-utilization 0.93 --kv-cache-dtype fp8 --max-model-len 32768 \
--max-num-seqs 64 --enable-prefix-caching \
--cudagraph-capture-sizes 1 2 4 8 16 --async-scheduling \
--enable-auto-tool-choice --tool-call-parser gemma4 --reasoning-parser gemma4 \
--speculative-config '{"method":"mtp","model":"/models/gemma-4-26B-A4B-it-assistant","num_speculative_tokens":4}' \
--trust-remote-code --host --port 8000단일 L40S에서 FP8 gemma-4-26B-A4B-it를 MTP 추측 디코딩과 prefix caching으로 제공하는 실행 명령입니다.
[Service]
Type=simple
EnvironmentFile=/etc/vllm/vllm.env
ExecStart=/root/.venv/bin/vllm serve ...
Restart=on-failure
RestartSec=10
TimeoutStartSec=900
TimeoutStopSec=120
KillSignal=SIGINT
KillMode=mixed
LimitNOFILE=1048576
OOMScoreAdjust=-900systemd가 vLLM의 긴 시작 시간과 안전한 종료를 처리하도록 설정한 서비스 유닛입니다.
용어 해설
- 전문가 병렬화(Expert Parallelism)
- — Mixture-of-Experts 모델에서 여러 Expert를 GPU에 분산하고 토큰을 해당 Expert로 라우팅하는 병렬 처리 방식입니다. GLM-5.2/5.3처럼 Expert 수가 많은 모델을 8개 GPU에서 실행할 때 GPU별 계산과 통신을 나눠 메모리와 처리량을 관리하는 데 중요합니다.
- KV 캐시(KV Cache)
- — Transformer가 이전 토큰의 Key와 Value를 저장해 긴 문맥을 처리할 때 같은 계산을 반복하지 않도록 하는 메모리 구조입니다. 문맥 길이가 늘수록 필요한 메모리도 커지므로 vLLM의 GPU 메모리 사용률과 최대 문맥 길이를 함께 조정해야 안정적인 추론이 가능합니다.
- 추측 디코딩(Speculative Decoding)
- — 작은 초안 모델이 다음 토큰을 먼저 제안하고 주 모델이 이를 한 번에 검증하는 추론 최적화 기법입니다. 이 글에서는 gemma-4-26B-A4B-it-assistant를 초안 모델로 사용해 한 번에 4개 토큰을 제안하며, 실제 적용에는 embedding 경로 패치가 필요했습니다.
- CUDA Graph
- — GPU 연산 그래프를 미리 캡처해 반복적인 커널 실행과 CPU 측 호출 오버헤드를 줄이는 CUDA 기능입니다. vLLM은 CUDA Graph 프로파일링에 메모리를 별도로 사용하므로 설정값 0.95가 실제 KV 캐시에 제공하는 비율은 로그상 0.9124로 낮아집니다.
- NUMA
- — CPU와 메모리를 여러 노드로 나누고 특정 프로세스를 가까운 메모리 노드에 바인딩하는 하드웨어 메모리 구조입니다. 글에서는 numactl과 vLLM의 --numa-bind를 함께 사용해 8-GPU 노드의 CPU·메모리 접근 경로를 조정합니다.
기술
- vLLM
- LiteLLM
- uv
- Ubuntu 24.04
- Python 3.12
- FlashInfer
- FlashInferMLASparseSM120Impl
- CUDA Graph
- Triton
- torchcodec
- numactl
- systemd
- nftables
- ShareGPT
- GLM-5.2-NVFP4
- GLM-5.3-NVFP4
- gemma-4-26B-A4B-it
- Qwen/Qwen2.5-VL-72B-Instruct-AWQ
활용 사례
- 데이터를 외부로 전송할 수 없는 온프레미스 LLM 추론
- 8-GPU 노드에서 GLM-5.2/5.3 제공
- 단일 L40S에서 gemma-4-26B 제공
- OpenAI 호환 API 기반 사내 모델 서비스
- ShareGPT 기반 동시성 벤치마크
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.