허허의 오늘은 뭐 먹지?

vLLM 이란? (기초) 본문

AI

vLLM 이란? (기초)

luminovus 2025. 1. 24. 16:41

vLLM에 대해 간단히 정리해보겠다.


vLLM이란 무엇인가?

1. vLLM이란?

  • vLLM은 대규모 언어 모델(LLM)을 빠르고 메모리 효율적으로 서빙(inference)하기 위해 만들어진 오픈소스 엔진이다.
  • 기존 파이프라인보다 높은 처리량(throughput)과 낮은 지연(latency)을 제공하면서도, 메모리 사용량(memory footprint)을 최소화하는 것을 목표로 한다.
  • 여러 사용자(세션)의 요청을 동시에 처리하거나, 대규모 모델을 제한된 자원(GPU 메모리 등)에서 효율적으로 돌려야 할 때 큰 이점을 제공한다.

2. 왜 만들어졌나?

  1. LLM의 규모 확장
    최근 수십 억~수천 억 파라미터 규모의 모델(예: GPT, LLaMA, BLOOM 등)들이 등장하면서, 모델 추론 시 필요한 자원(GPU 메모리, CPU/GPU 연산)이 크게 늘어났다.
    • 기존 프레임워크(예: PyTorch, TensorFlow)만 활용하면, 요청이 몰리거나 여러 세션을 동시에 처리할 때 비효율적인 메모리 사용과 낮은 처리량 문제가 빈번하게 발생한다.
  2. 다중 요청(멀티 세션) 처리
    ChatGPT나 유사한 챗봇 시스템처럼 여러 사용자가 동시에 모델 추론을 요청하는 상황이 늘어났다. 이를 효율적으로 처리하기 위해 vLLM은 PagedAttention 등 최적화 기법을 통해 모델 내부에서 필요한 텐서/캐시를 더욱 효율적으로 관리한다.
  3. 서빙 비용 절감
    클라우드 환경 또는 개인 GPU 환경에서 대규모 모델을 서빙할 때 비용이 많이 든다. 처리량을 높이고 메모리 사용을 줄이는 방향으로 최적화해 운영 비용을 절감하고자 한다.

3. 어떻게 시작되었나?

  • 연구/개발 배경
    대규모 모델 최적화 연구를 진행해 온 여러 연구자와 오픈소스 커뮤니티에서 “추론 속도를 높이고 메모리 효율성을 개선할 수 있는 전용 엔진이 필요하다”는 요구가 커졌다.
  • 오픈소스 프로젝트
    GitHub의 vLLM 프로젝트를 통해 공개되었으며, 누구나 쉽게 설치해 사용할 수 있도록 Python 패키지 형태로 배포되었다. PyTorch 기반이지만, 내부 최적화 로직을 통해 일반적인 PyTorch 추론보다 높은 효율성을 보여준다.

4. 결과(장점) 요약

  • 높은 처리량(Throughput)
    동일한 GPU 자원에서 동시 다발적인 요청을 처리해도 속도가 빠르다.
  • 낮은 지연시간(Latency)
    요청이 많아도 각 요청에 대한 응답 시간이 짧아진다.
  • 메모리 효율성(Memory Efficiency)
    동일한 모델 크기에서 GPU 메모리를 적게 사용하거나, 동일 메모리로 더 큰 배치(batch) 또는 더 많은 동시 세션을 처리할 수 있다.
  • 편의성(Usability)
    기존 PyTorch, Hugging Face Transformers와 연동이 비교적 쉽고, 사용법이 간단하다.

5. 간단한 테스트 코드 예시

다음 예시는 Hugging Face에서 제공하는 예시 모델(예: Llama 2 7B Chat)을 vLLM으로 추론하는 간단한 스크립트다.

주의

  • Llama 2 모델은 Meta의 사용 정책 및 Hugging Face 토큰 등에 따라 접근 권한이 필요한 경우가 있다.
    다른 공개 모델(예: gpt2, distilgpt2, dolly 등)로도 동일한 방식을 적용할 수 있다.
# vLLM 설치
pip install vllm accelerate transformers

# 예시 파이썬 코드 (test_vllm.py)
import torch
from vllm import LLM

def main():
    # 사용할 모델(토크나이저) 이름
    # meta-llama/Llama-2-7b-chat-hf 대신, gpt2, distilgpt2 등으로 바꿀 수도 있다.
    model_name = "meta-llama/Llama-2-7b-chat-hf"
    
    # vLLM 엔진 초기화
    llm = LLM(
        model=model_name,
        tokenizer=model_name,
        trust_remote_code=True  # 일부 모델에서 필요할 수 있음
    )
    
    # 프롬프트(질문, 명령 등)
    prompt = "안녕하세요? 오늘 기분이 어떠신가요?"
    
    # 추론 실행 (여러 개의 프롬프트 리스트도 한번에 가능)
    outputs = llm.generate([prompt])
    
    # 결과 출력
    for i, output in enumerate(outputs):
        print(f"=== 응답 {i} ===")
        print(output.generations[0].text)  # 가장 첫 번째 생성 결과만 출력

if __name__ == "__main__":
    main()
  1. pip install vllm accelerate transformers로 vLLM과 필요한 라이브러리를 설치한다.
  2. 위 코드를 test_vllm.py 파일로 저장한 뒤 python test_vllm.py로 실행한다.
  3. 모델 다운로드가 진행된 후 추론 결과가 터미널에 출력된다.

6. 간단한 실험 결과 예시

아래는 단일 NVIDIA A100(40GB) GPU에서 meta-llama/Llama-2-7b-chat-hf 모델을 테스트했다고 가정했을 때의 (예시) 성능이다. 실제 환경(모델 종류, GPU 사양, 배치 크기, 시퀀스 길이 등)에 따라 달라질 수 있다.

  • vLLM을 사용했을 때:
    • 처리량(Throughput): 예를 들어 초당 6080 토큰 생성 (동시 요청 48개 기준)
    • 메모리 사용량: 약 24GB28GB 정도 (기존 PyTorch 단순 추론 대비 1020%가량 절약되는 경우도 확인)
  • **기존 PyTorch + Transformers(직접 추론)**일 때:
    • 처리량: 동일 설정에서 초당 40~50 토큰 생성
    • 메모리 사용량: 약 28GB~30GB 정도

즉, 모델이나 환경에 따라 차이가 있지만, vLLM처리량을 높이고 메모리 사용량을 줄이는 방향으로 동작한다.

(주의: 위 숫자들은 실제 측정치가 아닌 예시이며, 실제로는 더 높거나 낮은 값이 나올 수 있다.)


7. 마무리

  • vLLM은 대규모 언어 모델을 고성능·고효율로 서빙하기 위해 등장한 프로젝트다.
  • 기존 PyTorch 추론 파이프라인의 비효율을 줄이고, 동시 요청이 많은 환경에서 낮은 지연높은 처리량을 얻도록 설계되었다.
  • 설치와 사용이 비교적 간단하므로(코드 몇 줄로 테스트 가능), 직접 시도하며 어느 정도 성능 이점을 얻을 수 있는지 확인해보길 권장한다.
반응형
Comments