vLLM大模型推理部署实战:从PagedAttention到OpenAI兼容服务
大模型服务的吞吐量上不去、显存不够用、并发请求一多就排队超时,几乎是每个做 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 和调度时预留空间太大。排查顺序:
- 先用
nvidia-smi查看当前显存占用,确认没有其他进程占显存。 - 降低
--gpu-memory-utilization,比如从 0.9 降到 0.8。 - 降低
--max-model-len,缩短允许的最大序列长度。 - 降低
--max-num-seqs,限制同时处理的序列数量。 - 如果仍然不足,考虑模型量化或更换更小模型。
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 迭代速度很快,建议以官方文档和当前版本源码为准,不要完全依赖网上的旧教程。动手部署一次后,你对大模型推理系统的理解会比看十篇文章都深入。
更多推荐
所有评论(0)