LLM

#2 vLLM 과 LoRA 기반 Fine-tuning

ch4u 2025. 3. 17. 22:40

1. vLLM이란?

vLLM은 대규모 언어 모델(LLM)의 추론 및 서빙을 효율적으로 수행하기 위한 오픈 소스 라이브러리입니다. PagedAttention 기법을 활용하여 메모리 사용을 최적화하며, 기존 🤗 Transformers 대비 최대 24배 빠른 추론 속도를 제공합니다.

이 글에서는 vLLM을 활용한 모델 로드, API 서버 배포, 그리고 LoRA 기반의 Fine-tuning 방법까지 자세히 설명하겠습니다.


2. vLLM 설치 방법

vLLM은 pip을 통해 간단하게 설치할 수 있습니다.

pip install vllm

vLLM은 PyTorch 및 Transformers 라이브러리와 호환되므로, 해당 라이브러리들이 설치되어 있어야 합니다. 필요 시 아래 명령어로 추가 패키지를 설치하세요.

pip install torch transformers

3. 모델 로드 및 사용

vLLM을 사용하여 로컬 모델을 로드하고 추론을 수행할 수 있습니다.

기본 모델 로드 및 텍스트 생성

from vllm import LLM, SamplingParams

# 모델 초기화\llm = LLM(model="gpt-4o")

# 프롬프트 설정
prompt = "로봇이 그림 그리기를 배우는 짧은 이야기를 들려주세요:"

# 샘플링 파라미터 설정
sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=100)

# 출력 생성
outputs = llm.generate(prompt, sampling_params)
print(outputs[0].outputs[0].text)

이 코드에서는 gpt4o 모델을 사용하여 주어진 프롬프트에 대한 텍스트를 생성합니다.


4. vLLM API 서버 배포

vLLM은 FastAPI를 활용하여 API 서버 형태로 모델을 배포할 수 있습니다.

python -m vllm.entrypoints.api_server \
    --model /path/to/your/model \
    --max-model-len=2048 \
    --tensor-parallel-size 2

이 명령어를 실행하면 FastAPI 기반의 서버가 실행되며, HTTP 요청을 통해 모델 추론을 수행할 수 있습니다.

API 요청 예제 (Python)

import requests

url = "http://localhost:8000/generate"
data = {"prompt": "안녕하세요!", "max_tokens": 100}
response = requests.post(url, json=data)
print(response.json())

이렇게 하면 로컬 서버를 통해 LLM 응답을 받을 수 있습니다.


5. LoRA 어댑터를 활용한 Fine-tuning

LoRA 기반 Fine-tuning 준비

Fine-tuning(미세 조정)을 수행하기 위해 LoRA 어댑터를 적용할 수 있습니다.

필요 패키지 설치

pip install peft datasets

모델 및 데이터셋 준비

from datasets import load_dataset

# 학습 데이터 로드
dataset = load_dataset("your_dataset")

LoRA 적용하여 Fine-tuning 수행

from vllm import LLM, SamplingParams
from vllm.lora.request import LoRARequest

# 모델 및 어댑터 경로 설정
model_path = "mymodel/mymodel"
adapter_path = "mymodel/adapter"

# 모델 초기화
llm = LLM(
    model=model_path,
    dtype=torch.float16,
    enable_lora=True,
    max_lora_rank=64,
)

# 프롬프트 및 샘플링 파라미터 설정
prompt = "안녕?. 나는 건호야. 너는 누구니?"
sampling_params = SamplingParams(temperature=0.7, max_tokens=100)

# LoRA 어댑터 적용하여 출력 생성
output = llm.generate(
    prompt,
    sampling_params,
    lora_request=LoRARequest("adapter", 1, adapter_path),
)
print(output[0].outputs[0].text)

이렇게 하면 LoRA 어댑터를 적용한 모델을 통해 추론을 수행할 수 있습니다.