3、vLLM基础入门:安装、配置与首次推理

好,咱们进入正题。这一章,我会带你亲手把 vLLM 跑起来。

你可能会问:为什么要用 vLLM?说白了,它就是个大模型推理加速器。我见过太多团队,模型训练好了,推理时却慢得像蜗牛。vLLM 的 PagedAttention 机制,能让你用更少的显存,跑更大的模型。嗯,这很关键。

3.1 安装与配置:别踩我踩过的坑

安装 vLLM 其实很简单。我个人习惯用 pip 直接装,干净利落。

pip install vllm

等等,别急着敲回车。我建议你先确认一下 CUDA 版本。vLLM 对 CUDA 有要求,至少 11.8 以上。我曾经在 CUDA 11.4 的环境下硬装,结果编译报错,折腾了半天。

避坑指南: 我曾经在 CentOS 7 上装 vLLM,系统 GCC 版本太低,编译到一半就挂了。后来换了 Ubuntu 20.04,一路顺畅。如果你用 CentOS,记得先升级 GCC 到 9 以上。

装完之后,验证一下:

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

如果没报错,恭喜你,环境搞定了。

3.2 加载第一个模型:从 Hugging Face 拉下来

环境就绪,我们来加载第一个模型。我选的是 facebook/opt-125m,它很小,适合测试。

from vllm import LLM

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

就这么两行?对,就这么简单。但你要注意,第一次加载会下载模型文件。如果你的网络不好,可能会等很久。我建议你提前用 git lfs 把模型拉到本地,然后指定本地路径。

小技巧: 如果你在公司内网,记得配好代理。我遇到过同事没配代理,下载到一半超时,心态直接崩了。

加载成功后,你会看到类似这样的输出:

INFO 06-10 10:00:00 llm_engine.py:100] Initializing an LLM engine with config:
model='facebook/opt-125m', dtype=torch.float16, ...

看到这个,说明模型已经加载到显存里了。你可以用 nvidia-smi 看看显存占用,vLLM 的显存管理确实很高效。

3.3 使用 vLLM 进行推理测试

模型加载好了,我们来让它说句话。

output = llm.generate("Hello, my name is")
print(output)

你会得到类似这样的结果:

[RequestOutput(request_id=..., prompt="Hello, my name is", 
                outputs=[CompletionOutput(index=0, text=" Sarah and I am a student", ...)])]

嗯,它续写出来了。你可能会觉得,这跟普通的 Hugging Face pipeline 没啥区别?别急,我们来看看性能。

我写个简单的测试:

import time

prompts = ["What is AI?"] * 100
start = time.time()
outputs = llm.generate(prompts)
end = time.time()

print(f"处理 100 个请求耗时: {end - start:.2f} 秒")

你会发现,vLLM 的批处理能力非常强。同样的请求量,如果用原生 Transformers,显存早就爆了。这就是 vLLM 的核心优势——连续批处理

核心理解: vLLM 不是一次只处理一个请求,而是把多个请求拼在一起,动态调度。你想想看,这就像高速公路上的并道,效率自然高。

3.4 理解 vLLM 的 API 接口

vLLM 提供了两种 API:Python 原生接口和 OpenAI 兼容的 HTTP 接口。我个人更推荐后者,因为它可以直接对接现有的客户端工具。

3.4.1 Python 原生接口

刚才我们用的就是原生接口。它的核心是 LLM 类和 SamplingParams

from vllm import SamplingParams

params = SamplingParams(
    temperature=0.7,
    top_p=0.9,
    max_tokens=100
)
output = llm.generate("Once upon a time", params)
print(output[0].outputs[0].text)

参数含义很直观:temperature 控制随机性,top_p 控制采样范围。我一般调参时,先固定 temperature=0.1 做确定性输出,调试通了再放开。

3.4.2 OpenAI 兼容的 HTTP 接口

这是 vLLM 的一大亮点。启动服务:

python -m vllm.entrypoints.openai.api_server \
    --model facebook/opt-125m \
    --port 8000

然后你就可以用 curl 或者任何 OpenAI 客户端来调用了:

curl http://localhost:8000/v1/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "facebook/opt-125m",
        "prompt": "What is the capital of France?",
        "max_tokens": 50
    }'

返回的 JSON 格式和 OpenAI 完全一致。这意味着什么?你现有的 ChatGPT 客户端代码,换个 URL 就能用 vLLM 了。我在项目中就是这么干的,迁移成本几乎为零。

接口 适用场景 优点
Python 原生接口 批量离线推理、测试 灵活、可控性强
HTTP 接口 在线服务、生产环境 兼容 OpenAI、易于集成
我的建议: 开发阶段用 Python 接口调试,上线时切到 HTTP 接口。这样既灵活又稳定。

知识体系总览

下面这张图,帮你把本章的核心逻辑串起来:

vLLM 基础入门知识体系 安装与配置 加载第一个模型 推理测试 pip 安装 CUDA 检查 版本验证 Hugging Face 本地路径 显存管理 单条推理 批量推理 性能测试 API 接口 Python 原生接口 HTTP 接口

这张图很直观:从安装配置开始,到加载模型,再到推理测试,最后通过 API 接口对外提供服务。每一步都有对应的子项,你按这个路径走,不会迷路。


专注资料整理