离线推理#

您可以在您自己的代码中,在一系列提示上运行 vLLM。

离线 API 基于 LLM 类。要初始化 vLLM 引擎,请创建 LLM 的新实例并指定要运行的模型。

例如,以下代码从 HuggingFace 下载 facebook/opt-125m 模型,并使用默认配置在 vLLM 中运行它。

from vllm import LLM

llm = LLM(model="facebook/opt-125m")

初始化 LLM 实例后,您可以使用各种 API 执行模型推理。可用的 API 取决于正在运行的模型类型

  • 生成模型 输出从其采样的对数概率,以获得最终输出文本。

  • 池化模型 直接输出其隐藏状态。

有关每个 API 的更多详细信息,请参阅以上页面。

另请参阅

API 参考

配置选项#

本节列出了运行 vLLM 引擎最常用的选项。有关完整列表,请参阅引擎参数页面。

模型解析#

vLLM 通过检查模型仓库的 config.json 中的 architectures 字段,并查找注册到 vLLM 的相应实现来加载兼容 HuggingFace 的模型。然而,由于以下原因,我们的模型解析可能会失败

  • 模型仓库的 config.json 缺少 architectures 字段。

  • 非官方仓库使用 vLLM 中未记录的替代名称来引用模型。

  • 相同的架构名称用于多个模型,从而造成应加载哪个模型的不明确性。

为了解决这个问题,请通过将 config.json 覆盖传递给 hf_overrides 选项来显式指定模型架构。例如

from vllm import LLM

model = LLM(
    model="cerebras/Cerebras-GPT-1.3B",
    hf_overrides={"architectures": ["GPT2LMHeadModel"]},  # GPT-2
)

我们的支持的模型列表显示了 vLLM 识别的模型架构。

减少内存使用#

大型模型可能会导致您的机器内存不足 (OOM)。以下是一些有助于缓解此问题的选项。

张量并行 (TP)#

张量并行(tensor_parallel_size 选项)可用于跨多个 GPU 拆分模型。

以下代码将模型拆分到 2 个 GPU 上。

llm = LLM(model="ibm-granite/granite-3.1-8b-instruct",
          tensor_parallel_size=2)

重要提示

为确保 vLLM 正确初始化 CUDA,您应避免在初始化 vLLM 之前调用相关函数(例如 torch.cuda.set_device())。否则,您可能会遇到类似 RuntimeError: Cannot re-initialize CUDA in forked subprocess 的错误。

要控制使用哪些设备,请改为设置 CUDA_VISIBLE_DEVICES 环境变量。

量化#

量化模型占用更少的内存,但会降低精度。

静态量化模型可以从 HF Hub 下载(一些流行的模型可在 Neural Magic 上找到),并直接使用,无需额外配置。

动态量化也通过 quantization 选项支持 – 有关更多详细信息,请参阅此处

上下文长度和批大小#

您可以通过限制模型的上下文长度(max_model_len 选项)和最大批大小(max_num_seqs 选项)来进一步减少内存使用。

from vllm import LLM

llm = LLM(model="adept/fuyu-8b",
          max_model_len=2048,
          max_num_seqs=2)

调整缓存大小#

如果您的 CPU RAM 耗尽,请尝试以下选项

  • (仅限多模态模型)您可以使用 VLLM_MM_INPUT_CACHE_GIB 环境变量(默认为 4 GiB)设置多模态输入缓存的大小。

  • (仅限 CPU 后端)您可以使用 VLLM_CPU_KVCACHE_SPACE 环境变量(默认为 4 GiB)设置 KV 缓存的大小。

性能优化和调优#

您可以通过微调各种选项来潜在地提高 vLLM 的性能。有关更多详细信息,请参阅本指南