当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > Transformers在vLLM中部署生成模型

Transformers在vLLM中部署生成模型

来源:17golang原创 2026-11-15 12:44:39 0浏览 收藏

把 Transformers 模型部署到 vLLM,核心不是把 AutoModelForCausalLM 的推理代码原样搬到服务器,而是把 Hugging Face 模型仓库或本地目录作为模型资产交给 vllm serve,再通过 OpenAI 兼容接口提供生成服务。这样,模型加载、批处理和 HTTP 服务由 vLLM 负责,业务侧只保留请求协议和结果处理。

官方地址:https://huggingface.co/docs/transformers/;https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html

要点速览
  • MODEL_ID 可以是 Hugging Face 模型标识,也可以是服务器能访问的本地模型目录;它决定权重、配置和 tokenizer 的来源。
  • vllm serve 暴露的是 HTTP 服务,聊天调用通常走 /v1/chat/completions,模型必须有可用的 chat template。
  • 客户端的 model、服务端的模型名称、采样参数和超时要成套管理,不能只改其中一个。

先区分 Transformers 模型和 vLLM 服务

Transformers 更像模型资产与加载接口:模型类、配置、tokenizer 和权重可以从 Hugging Face Hub 或本地目录加载。vLLM 则是面向在线推理的服务引擎,负责把同一模型包装成 HTTP 接口。部署时最重要的映射关系是:模型仓库名是输入,vLLM 是运行时,OpenAI 兼容接口是调用契约。

对象部署时的职责常见误区
Transformers 模型提供配置、权重、tokenizer 和生成所需的模型元数据把模型仓库名误当成已经启动的 API 地址
vLLM加载模型并提供生成服务只安装 Transformers 就期待出现 HTTP 服务
业务客户端按协议发送消息并处理返回值把本地 Transformers 推理参数全部照搬到 HTTP 请求
Transformers模型资产、vLLM运行时和OpenAI兼容接口之间的职责边界结构说明图
图1:结构说明图,展示 Transformers 模型资产、vLLM 服务运行时与调用方接口的静态边界,不是运行截图。

用 vllm serve 启动生成模型

下面把模型名放进环境变量,便于在切换模型时只改部署配置。示例模型名只是占位,实际使用时替换成与你的 Transformers 架构和显存条件匹配的模型仓库或本地目录。

# 指向 Hugging Face 模型仓库或服务器上的本地模型目录
export MODEL_ID="Qwen/Qwen2.5-1.5B-Instruct"

# 只把密钥放进环境变量,不要把真实密钥写进脚本或文章
export VLLM_API_KEY="change-me"

# 启动 OpenAI 兼容生成服务;--generation-config vllm 让服务端采样默认值更可控
vllm serve "$MODEL_ID" \
  --host 0.0.0.0 \
  --port 8000 \
  --dtype auto \
  --api-key "$VLLM_API_KEY" \
  --generation-config vllm

--dtype auto 让 vLLM 按运行环境选择数据类型;部署前仍需根据模型文档、显存和量化格式做资源决策。--generation-config vllm 用于避免模型仓库里的 generation_config.json 静默改变服务端的采样默认值。生产环境不要把调试接口直接暴露给公网,并应在反向代理或网关层补充访问控制、TLS 和限流。

如果模型所在仓库需要认证,应先在运行环境配置对应的 Hugging Face 访问凭据;不要把 token 写进 vllm serve 命令历史、文章或日志。若使用本地目录,先确认目录内的配置、tokenizer 和权重文件是一套可配对的模型资产。

用 Python 客户端调用 /v1/chat/completions

vLLM 的 OpenAI 兼容接口让业务侧不必直接依赖 Transformers 的模型类。客户端只需要把 base_url 指向服务的 /v1 前缀,把 model 与服务端加载的模型名保持一致。

from openai import OpenAI

# base_url 指向 vLLM 的 /v1 前缀,客户端会自动拼接具体接口路径
client = OpenAI(
    base_url="http://127.0.0.1:8000/v1",
    api_key="change-me",
    timeout=30.0,
)

response = client.chat.completions.create(
    # 这里要与 vLLM 实际暴露的模型名保持一致
    model="Qwen/Qwen2.5-1.5B-Instruct",
    messages=[
        {"role": "system", "content": "你是一个简洁的技术助手。"},
        {"role": "user", "content": "用一句话解释 vLLM 的作用。"},
    ],
    temperature=0.2,
    max_tokens=128,
)

# 先取 choices,再取 message.content,避免把完整响应对象当成字符串
text = response.choices[0].message.content
print(text)

服务端返回的是 OpenAI 风格的响应对象,业务代码应只依赖自己需要的字段。若应用需要稳定输出,可以进一步约束系统提示、温度、最大输出长度和重试策略,但这些参数应作为接口契约的一部分统一管理。

chat template 是聊天接口的关键兼容点

生成模型不等于聊天模型。聊天请求需要把 system、user 等角色消息转换成模型训练时使用的输入格式,这个转换通常由 tokenizer 配置中的 Jinja chat template 完成。若模型没有可用模板,vLLM 无法正确处理聊天请求,可以通过 --chat-template 指定一个模板文件或模板字符串。

# 模型没有可用 chat template 时,显式指定模板文件
vllm serve "$MODEL_ID" \
  --chat-template ./templates/chat-template.jinja \
  --generation-config vllm

# 只需要续写而不需要角色消息时,调用方应使用 completions 语义
# 这里的注释提醒:不要把普通文本续写请求误包装成 chat 请求

排查时先确认三件事:模型是文本生成任务而不是 embedding 或 rerank 任务;tokenizer 中确实存在适配的模板;客户端发送的 messages 内容格式与模板预期一致。模板能决定角色标记、结束标记和是否生成提示词,换模板可能改变输出,即使模型权重没有变化。

参数和错误模型要一起设计

从 API 设计角度,部署成功不只意味着进程能启动,还要让调用方知道哪些错误是配置错误、哪些是请求错误、哪些是服务暂时不可用。可以把问题按下面的边界处理:

现象优先检查调用方动作
服务启动就失败模型路径、架构支持、显存、权重格式不要重试同一个请求,先修复部署配置
聊天请求提示模板问题tokenizer 的 chat template 或 --chat-template返回明确配置错误,避免无限重试
模型不匹配或找不到客户端 model 与服务端模型名从服务配置注入模型名,不在业务代码散落硬编码
请求超时队列拥塞、输入过长、最大输出长度设置有限重试和退避,避免放大服务压力

还要注意采样参数的来源。vLLM 文档说明,默认情况下服务端可能读取模型仓库中的 generation_config.json;如果希望由服务方控制默认采样值,就在启动时显式使用 --generation-config vllm,并在客户端传入业务需要的参数。不要把“模型默认值”“服务默认值”和“请求覆盖值”混在一张配置表里。

vLLM部署中模型名称、聊天模板、采样参数和错误处理决策关系说明图
图2:决策说明图,展示模型名称、chat template、采样参数与错误处理之间的静态依赖,不是运行结果截图。

部署前用一张清单收敛兼容策略

  • 模型:记录模型仓库或本地目录、任务类型、tokenizer、权重格式和访问权限。
  • 服务:记录 vLLM 版本、监听地址、端口、GPU 资源、API 鉴权和是否显式指定生成配置。
  • 协议:记录使用 /v1/completions 还是 /v1/chat/completions,以及客户端的模型名映射。
  • 稳定性:记录超时、最大输入/输出长度、重试上限、并发上限和网关限流策略。
  • 升级:模型替换时同时检查 chat template、tokenizer 和采样默认值,不要只替换一个权重目录。

这样部署出来的不是“某台机器上能跑”的临时进程,而是一份可迁移的接口契约:模型资产可以更换,vLLM 运行时可以升级,调用方仍然只依赖明确的请求和错误边界。

常见问题

Transformers 和 vLLM 是二选一吗?

不是。Transformers 提供模型资产与加载生态,vLLM 负责更适合在线服务的运行时和 HTTP 入口。你可以用 Transformers 生态中的模型标识交给 vLLM 服务。

为什么模型能启动,但 chat 请求失败?

最常见原因是 tokenizer 没有可用 chat template,或模板与消息格式不匹配。检查模板配置,必要时通过 --chat-template 显式指定。

客户端 model 写什么?

写服务端实际暴露的模型名,并让它由部署配置注入。不要凭感觉把它改成任意别名,除非你同时确认 vLLM 的模型命名配置和客户端映射。

是否可以直接把 vLLM 的 API 暴露到公网?

不建议。API key 不是完整的网络边界;生产环境还应使用反向代理、TLS、访问控制、限流和日志脱敏,并关闭不必要的开发接口。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Transformers datasets流式读取训练数据Transformers datasets流式读取训练数据
上一篇
Transformers datasets流式读取训练数据
OpenAI Agents API保存持久会话
下一篇
OpenAI Agents API保存持久会话
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    1037次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    1035次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    1178次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    1139次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    982次使用