vLLM 使用方式与典型场景
四、使用方式与典型场景
示例一:用 OpenAI SDK 直接切到本地 vLLM 服务
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:8000/v1",
api_key="EMPTY", # 本地服务不校验时随意填,但字段必须有
)
resp = client.chat.completions.create(
model="qwen-local", # 必须是启动时 --served-model-name 的值
messages=[
{"role": "system", "content": "你是技术支持,回答尽量简短。"},
{"role": "user", "content": "接口报 400 上下文超长,怎么排查?"},
],
temperature=0.3,
max_tokens=256,
)
print(resp.choices[0].message.content)
print(resp.usage) # 输入输出 token 数,用于成本核算
要点:api_key 字段即使不校验也要填,某些 SDK 会做非空校验;model 必须与服务端的 served-model-name 一致,否则报模型不存在。
示例二:离线批量推理(把离线任务从 CPU 挪到 GPU)
from vllm import LLM, SamplingParams
llm = LLM(
model="<模型路径>",
tensor_parallel_size=1,
gpu_memory_utilization=0.9,
max_model_len=4096,
)
params = SamplingParams(temperature=0.2, top_p=0.9, max_tokens=256)
prompts = [
"总结下面这段话的要点:……",
"把下面的工单分类为 咨询/投诉/退款/技术:……",
# 一次可提交成百上千条,引擎会自动组批
]
outputs = llm.generate(prompts, params)
for p, o in zip(prompts, outputs):
print(p[:20], "->", o.outputs[0].text[:80])
离线批量的价值在于把「每条请求一次前向」变成「一次前向处理一批」,同样的显卡做数据清洗、批量标注、离线摘要时,耗时下降通常非常明显。注意 SamplingParams 里也可以直接给每个 prompt 单独设置参数,便于同一批里混用不同采样策略。
适合与不适合的场景
适合:在线高并发 API 服务;多卡大模型部署;需要 OpenAI 协议兼容以减少改动的存量系统;离线批量生成任务;给多个下游应用共用一套模型服务。
不适合:Windows 原生环境(官方不支持);只有 CPU 或消费级低端卡的场景;单用户低频本地聊天体验(直接跑 transformers 或轻量运行时更省事);需要自定义训练逻辑的场景(vLLM 是推理引擎,不负责训练)。

