vLLM 소개 및 설치 가이드

2025. 3. 28. 11:08·알쓸신잡

오늘은 vLLM 에대해서 간단하게 알아보고 설치하는 방법까지 알아보려고 한다.

1. vLLM 이란?

vLLM은 Versatile Large Language Model Serving System의 약자로, 대규모 언어 모델(LLM)을 효율적으로 서빙하기 위한 오픈소스 라이브러리이다.
높은 처리량과 낮은 지연 시간을 목표로 설계되었으며, 특히 GPU 환경에서 LLM 추론 성능을 극대화해 준다는 특징이 있으며,
VLLM은 PagedAttention, 최적화된 CUDA 커널, 텐서 병렬 처리 등 다양한 기술을 활용하여 빠른 추론 속도를 제공한다.

 

GitHub - vllm-project/vllm: A high-throughput and memory-efficient inference and serving engine for LLMs

A high-throughput and memory-efficient inference and serving engine for LLMs - vllm-project/vllm

github.com

2. vLLM vs Ollama

흔히 로컬에서 LLM을 구동한다고 하면 Ollama도 같이 등장한다.(나도 Ollama를 사용 중이었다.)
vLLM과 Ollama는 모두 LLM을 실행하고 관리하기 위한 도구이지만, 목표와 기능에서 차이가 있다.

vLLM

  • 장점
    • 뛰어난 성능: 높은 처리량과 낮은 지연 시간으로 대규모 환경에 적합
    • 다양한 성능 최적화 기능: pagedattention, 텐서 병렬 처리 등 다양한 최적화 기술 제공
    • GPU 활용 극대화: GPU 환경에서 LLM 추론 성능을 극대화
  • 단점
    • 설정 및 사용법 복잡: OLLAMA에 비해 설정 및 사용법이 다소 복잡
    • 로컬 환경에서의 간단한 실험에는 과도함: 고성능 서빙에 특화되어 로컬 환경에서 간단한 실험에는 다소 과도할 수 있음

Ollama

  • 장점
    • 간편한 설치 및 사용법: 설치 및 사용법이 매우 간단하여 초보자도 쉽게 사용 가능
    • 로컬 환경에서 LLM 쉽게 사용 가능: 로컬 환경에서 LLM을 테스트하거나 개인적인 용도로 사용하기에 편리
    • 모델 관리 및 API 서버 제공: 모델 관리, API 서버 등 기본적인 기능 제공
  • 단점
    • VLLM에 비해 성능 낮음: 성능 면에서 VLLM보다 떨어짐
    • 고성능 서빙 환경에는 부적합: 고성능 LLM 서빙 환경에는 적합하지 않음

Summary

특징 VLLM OLLAMA
장점 - 뛰어난 성능 (높은 처리량, 낮은 지연 시간)
- 다양한 성능 최적화 기능
- GPU 활용 극대화
- 간편한 설치 및 사용법
- 로컬 환경에서 LLM 쉽게 사용 가능
- 모델 관리 및 API 서버 제공
단점 - 설정 및 사용법 복잡
- 로컬 환경 간단 실험에는 과도함
- VLLM 대비 성능 낮음
- 고성능 서빙 환경 부적합

 

둘 다 다양한 모델들을 지원하고 OpenAI 호환 API를 지원하니, 각자의 상황에 맞게 사용하면 될 것 같다.
아래와 같은 컨퍼런스도 열리는 걸 보니 목적자체가 다르기 때문에 서로 경쟁 및 협력하면서 발전해가고 있는 것 같다.

3. Install

VLLM은 pip, Docker, 소스 빌드 등 다양한 방법으로 설치할 수 있다.
쉽게 사용할 수 있는 pip과 docker 을 이용한 방법만 알아보자.

pip

간단하게 가상환경을 생성해 주고 pip으로 vllm을 설치해 준다.
나는 conda가 익숙해서 conda로 설치했는데, vLLM docs에서는 최근 인기 있는 가상환경 관리자인 uv를 사용하라고 권장되어 있다. 둘 다 명령어만 치면 되니 비슷하다.

uv

uv venv myenv --python 3.12 --seed
source myenv/bin/activate
uv pip install vllm

conda

conda create -n myenv python=3.12 -y
conda activate myenv
pip install vllm
vllm serve Qwen/Qwen2.5-1.5B-Instruct

Using Docker

docker run --runtime nvidia --gpus all \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    --env "HUGGING_FACE_HUB_TOKEN=<secret>" \
    -p 8000:8000 \
    --ipc=host \
    vllm/vllm-openai:latest \
    --model mistralai/Mistral-7B-v0.1

위와 같이 docker을 이용해서 올릴 수도 있다. 나는 매번 치는 게 귀찮아서 보통 compose로 만들어서 컨테이너를 올리기 때문에 docker-compose.yml도 작성해 봤다. (추가 설정들을 해서 Dockerfile도 같이 설정해줘야 한다.)

FROM vllm/vllm-openai:latest

RUN uv pip install git+https://github.com/huggingface/transformers.git --system

ENV TZ=Asia/Seoul
version: '3'

services:
  vllm:
    build:
      context: .
      dockerfile: Dockerfile
    runtime: nvidia
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    volumes:
      - ~/.cache/huggingface:/root/.cache/huggingface
    ports:
      - "8000:8000"
    environment:
      - HUGGING_FACE_HUB_TOKEN=허깅페이스토큰
      - TZ=Asia/Seoul
    ipc: host
    command: --model google/paligemma2-10b-mix-224

gpu 옵션이나 추가적인 설정들은 docs를 참고하면 될 것 같다.

4. Usage

vLLM은 Python API와 OpenAI 호환 API 서버를 제공한다.

Python API

from vllm import LLM

llm = LLM(model="facebook/opt-350m")

# 프롬프트 생성
prompts = [
    "Hello, my name is",
    "The capital of France is",
    "The best programming language is",
]

outputs = llm.generate(prompts)

for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

OpenAI 호환 API 서버

Docker를 통해 VLLM을 설치한 경우, 기본적으로 OpenAI 호환 API 서버가 실행된다. 다음과 같이 curl 명령어를 사용하여 API를 호출할 수 있다.

curl http://localhost:8000/v1/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "facebook/opt-350m",
        "prompt": "The capital of Germany is",
        "max_tokens": 50
    }'

Python의 openai 라이브러리를 사용하여 API 서버에 접근할 수도 있다.

import openai

openai.api_base = "http://localhost:8000/v1" # VLLM API 서버 주소
openai.api_key = "EMPTY" # API 키는 필요없으므로 임의의 값 설정

completion = openai.Completion.create(
    model="facebook/opt-350m",
    prompt="The capital of Germany is",
    max_tokens=50
)

print(completion.choices[0].text)

또 pip을 설치한 경우에도 아래 명령어를 통해서 OpenAPI 호환 서버를 열 수 있다.
기본적으로 http://localhost:8000으로 열리게 되며, --host와 --port 옵션을 이용하여 열 수 있다.

vllm serve Qwen/Qwen2.5-1.5B-Instruct

 

더 자세한 사용법 및 옵션은 VLLM 공식 문서를 참고하면 된다.

5. Model

사용 가능한 모델은 Docs나 허깅페이스에서 확인이 가능하다. (허깅페이스에서 약관동의가 필요한 repo들은 미리 동의를 하고 사용하면 된다.)

https://docs.vllm.ai/en/stable/models/supported_models.html

 

 

728x90

'알쓸신잡' 카테고리의 다른 글

맥북 한영키 윈도우 처럼 세팅  (0) 2025.03.28
Obsidian Auto card link 플러그인  (0) 2025.03.28
Chrome 텍스트 커서 깜박임 오류 해결 가이드  (0) 2025.03.27
Git credential  (0) 2025.03.26
OpenSource Contribute  (0) 2025.03.14
'알쓸신잡' 카테고리의 다른 글
  • 맥북 한영키 윈도우 처럼 세팅
  • Obsidian Auto card link 플러그인
  • Chrome 텍스트 커서 깜박임 오류 해결 가이드
  • Git credential
창빵맨
창빵맨
  • 창빵맨
    Let's be Developers
    창빵맨
    로그인/로그아웃
  • 전체
    오늘
    어제
    • 분류 전체보기 (471)
      • 알쓸신잡 (79)
      • ML & DL (85)
        • Computer v.. (22)
        • NLP (22)
        • 파이썬 머신러닝 완.. (3)
        • 개념정리 (38)
      • 리눅스 (21)
      • 프로젝트 (29)
        • 산불 발생 예측 (6)
        • 음성비서 (12)
        • pdf 병합 프로그.. (0)
        • 수위 예측 (5)
        • 가짜 뉴스 분류 (5)
        • 전력사용량 예측 (1)
      • 코딩테스트 (217)
        • 프로그래머스[Pyt.. (17)
        • 프로그래머스[Fai.. (3)
        • 백준[Python] (160)
        • 이것이취업을위한코딩.. (18)
        • 파이썬 알고리즘 (19)
      • 데이터분석실습 (25)
        • 데이터 과학 기반의.. (18)
        • 헬로 데이터 과학 (7)
      • 메모장 (0)
      • 잡담 (4)
  • Personal

    GITHUB
    Instagram
  • 공지사항

  • 인기 글

  • 태그

    파이썬
    dp
    이것이취업을위한코딩테스트다
    백준
    나동빈
    이코테
    BFS
    DFS
    이분탐색
    그리디
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3

HOME

HOME

상단으로

티스토리툴바