생성 모델

생성 모델 (Generative Models)

vLLM은 생성 모델(generative models)에 대한 일등급(first-class) 지원을 제공해요. 생성 모델은 대부분의 LLM을 포함합니다.

vLLM에서 생성 모델은 VllmModelForTextGeneration 인터페이스를 구현해요. 입력의 최종 hidden states를 기반으로, 이 모델들은 생성할 토큰의 로그 확률(log probabilities)을 출력하고, 이는 Sampler를 거쳐 최종 텍스트로 변환됩니다.

출처: vLLM 공식 문서 — models-generative_models

구성 (Configuration)

모델 러너 (Model Runner)

--runner generate 옵션으로 모델을 생성 모드로 실행해요.

팁: 대부분의 경우 이 옵션을 설정할 필요가 없어요. vLLM이 --runner auto를 통해 사용할 모델 러너를 자동으로 감지할 수 있기 때문이에요.

오프라인 추론 (Offline Inference)

LLM 클래스는 오프라인 추론을 위한 다양한 메서드를 제공해요.

LLM.generate

generate 메서드는 vLLM의 모든 생성 모델에서 사용할 수 있어요. HF Transformers의 그와 비슷하지만, 토큰화(tokenization)와 역토큰화(detokenization)도 자동으로 수행된다는 점이 달라요.

from vllm import LLM

llm = LLM(model="facebook/opt-125m")
outputs = llm.generate("Hello, my name is")

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

SamplingParams를 전달해 언어 생성을 선택적으로 제어할 수 있어요. 예를 들어 temperature=0으로 설정하면 greedy sampling을 사용해요.

from vllm import LLM, SamplingParams

llm = LLM(model="facebook/opt-125m")
params = SamplingParams(temperature=0)
outputs = llm.generate("Hello, my name is", params)

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

중요: 기본적으로 vLLM은 huggingface 모델 저장소의 generation_config.json이 있으면 적용해 모델 제작자가 권장하는 sampling 파라미터를 사용해요. 대부분의 경우 SamplingParams를 지정하지 않으면 기본으로 최상의 결과를 얻어요. vLLM의 기본 sampling 파라미터를 선호한다면 LLM 인스턴스 생성 시 generation_config="vllm"을 전달하세요.

LLM.beam_search

beam_search 메서드는 generate 위에 beam search를 구현해요. 예를 들어 5개의 beam으로 탐색하고 최대 50개 토큰을 출력하려면:

from vllm import LLM
from vllm.sampling_params import BeamSearchParams

llm = LLM(model="facebook/opt-125m")
params = BeamSearchParams(beam_width=5, max_tokens=50)
outputs = llm.beam_search([{"prompt": "Hello, my name is "}], params)

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

LLM.chat

chat 메서드는 generate 위에 채팅 기능을 구현해요. 특히 OpenAI Chat Completions API와 유사한 입력을 받고 자동으로 chat template을 적용합니다. 메시지 목록 형태로 전달하면 대화형 추론이 가능해져요.

더 알아보기 (Learn more)