Ubuntu에서 vLLM을 활용한 고처리량 서빙

laptop_mac macOS Sonoma Intermediate schedule 8 min read
Author by Alex Rivera • May 14, 2024

여러 명의 동시 사용자를 위한 애플리케이션을 구축하고 있다면, Ollama나 LM Studio로는 부족합니다. 엔터프라이즈급 추론 엔진이 필요합니다. 바로 vLLM이 필요합니다.

Step 1 소개

vLLM은 높은 처리량과 메모리 효율을 갖춘 LLM 서빙 엔진입니다. PagedAttention이라는 기법을 사용하여 어텐션 키와 값을 효과적으로 관리하며, 표준 HuggingFace Transformers 대비 2~4배 높은 처리량을 제공합니다.

이 가이드는 고성능 NVIDIA GPU(예: RTX 3090, 4090, 또는 A100)가 최소 하나 이상 장착된 Linux 서버를 운영하고 있다고 가정합니다.

Step 2 사전 요구사항

vLLM은 Python과 CUDA를 필요로 합니다. conda 또는 표준 venv와 같은 가상 환경 사용을 강력히 권장합니다.

Terminal
sudo apt update
sudo apt install python3-pip python3-venv

# Create and activate environment
python3 -m venv vllm-env
source vllm-env/bin/activate

Step 3 vLLM 설치

PyPI에서 직접 vLLM을 설치합니다. 이 과정에서 PyTorch와 필요한 CUDA 의존성이 자동으로 다운로드됩니다.

Terminal
pip install vllm

Step 4 OpenAI 호환 서버 실행

vLLM은 OpenAI API 프로토콜을 기본적으로 지원합니다. 커맨드 라인에서 직접 모델을 서빙할 수 있습니다. 예시로 Llama 3 8B를 사용하겠습니다.

Terminal
python3 -m vllm.entrypoints.openai.api_server   --model meta-llama/Meta-Llama-3-8B-Instruct   --dtype auto   --api-key your-secret-key   --port 8000

주요 파라미터 설명: - --model: HuggingFace 저장소 ID입니다. vLLM이 자동으로 다운로드합니다. - --dtype auto: 최대 성능을 위해 bfloat16 또는 float16을 자동으로 사용합니다. - --api-key: 불특정 인터넷 사용자가 GPU를 무분별하게 사용하지 못하도록 엔드포인트를 보호합니다.

Step 5 API 연결

base_url만 교체하면 표준 OpenAI Python SDK를 사용하여 이 서버에 바로 연결할 수 있습니다.

Terminal
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="your-secret-key"
)

response = client.chat.completions.create(
    model="meta-llama/Meta-Llama-3-8B-Instruct",
    messages=[
        {"role": "user", "content": "Explain PagedAttention."}
    ],
)

print(response.choices[0].message.content)

Step 6 프로덕션 환경 최적화

여러 개의 GPU(예: RTX 3090 두 개)를 보유하고 있다면, 텐서 병렬 처리를 사용하여 대형 70B 모델을 GPU에 분산시킬 수 있습니다. --tensor-parallel-size 플래그를 추가하기만 하면 됩니다:

Terminal
python3 -m vllm.entrypoints.openai.api_server   --model meta-llama/Meta-Llama-3-70B-Instruct   --tensor-parallel-size 2

vLLM이 실행되면, 이제 Linux 서버는 지연 시간 저하 없이 수십 개의 동시 요청을 처리할 수 있게 됩니다.