大模型服务的吞吐量上不去、显存不够用、并发请求一多就排队超时,几乎是每个做 LLM 应用落地的团队都会遇到的坎。之前在业务迭代里,我也反复卡在推理引擎选型、部署参数调优和各类报错排查上,网上资料比较零散,很多坑要靠自己踩。这篇文章就以 vLLM 为例,从核心设计原理、环境准备、完整部署实战到高频问题排查,整理一套闭环的实操方案。无论你是刚开始接触大模型推理的新手,还是已经在做服务化部署的后端开发者,都能从里面找到可以直接复用的思路和命令。

1. 从“显存爆了”说起:vLLM 到底解决了什么问题

1.1 LLM 推理的瓶颈在哪里

大语言模型(Large Language Model,LLM)在做文本生成时,并不是一次性把完整答案算出来,而是一个 Token 一个 Token 地“续写”。每生成一个新 Token,模型都要把当前已经生成的内容重新过一遍网络,并且在计算过程中会把历史 Token 的 Key 和 Value 缓存下来,避免每次重复计算。这部分缓存就是 KV Cache。

KV Cache 会随着序列长度线性增长,同时请求数量越多,占用的显存也越高。传统推理框架通常会预先申请一块固定大小的显存给 KV Cache,但不同请求的序列长度差异很大,有的请求只问一句话就结束,有的请求却要生成几千字。固定分配会造成两种浪费:

  • 预分配的显存远大于实际需要,导致显存利用率低。
  • 要新来请求时,发现没有空闲 KV Cache 块,即使显存还有零散内存碎片也无法使用。

除了显存问题,传统批处理方式也不适合 LLM 的生成模式。普通深度学习推理可以把一批数据同时送入网络,整体计算时间约等于最慢那一条数据的时间。但 LLM 生成时,每个请求的速度不一致:有些请求已经生成完,有些还在生成长文本。如果把整批请求绑定在一起,就要等最慢的请求结束才能统一释放显存,其他请求只能空等。

这一系列问题导致早期自建 LLM 服务经常出现:并发一高吞吐骤降,显存占用很高但有效算力没跑满,单个请求延迟也能接受但整体吞吐上不去。

1.2 vLLM 是什么

vLLM 是一个专门面向 LLM 推理的高吞吐量推理引擎,由加州大学伯克利分校的研究团队主导开源。它并不是一个通用的深度学习框架,而是建立在 PyTorch 等底层框架之上,把模型加载、显存管理、请求调度、KV Cache 管理、算子优化等工作统一封装起来,让开发者可以用简单的方式部署大模型,并且获得接近硬件极限的吞吐能力。

用一句话概括:vLLM 是一套“为了让大模型服务又快又省显存”的系统级推理框架。在业界,类似的推理引擎还有 Hugging Face TGI、SGLang、LightLLM、TensorRT-LLM 等,但 vLLM 因为开源社区活跃、支持模型多、接入方式简单,成为了目前最流行的方案之一。

1.3 vLLM、PyTorch、LangChain 有什么区别

很多初学者会把这三个概念混在一起。简单区分:

  • PyTorch 是深度学习训练和推理的底层计算框架,提供张量计算、自动微分、模型定义等基础能力。vLLM 在底层依然依赖 PyTorch 和 CUDA,但它不是要替代 PyTorch。
  • vLLM 是推理服务系统,负责把 PyTorch 模型“服务化”,解决显存管理、批处理调度、并发请求等问题。你可以把 vLLM 理解成一个经过高度优化的大模型运行容器。
  • LangChain 是应用编排框架,用来组装提示词、调用模型、串联工具、管理记忆等。LangChain 通常不关心模型底层怎么推理,它通过 OpenAI 兼容接口或其他 SDK 调用 vLLM 启动的服务。

所以,它们不是同一层的东西。LangChain 是“应用层”的编排工具,vLLM 是“推理层”的服务系统,PyTorch 是“计算层”的底层框架。

1.4 哪些场景适合使用 vLLM

vLLM 适合以下几类场景:

  • 字节级别的高并发在线服务,例如聊天机器人、AI 助手、Agent 应用,需要同时服务大量用户请求。
  • 离线批量生成任务,例如用大模型批量打标、生成摘要、处理数据,需要尽量吃满 GPU 利用率。
  • 对响应延迟有要求的私有大模型部署,希望减少显存浪费,降低单卡或多卡部署门槛。
  • 需要兼容 OpenAI 接口协议,方便快速接入 LangChain、FastAPI 等现有应用。

如果你的场景是超低延迟的单条推理、显存非常受限,或者需要高度定制算子,vLLM 不一定是最优解,需要结合实际情况评估。

2. 环境准备与安装说明

2.1 硬件要求

vLLM 对硬件有一定要求,最理想的运行环境是带有 NVIDIA GPU 的 Linux 服务器,原因是 vLLM 大量依赖 CUDA 生态和针对 NVIDIA GPU 优化的算子。当然,通过 vllm-ascend、ROCm 等插件也可以尝试适配其他平台,但验证最充分、资料最多、坑最少的环境仍然是 NVIDIA GPU + Linux。

显存大小直接决定你能部署的模型规模。以常见模型为例:

  • 7B 级别模型,FP16 精度下权重约 14 GB,加上 KV Cache 和激活值,通常需要 24 GB 以上显存才算宽裕。
  • 13B 级别模型,FP16 精度下权重约 26 GB,建议 40 GB 以上显存或使用多卡。
  • 70B 级别模型,单卡很难放下,一般需要多卡张量并行或使用量化。

需要强调的是,模型权重占用只是基础,KV Cache 和请求并发会额外消耗大量显存,因此不能只按“权重体积”去估算显卡。

2.2 Python 与 CUDA 环境

vLLM 通过 Python 使用,推荐环境如下(版本建议根据实际环境调整):

  • 操作系统:Ubuntu 20.04 / 22.04 / 24.04 等 Linux 发行版。
  • Python:3.8 到 3.12 之间,具体支持范围随版本变化。
  • CUDA Toolkit:vLLM 安装时会拉取预编译的 CUDA 算子,一般要求驱动支持对应 CUDA 版本,例如 CUDA 11.8 或 CUDA 12.1 以上。
  • GPU 驱动:NVIDIA 驱动需要满足 CUDA 版本要求,使用 nvidia-smi 查看驱动信息。
  • PyTorch:vLLM 会自动安装匹配的 PyTorch 版本,通常不需要手动指定。

如果你使用的是 Windows,需要注意:vLLM 官方对 Windows 的原生支持有限,很多场景需要借助 WSL2 或 Docker。下面是常见环境组合:

组件 推荐配置 备注
操作系统 Ubuntu 22.04 Windows 建议用 WSL2
Python 3.10 / 3.11 太旧或太新可能找不到预编译包
GPU NVIDIA Ampere 以上 老显卡也能用但性能受限
CUDA 11.8 / 12.1 以 vLLM 安装要求为准
显存 24 GB 起步 取决于模型规模

2.3 使用 pip 安装 vLLM

安装前先确保环境中已有 Python 和 pip,然后执行:

pip install vllm

如果你的网络环境访问默认 PyPI 源较慢,可以换成国内镜像源:

pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完成后验证版本:

python -c "import vllm; print(vllm.__version__)"

如果你需要从源码编译安装,可以克隆 vLLM 仓库后执行:

git clone https://github.com/vllm-project/vllm.git
cd vllm
pip install -e .

从源码编译的好处是能针对当前机器做更充分的算子编译,但耗时较长,需要提前安装好编译工具链。

2.4 版本与兼容性说明

vLLM 的版本迭代非常快,不同版本的 API 和启动参数可能有差异。写这篇文章时,较新的稳定版本已经发展到 0.7.x / 0.8.x 系列,命令行参数和 Python 接口整体趋于稳定,但具体小版本之间仍会出现参数调整。因此,建议你在部署前先锁定版本号,例如:

pip install vllm==0.8.1

不要盲目追最新版,因为新版本可能引入新的依赖要求或破坏性变更。在团队协作时,把 vLLM、PyTorch、CUDA、模型文件版本一起记录在 requirements 或 Dockerfile 里,能减少很多环境不一致带来的问题。

3. 核心设计原理拆解:vLLM 为什么吞吐量高

vLLM 并不是单纯把模型塞进显存然后提供 API,它的高吞吐来自多个层面的系统级设计。下面拆解几个核心机制。

3.1 PagedAttention:KV Cache 的按需分页

PagedAttention 是 vLLM 最核心的发明之一,灵感来自操作系统的虚拟内存分页思想。传统推理框架会为每个请求分配连续、固定大小的 KV Cache 空间,这样会产生大量内部碎片和外部碎片。而 PagedAttention 把 KV Cache 切分成固定大小的块(Block),每个请求按需申请块,块与块之间不需要在物理上连续。

这样一来:

  • 显存利用率显著提升,几乎不会浪费空闲块。
  • 多个请求可以共享同一个块的只读部分,例如并行采样时多个候选序列可以共享公共前缀的 KV Cache。
  • 发生请求抢占时,只需要换入换出部分块,而不是整条序列。

PagedAttention 的实现需要修改 Attention 算子,vLLM 为此编写了高度优化的 CUDA Kernel,这也是 vLLM 吞吐效果远超朴素 PyTorch 实现的重要原因。

3.2 Continuous Batching:连续动态批处理

传统的静态批处理(Static Batching)会把请求凑成固定 Batch 一起前向计算,等整个 Batch 全部完成再释放。这样做的缺点是:较早完成的请求要等最慢的请求,GPU 算力被白白浪费。

vLLM 采用的是 Continuous Batching(连续动态批处理)机制。在每一轮解码迭代中,调度器都会检查当前有哪些请求已经结束、哪些请求刚到达,然后动态决定下一轮把哪些请求的 Token 送入模型计算。结束的请求立刻释放显存,新请求马上可以加进来,GPU 每一轮都在处理“还在生成中”的请求,没有请求需要空等。

这种机制在对话类和生成类业务中提升尤其明显。比如有的用户问“你好”,模型很快回答结束;有的用户要求生成 2000 字长文。在静态批处理中,长文本请求会拖住整个 Batch,而 Continuous Batching 能让短请求结束后立刻让位给新请求,整体吞吐提升非常可观。

3.3 调度、抢占与流式输出

vLLM 内部有一个调度器(Scheduler),负责管理请求生命周期。请求到达后先进入等待队列,调度器根据显存余量和策略决定何时开始执行。如果显存不足,vLLM 会执行抢占(Preemption),把部分请求的 KV Cache 换出到 CPU 内存,释放显存给新请求,避免整服务因为显存不足而崩溃。

vLLM 还天然支持流式输出(Streaming)。由于生成过程本身就是逐 Token 进行的,vLLM 每生成一个 Token 就可以通过异步方式推送给客户端。这种流式输出不仅让用户体验更好,也让系统在生成过程中及时释放已发送的显存状态。

3.4 FP16、BF16 与量化精度

模型精度直接影响显存占用和计算吞吐。大模型部署中最常见的三种精度是 FP16、FP32 和 BF16。

精度 位数 指数位 尾数位 特点 适用场景
FP32 32 8 23 精度高,显存占用大,速度慢 训练或精度敏感场景
FP16 16 5 10 速度较快,但数值范围小,容易溢出 大部分推理场景
BF16 16 8 7 与 FP32 数值范围相同,精度低一点 训练和推理都常用,尤其是大模型

FP16 和 BF16 的显存占用相同,都是 FP32 的一半,但 BF16 的指数位更多,能表示的范围更大,在训练大模型时更不容易出现梯度溢出。推理时两者各有取舍,vLLM 默认支持这两种精度,开发者可以通过启动参数指定。

如果显存仍然不够,还可以使用 INT8 或 INT4 量化,把权重量化到更低比特。量化能大幅降低显存占用,但可能带来一定精度损失。vLLM 对多种量化方案有支持,例如 AWQ、GPTQ、FP8 等,具体支持情况取决于模型和版本。

3.5 CUDA Graph 与 Kernel 优化

在 PyTorch 中,每次前向计算都有 Python 层的调度开销和内核启动开销。vLLM 利用 CUDA Graph 技术把一组 GPU 内核捕获并重放,减少 Python 层和 CPU 侧的开销,让 GPU 执行更稳定高效。

同时,vLLM 针对 Attention、RMSNorm、激活函数等常见算子做了融合优化,减少显存读写次数,这也是高吞吐的重要来源。需要说明的是,CUDA Graph 捕获会占用额外显存,某些场景下可以通过 --enforce-eager 参数关闭,后面我们会专门讲到。

4. 完整实战:用 vLLM 部署一个 OpenAI 兼容服务

这一节以部署一个大语言模型为例,完整演示离线推理和服务化部署流程。

4.1 项目结构与模型准备

我们创建一个工作目录:

mkdir vllm-demo && cd vllm-demo

建议目录结构如下:

vllm-demo/
├── offline_inference.py
├── start_server.sh
└── test_request.sh

模型文件可以从 Hugging Face 下载。如果网络访问较慢,可以使用国内镜像,例如:

export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download Qwen/Qwen2.5-7B-Instruct --local-dir ./models/Qwen2.5-7B-Instruct

如果你本地已经下载好模型,可以把模型路径直接传给 vLLM。为了方便测试,也可以先使用体积较小的模型,例如 1.5B 或 3B 级别,先把流程跑通再切换大模型。

4.2 离线批量推理

vLLM 提供了 Python 接口,可以在不启动 HTTP 服务的情况下直接做离线批量推理。下面是最基础的用法。

创建 offline_inference.py 文件:

from vllm import LLM, SamplingParams

# 加载模型,这里替换成你本地的模型路径
llm = LLM(model="./models/Qwen2.5-7B-Instruct")

param = SamplingParams(
    temperature=0.7,
    top_p=0.8,
    max_tokens=512,
    repetition_penalty=1.05,
)

prompts = [
    "介绍一下大模型推理引擎 vLLM。",
    "用 Python 写一个快速排序示例。",
    "什么是 KV Cache?",
]

outputs = llm.generate(prompts, param)

for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt}")
    print(f"Generated: {generated_text}")
    print("-" * 50)

运行脚本:

python offline_inference.py

运行时 vLLM 会先加载模型和权重,然后进入推理阶段。由于 vLLM 的调度和显存管理机制,即使大批量 prompt 同时传入,也会被按批次动态处理。

SamplingParams 里几个常用参数说明:

  • temperature :控制随机性,值越大输出越多样,越小越确定。
  • top_p :核采样参数,控制候选 Token 的累计概率范围。
  • max_tokens :单次生成的最大 Token 数。
  • repetition_penalty :重复惩罚,降低生成重复内容的概率。

4.3 启动 OpenAI 兼容 API 服务

vLLM 最常用的部署方式是把模型封装成 OpenAI 兼容 API,这样 LangChain、OpenAI SDK 等工具可以直接对接。

创建 start_server.sh

#!/bin/bash

python -m vllm.entrypoints.openai.api_server \
    --model ./models/Qwen2.5-7B-Instruct \
    --served-model-name qwen2.5-7b \
    --host 0.0.0.0 \
    --port 8000 \
    --gpu-memory-utilization 0.9 \
    --max-model-len 8192

给脚本添加执行权限并启动:

chmod +x start_server.sh
./start_server.sh

服务启动成功后,会看到类似下面的日志:

INFO: Started server process [xxxx]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000

这时就可以通过 HTTP 请求访问模型了。

4.4 核心启动参数解析

上面启动命令里几个参数在生产环境非常常用:

  • --model :模型路径或 Hugging Face 模型 ID。
  • --served-model-name :对外暴露的模型名称,客户端调用时需要保持一致。
  • --host :服务监听地址, 0.0.0.0 允许外部访问。
  • --port :服务端口号。
  • --gpu-memory-utilization :允许 vLLM 使用的 GPU 显存比例上限。默认 0.9,适当调低可以给其他进程留出显存。
  • --max-model-len :模型支持的最大序列长度(输入 + 输出)。这个值直接决定 KV Cache 分配策略,设置过大可能导致显存不足。

其他常用参数还包括:

  • --tensor-parallel-size :张量并行数,多卡时设置为参与并行的 GPU 数量。
  • --max-num-seqs :一次调度中最多同时处理的序列数,影响吞吐和显存占用。
  • --enforce-eager :不使用 CUDA Graph,减少显存占用但降低吞吐,适合调试。
  • --quantization :指定量化方式,例如 --quantization awq
  • --dtype :指定计算精度,例如 auto float16 bfloat16

4.5 调用与验证

创建 test_request.sh ,用 curl 测试服务:

#!/bin/bash

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen2.5-7b",
    "messages": [
      {"role": "user", "content": "介绍一下 vLLM"}
    ],
    "max_tokens": 256,
    "temperature": 0.7
  }'

执行后,如果返回 JSON 中包含 choices 字段和生成文本,说明服务正常。

也可以用 Python 的 OpenAI SDK 调用:

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="EMPTY",  # vLLM 本地服务通常不需要真实 key
)

resp = client.chat.completions.create(
    model="qwen2.5-7b",
    messages=[{"role": "user", "content": "用一句话解释 PagedAttention"}],
    max_tokens=256,
)

print(resp.choices[0].message.content)

5. 常见问题与排查思路

vLLM 部署过程中,很多问题集中在显存、兼容性、参数设置三方面。下面整理我实际踩过的几类问题。

问题现象 常见原因 解决思路
启动时报 CUDA out of memory 模型权重 + KV Cache 超出显存 调低 --gpu-memory-utilization 、缩短 --max-model-len 、降低 --max-num-seqs 、使用量化
模型不支持或加载报错 模型架构不在 vLLM 支持列表内 检查 vLLM 官方支持的模型架构文档
服务可以启动但吞吐很低 精度、batch 参数、GPU 利用率不理想 调整 --max-num-seqs --dtype ,开启 CUDA Graph
输出内容乱码或重复 采样参数不合理或精度问题 调整 temperature repetition_penalty ,检查 tokenizer
Windows 上无法安装或运行 vLLM 对 Windows 支持有限 使用 WSL2 或 Docker
多卡模型无法加载 未配置张量并行方式 设置 --tensor-parallel-size 为实际 GPU 数

5.1 CUDA out of memory 显存不足

这是最常见的报错。原因通常不是模型权重放不下,而是 KV Cache 和调度时预留空间太大。排查顺序:

  1. 先用 nvidia-smi 查看当前显存占用,确认没有其他进程占显存。
  2. 降低 --gpu-memory-utilization ,比如从 0.9 降到 0.8。
  3. 降低 --max-model-len ,缩短允许的最大序列长度。
  4. 降低 --max-num-seqs ,限制同时处理的序列数量。
  5. 如果仍然不足,考虑模型量化或更换更小模型。

5.2 为什么还不能启动 Embedding / Reranker 模型

vLLM 最初主要面向生成式大模型,但新版本已经支持部分 Embedding 模型和 Reranker 模型,例如通过 LLM 类传入 task="embedding" 或使用相应接口。不过,并不是所有模型架构都支持,需要查看当前 vLLM 版本支持的模型列表。

在社区中,类似“昇腾 910B 上能不能用 vLLM 启动 Embedding 和 Reranker”的问题并不少见。如果你的硬件不是 NVIDIA,且模型类型是 Embedding 或 Reranker,建议优先查看对应硬件插件(如 vllm-ascend)的模型支持矩阵,不要直接假定支持。如果 vLLM 暂时不支持,可以先使用 Sentence Transformers 或 Text Embeddings Inference 等专门工具,等 vLLM 官方支持到位后再迁移。

5.3 Windows、RTX 2080 Ti、L20 等硬件兼容问题

vLLM 官方更倾向于支持 Linux + NVIDIA 环境。Windows 用户常见两种解决思路:

  • 使用 WSL2(Windows Subsystem for Linux 2),在 WSL2 内部安装 Ubuntu 和 CUDA 工具链。
  • 使用 Docker 容器,通过 NVIDIA Container Toolkit 映射 GPU。

对于 RTX 2080 Ti 这类较老的显卡,需要注意 CUDA 版本和显存容量。2080 Ti 的 11 GB 显存部署 7B 模型会比较紧张,建议使用量化模型或者选择更小的模型。L20 等显卡本身是支持 CUDA 的,但多卡运行时需要正确设置 --tensor-parallel-size ,否则可能只用到一张卡或报错。

5.4 --enforce-eager 参数的影响

--enforce-eager 会关闭 CUDA Graph 捕获,让模型在 Eager 模式下运行。优点:

  • 显存占用降低,启动更快。
  • 方便调试,避免 CUDA Graph 捕获时的异常。

缺点:

  • 吞吐明显下降,因为每次迭代都要承受 Python 调度和内核启动开销。

所以这个参数一般只用于调试、显存极紧张或 CUDA Graph 报错的场景,生产环境建议去掉它。

5.5 输出质量变差、乱码或重复

出现这类问题,优先检查:

  • Tokenizer 是否与模型匹配,是否完整加载。
  • 采样参数是否合理, temperature 过高容易乱, repetition_penalty 设置不当会导致重复或中断。
  • 精度设置是否正确,量化模型需要使用对应的量化参数。
  • 是否在 --max-model-len 临界值附近,长文本生成被截断可能导致输出不完整。

6. 生产环境最佳实践与工程建议

6.1 根据显存和业务设置 max-model-len 和 max-num-seqs

--max-model-len 不是越大越好,它决定 KV Cache 的预留范围。如果业务中绝大多数请求都很短,就没有必要支持 32K 上下文,过大的 max-model-len 会浪费显存并提高排查难度。建议先统计业务历史请求的长度分布,按 P99 值设置。

--max-num-seqs 控制并发批处理的序列数量。值越大,吞吐可能越高,但显存占用也会增加,还可能增加单请求的排队延迟。在延迟敏感场景要适当调小,在离线批处理场景可以调大。

6.2 精度选择与吞吐权衡

FP16 和 BF16 是生产部署的主流选择。如果 GPU 对 FP16 支持更好且模型数值范围可控,可以优先 FP16;如果担心大模型数值溢出,或者训练和推理精度要保持一致,使用 BF16 更稳妥。

量化部署时,要注意评估业务指标,例如分类准确率、问答正确率、生成文本质量。不能只看显存降了多少,而是要在验证集上对比 FP16 和 INT8/INT4 的效果差异。

6.3 多卡并行与显存放置

单卡放不下模型时,张量并行(Tensor Parallelism)可以把模型权重和计算分散到多张 GPU 上。设置 --tensor-parallel-size 时要注意:

  • 参与并行的 GPU 必须显存、带宽、型号尽量一致。
  • 张量并行会增加 GPU 间通信开销,不是越多越好。
  • 多卡时服务器模型并行度和模型总显存需求需要提前用公式预估。

最简单的启动方式:

python -m vllm.entrypoints.openai.api_server \
    --model ./models/Qwen2.5-14B-Instruct \
    --tensor-parallel-size 2 \
    --host 0.0.0.0 \
    --port 8000

6.4 服务化部署的稳定性

对外提供服务时,需要额外关注:

  • 健康检查:使用 /health /v1/models 接口做探活。
  • 超时控制:HTTP 客户端要设置合理的读超时,大模型生成速度波动大,超时太短容易误杀。
  • 优雅关闭:vLLM 服务停止时要等当前请求完成或设置最大等待时间,避免直接中断导致客户端报错。
  • 日志采集:记录请求模型、输入长度、输出长度、耗时、是否截断等信息,便于事后分析。

6.5 权限、限流与安全

如果 vLLM 服务暴露在非可信网络,一定要做好安全措施:

  • 在 API 网关层做鉴权,不要直接把裸服务暴露给公网。
  • 使用真实 API Key 或自定义 Token 校验。
  • 对单用户、单 IP 做限流,防止恶意刷接口导致 GPU 被打满。
  • 对输入输出内容做好合规过滤,尤其要避免提示词注入带来的风险。
  • 涉及生产环境变更时,先在测试环境验证参数和模型效果,再灰度发布。

7. 总结与后续学习方向

这篇文章从 LLM 推理的显存和批处理瓶颈出发,梳理了 vLLM 的核心设计原理,包括 PagedAttention、Continuous Batching、调度策略、精度选择和 CUDA Graph 优化,然后完整演示了离线推理和 OpenAI 兼容 API 服务的部署流程,最后整理了显存不足、模型兼容、硬件适配、参数影响等高频问题。

如果你正准备在项目中使用 vLLM,我的建议是:先拿一个小模型或量化模型跑通最小示例,确认服务能正常生成结果;再逐步换成目标模型,调整 max-model-len max-num-seqs gpu-memory-utilization 等参数;最后把服务接入监控、限流和权限体系,再考虑上线。vLLM 迭代速度很快,建议以官方文档和当前版本源码为准,不要完全依赖网上的旧教程。动手部署一次后,你对大模型推理系统的理解会比看十篇文章都深入。

更多推荐