콘텐츠로 이동

6.6. vLLM 가속

개발 중

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

vLLM은 높은 처리량(High-throughput)과 메모리 효율성을 자랑하는 LLM 서빙 엔진입니다. llama.cpp가 광범위한 호환성과 저사양 환경에 초점을 맞춘다면, vLLM은 고사양 GPU에서의 프로덕션급 성능을 위해 설계되었습니다.

vLLM이란 무엇인가요?

전통적인 어텐션(Attention) 알고리즘은 연속된 메모리 블록을 필요로 하며, 이는 상당한 메모리 파편화와 낭비(최대 60-80%)를 초래합니다. vLLM은 운영체제의 가상 메모리 페이징에서 영감을 받은 PagedAttention 알고리즘을 도입했습니다. 이를 통해 KV 캐시 블록을 비연속적인 메모리 공간에 저장할 수 있게 되었습니다.

주요 이점

  • 더 높은 처리량: 표준 Hugging Face Transformers보다 훨씬 더 많은 동시 요청을 처리할 수 있습니다.

  • 메모리 효율성: GPU VRAM 낭비가 거의 제로에 가까워, 더 큰 배치 크기(Batch size)나 더 긴 컨텍스트 윈도우를 사용할 수 있습니다.

  • 빠른 기능 도입: 연속 배칭(Continuous batching)이나 AWQ, GPTQ, SqueezeLLM 양자화 같은 새로운 서빙 기능을 가장 먼저 지원하곤 합니다.

Backend.AI GO에서의 역할

Backend.AI GO에서 vLLM은 주로 NVIDIA GPU를 사용하는 사용자(Linux 또는 Windows WSL 환경)를 위한 "프로(Pro)" 엔진 역할을 합니다.

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

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

다음과 같은 경우 vLLM 백엔드로 전환을 고려해보세요:

  1. VRAM이 넉넉한 NVIDIA GPU 보유: RTX 5090 (32GB), 전문가용 RTX Pro 6000 (96GB), 또는 DGX Spark (GB10, 128GB) 개인용 AI 워크스테이션에서 vLLM이 최고 성능을 냅니다.

  2. 동시성(Concurrency)이 중요할 때: Backend.AI GO를 여러 사용자나 여러 에이전트를 위한 서버로 활용하고 있을 때.

  3. 지연 시간보다 처리량이 중요할 때: 엄청난 양의 텍스트를 처리해야 해서(예: 수백 개의 문서 요약), "첫 토큰 생성 시간"보다 "전체 완료 시간"이 더 중요할 때.

호스트 요구 사항

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

확인 항목:

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

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

macOS 사용자

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

설정 방법

Backend.AI GO에서 vLLM을 사용하려면:

  1. 설정 > 추론으로 이동합니다.

  2. CUDA의 기본 백엔드를 llama.cpp에서 vLLM으로 변경합니다.

  3. 적절한 NVIDIA 드라이버와 CUDA 툴킷(보통 11.8 버전 이상)이 설치되어 있는지 확인합니다.

지원 모델 형식

.gguf를 사용하는 llama.cpp와 달리, vLLM은 다음 형식들을 직접 지원합니다:

  • Hugging Face 표준 형식: 일반적인 .safetensors 또는 .bin 가중치 파일.

  • AWQ / GPTQ: 더 빠른 추론을 위해 사전 양자화된 모델들.

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

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

  1. 처음 사용할 때 vllm/vllm-openai 이미지를 받아옵니다. 이 이미지는 크기가 커서(약 9~10GB) 첫 시작에서는 이미지를 받고 준비하는 데 시간이 걸린 뒤에 모델이 로드됩니다. 이후 시작에서는 캐시된 이미지를 재사용합니다.

  2. GPU 전달(--gpus all), 공유 메모리 전송(--ipc=host), 읽기 전용으로 마운트한 모델, 루프백에 게시한 호스트 포트로 컨테이너를 실행합니다.

  3. 직접 실행하는 vLLM에서 자주 빠뜨리는 실행 플래그를 설정해 흔한 실패를 막습니다:

    • --served-model-name을 라우터가 노출하는 별칭과 맞춰, 모델 id로 보낸 요청이 엔진에 도달합니다.
    • --max-model-len을 컨텍스트 설정에서 유도해, max_tokens가 모델 길이를 초과하는 요청을 방지합니다.
    • --enable-auto-tool-choice --tool-call-parser hermestool_choice: auto가 동작하게 해, 도구 사용 요청이 400 오류를 만나지 않습니다.
    • --gpu-memory-utilization은 안전한 기본값 0.90을 사용합니다(추후 설정에서 변경 가능).

컨테이너가 /health에서 정상으로 보고하면 Backend.AI GO가 라우터에 등록하고, 모델은 채팅 UI와 관리 API 모두에서 /v1/chat/completions에 응답합니다. 모델을 중지하면 컨테이너를 정리하고 경로 등록을 해제합니다. 예기치 않은 충돌도 같은 방식으로 회수하므로 끊긴 경로가 남지 않습니다.


vLLM은 데이터센터급 추론 성능을 여러분의 고성능 워크스테이션으로 가져옵니다.