生成模型¶
vLLM 为生成模型提供一流的支持,这涵盖了大多数 LLM。
在 vLLM 中,生成模型实现了 VllmModelForTextGeneration 接口。基于输入的最终隐藏状态,这些模型输出要生成的 token 的对数概率,然后通过 Sampler 进行处理以获得最终文本。
配置¶
模型运行器 (--runner)¶
通过选项 --runner generate 以生成模式运行模型。
提示
在绝大多数情况下,无需设置此选项,因为 vLLM 可以通过 --runner auto 自动检测要使用的模型运行器。
离线推理¶
LLM 类提供了各种离线推理方法。有关初始化模型时的选项列表,请参阅 配置。
LLM.generate¶
vLLM 中所有生成模型都可以使用 generate 方法。它与 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 来使用贪婪采样。
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(如果存在)。在大多数情况下,如果未指定 SamplingParams,这将在默认情况下为您提供最佳结果。
但是,如果您偏好 vLLM 的默认采样参数,请在创建 LLM 实例时传递 generation_config="vllm"。
代码示例可以在这里找到: examples/offline_inference/basic/basic.py
LLM.beam_search¶
beam_search 方法在 generate 的基础上实现了 beam search。例如,使用 5 个 beam 进行搜索并输出最多 50 个 token。
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 来格式化 prompt。
重要
通常,只有经过指令微调的模型才有 chat template。基础模型可能表现不佳,因为它们没有针对聊天对话进行训练。
代码
from vllm import LLM
llm = LLM(model="meta-llama/Meta-Llama-3-8B-Instruct")
conversation = [
{
"role": "system",
"content": "You are a helpful assistant",
},
{
"role": "user",
"content": "Hello",
},
{
"role": "assistant",
"content": "Hello! How can I assist you today?",
},
{
"role": "user",
"content": "Write an essay about the importance of higher education.",
},
]
outputs = llm.chat(conversation)
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
代码示例可以在这里找到: examples/offline_inference/basic/chat.py
如果模型没有 chat template 或者您想指定一个不同的,您可以显式地传递一个 chat template。
from vllm.entrypoints.chat_utils import load_chat_template
# You can find a list of existing chat templates under `examples/`
custom_template = load_chat_template(chat_template="<path_to_template>")
print("Loaded chat template:", custom_template)
outputs = llm.chat(conversation, chat_template=custom_template)
在线服务¶
我们的 OpenAI 兼容服务器 提供了与离线 API 相对应的端点。
- Completions API 类似于
LLM.generate,但只接受文本。 - Chat API 类似于
LLM.chat,接受文本和 多模态输入(对于具有 chat template 的模型)。