LLM 类#

class vllm.LLM(model: str, tokenizer: str | None = None, tokenizer_mode: str = 'auto', skip_tokenizer_init: bool = False, trust_remote_code: bool = False, tensor_parallel_size: int = 1, dtype: str = 'auto', quantization: str | None = None, revision: str | None = None, tokenizer_revision: str | None = None, seed: int = 0, gpu_memory_utilization: float = 0.9, swap_space: float = 4, cpu_offload_gb: float = 0, enforce_eager: bool | None = None, max_context_len_to_capture: int | None = None, max_seq_len_to_capture: int = 8192, disable_custom_all_reduce: bool = False, disable_async_output_proc: bool = False, mm_processor_kwargs: Dict[str, Any] | None = None, **kwargs)[源代码]#

基类:object

一个用于根据给定的提示和采样参数生成文本的大型语言模型。

此类包含一个分词器、一个语言模型(可能分布在多个GPU上),以及为中间状态(即KV缓存)分配的GPU内存空间。给定一批提示和采样参数,此类使用智能批处理机制和高效的内存管理,从模型生成文本。

参数:
  • model – HuggingFace Transformers 模型的名称或路径。

  • tokenizer – HuggingFace Transformers 分词器的名称或路径。

  • tokenizer_mode – 分词器模式。”auto” 将使用快速分词器(如果可用),而 “slow” 将始终使用慢速分词器。

  • skip_tokenizer_init – 如果为真,跳过分词器和解分词器的初始化。期望输入中提供有效的 prompt_token_ids 和 None 作为提示。

  • trust_remote_code – 在下载模型和分词器时信任远程代码(例如来自HuggingFace的代码)。

  • tensor_parallel_size – 用于分布式执行的张量并行GPU数量。

  • dtype – 模型权重和激活的数据类型。目前,我们支持 float32float16bfloat16。如果设置为 auto,我们将使用模型配置文件中指定的 torch_dtype 属性。然而,如果配置中的 torch_dtypefloat32,我们将改为使用 float16

  • quantization – 用于量化模型权重的方法。目前,我们支持“awq”、“gptq”和“fp8”(实验性)。如果为None,我们首先检查模型配置文件中的`quantization_config`属性。如果该属性为None,我们假设模型权重未量化,并使用`dtype`来确定权重的数据类型。

  • revision – 要使用的特定模型版本。它可以是一个分支名称、标签名称或提交ID。

  • tokenizer_revision – 要使用的特定分词器版本。它可以是一个分支名称、标签名称或提交ID。

  • seed – 用于初始化随机数生成器的种子,以便进行采样。

  • gpu_memory_utilization – 用于模型权重、激活和KV缓存的GPU内存的比率(介于0和1之间)。较高的值将增加KV缓存的大小,从而提高模型的吞吐量。然而,如果值过高,可能会导致内存不足(OOM)错误。

  • swap_space – 每个GPU使用的CPU内存大小(GiB)作为交换空间。当请求的 best_of 采样参数大于1时,这可以用于临时存储请求的状态。如果所有请求都将有 best_of=1,您可以安全地将其设置为0。否则,过小的值可能会导致内存不足(OOM)错误。

  • cpu_offload_gb – 用于卸载模型权重的CPU内存大小(GiB)。这实际上增加了你可以用于保存模型权重的GPU内存空间,但代价是每次前向传递都需要进行CPU-GPU数据传输。

  • enforce_eager – 是否强制执行急切执行。如果为 True,我们将禁用 CUDA 图并始终在急切模式下执行模型。如果为 False,我们将使用 CUDA 图和混合急切执行。

  • max_context_len_to_capture – CUDA 图覆盖的最大上下文长度。当序列的上下文长度超过此值时,我们将回退到急切模式(已弃用。请改用 max_seq_len_to_capture)。

  • max_seq_len_to_capture – CUDA 图覆盖的最大序列长度。当序列的上下文长度大于此值时,我们将回退到急切模式。此外,对于编码器-解码器模型,如果编码器输入的序列长度大于此值,我们将回退到急切模式。

  • disable_custom_all_reduce – 查看 ParallelConfig

  • **kwargs – 用于 EngineArgs 的参数。(参见 引擎参数

备注

此类旨在用于离线推理。对于在线服务,请改用 AsyncLLMEngine 类。

DEPRECATE_LEGACY: ClassVar[bool] = False#

一个用于切换是否弃用旧版 generate/encode API 的标志。

使用束搜索生成序列。

参数:
  • prompts – 提示列表。每个提示可以是字符串或一组标记ID。

  • params – 束搜索参数。

TODO: 束搜索如何与长度惩罚、频率惩罚、停止标准等一起工作?

chat(messages: List[ChatCompletionSystemMessageParam | ChatCompletionUserMessageParam | ChatCompletionAssistantMessageParam | ChatCompletionToolMessageParam | ChatCompletionFunctionMessageParam | CustomChatCompletionMessageParam] | List[List[ChatCompletionSystemMessageParam | ChatCompletionUserMessageParam | ChatCompletionAssistantMessageParam | ChatCompletionToolMessageParam | ChatCompletionFunctionMessageParam | CustomChatCompletionMessageParam]], sampling_params: SamplingParams | List[SamplingParams] | None = None, use_tqdm: bool = True, lora_request: LoRARequest | None = None, chat_template: str | None = None, add_generation_prompt: bool = True, continue_final_message: bool = False, tools: List[Dict[str, Any]] | None = None, mm_processor_kwargs: Dict[str, Any] | None = None) List[RequestOutput][源代码]#

生成聊天对话的响应。

聊天对话通过分词器转换为文本提示,并调用 generate() 方法生成响应。

多模态输入可以以传递给OpenAI API的相同方式传递。

参数:
  • messages – 对话列表或单个对话。 - 每个对话表示为一个消息列表。 - 每条消息是一个包含 ‘role’ 和 ‘content’ 键的字典。

  • sampling_params – 文本生成的采样参数。如果为 None,则使用默认的采样参数。当它是一个单一值时,它适用于每个提示。当它是一个列表时,列表的长度必须与提示的长度相同,并且它与提示一一对应。

  • use_tqdm – 是否使用 tqdm 来显示进度条。

  • lora_request – 用于生成的LoRA请求,如果有的话。

  • chat_template – 用于结构化聊天的模板。如果未提供,将使用模型的默认聊天模板。

  • add_generation_prompt – 如果为真,则为每条消息添加一个生成模板。

  • continue_final_message – 如果为 True,则在对话中继续最终消息,而不是开始新的对话。如果 add_generation_prompt 也为 True,则不能为 True

  • mm_processor_kwargs – 多模态处理器 kwarg 覆盖此聊天请求。仅用于离线请求。

返回:

包含生成的响应的 RequestOutput 对象列表,顺序与输入消息相同。

encode(prompts: str, pooling_params: PoolingParams | Sequence[PoolingParams] | None = None, prompt_token_ids: List[int] | None = None, use_tqdm: bool = True, lora_request: List[LoRARequest] | LoRARequest | None = None) List[EmbeddingRequestOutput][源代码]#
encode(prompts: List[str], pooling_params: PoolingParams | Sequence[PoolingParams] | None = None, prompt_token_ids: List[List[int]] | None = None, use_tqdm: bool = True, lora_request: List[LoRARequest] | LoRARequest | None = None) List[EmbeddingRequestOutput]
encode(prompts: str | None = None, pooling_params: PoolingParams | Sequence[PoolingParams] | None = None, *, prompt_token_ids: List[int], use_tqdm: bool = True, lora_request: List[LoRARequest] | LoRARequest | None = None) List[EmbeddingRequestOutput]
encode(prompts: List[str] | None = None, pooling_params: PoolingParams | Sequence[PoolingParams] | None = None, *, prompt_token_ids: List[List[int]], use_tqdm: bool = True, lora_request: List[LoRARequest] | LoRARequest | None = None) List[EmbeddingRequestOutput]
encode(prompts: None, pooling_params: None, prompt_token_ids: List[int] | List[List[int]], use_tqdm: bool = True, lora_request: List[LoRARequest] | LoRARequest | None = None) List[EmbeddingRequestOutput]
encode(prompts: PromptType | Sequence[PromptType], /, *, pooling_params: PoolingParams | Sequence[PoolingParams] | None = None, use_tqdm: bool = True, lora_request: List[LoRARequest] | LoRARequest | None = None) List[EmbeddingRequestOutput]

生成输入提示的补全。

此类会根据内存限制自动批处理给定的提示。为了获得最佳性能,请将所有提示放入一个列表中,并将其传递给此方法。

参数:
  • prompts – LLM 的提示。你可以传递一系列提示用于批量推理。关于每个提示的格式,请参阅 PromptType 了解更多详情。

  • pooling_params – 池化参数用于池化。如果为 None,我们使用默认的池化参数。

  • use_tqdm – 是否使用 tqdm 来显示进度条。

  • lora_request – 用于生成的LoRA请求,如果有的话。

  • prompt_adapter_request – 提示适配器请求用于生成,如果有的话。

返回:

包含 EmbeddingRequestOutput 对象的列表,生成的嵌入内容与输入提示的顺序相同。

备注

使用 promptsprompt_token_ids 作为关键字参数被视为遗留做法,未来可能会被弃用。你应该通过 inputs 参数来传递它们。

generate(prompts: str, sampling_params: SamplingParams | List[SamplingParams] | None = None, prompt_token_ids: List[int] | None = None, use_tqdm: bool = True, lora_request: List[LoRARequest] | LoRARequest | None = None) List[RequestOutput][源代码]#
generate(prompts: List[str], sampling_params: SamplingParams | List[SamplingParams] | None = None, prompt_token_ids: List[List[int]] | None = None, use_tqdm: bool = True, lora_request: List[LoRARequest] | LoRARequest | None = None) List[RequestOutput]
generate(prompts: str | None = None, sampling_params: SamplingParams | List[SamplingParams] | None = None, *, prompt_token_ids: List[int], use_tqdm: bool = True, lora_request: List[LoRARequest] | LoRARequest | None = None) List[RequestOutput]
generate(prompts: List[str] | None = None, sampling_params: SamplingParams | List[SamplingParams] | None = None, *, prompt_token_ids: List[List[int]], use_tqdm: bool = True, lora_request: List[LoRARequest] | LoRARequest | None = None) List[RequestOutput]
generate(prompts: None, sampling_params: None, prompt_token_ids: List[int] | List[List[int]], use_tqdm: bool = True, lora_request: List[LoRARequest] | LoRARequest | None = None) List[RequestOutput]
generate(prompts: PromptType | Sequence[PromptType], /, *, sampling_params: SamplingParams | Sequence[SamplingParams] | None = None, use_tqdm: bool = True, lora_request: List[LoRARequest] | LoRARequest | None = None) List[RequestOutput]

生成输入提示的补全。

此类会根据内存限制自动批处理给定的提示。为了获得最佳性能,请将所有提示放入一个列表中,并将其传递给此方法。

参数:
  • prompts – LLM 的提示。你可以传递一系列提示用于批量推理。关于每个提示的格式,请参阅 PromptType 了解更多详情。

  • sampling_params – 文本生成的采样参数。如果为 None,则使用默认的采样参数。当它是一个单一值时,它适用于每个提示。当它是一个列表时,列表的长度必须与提示的长度相同,并且它与提示一一对应。

  • use_tqdm – 是否使用 tqdm 来显示进度条。

  • lora_request – 用于生成的LoRA请求,如果有的话。

  • prompt_adapter_request – 提示适配器请求用于生成,如果有的话。

  • priority – 请求的优先级(如果有)。仅在启用优先级调度策略时适用。

返回:

包含生成的完整内容的 RequestOutput 对象列表,顺序与输入提示相同。

备注

使用 promptsprompt_token_ids 作为关键字参数被视为遗留做法,未来可能会被弃用。你应该通过 inputs 参数来传递它们。