vLLM 搭配 OpenAI API:如何优雅地解决参数兼容性问题

在从 Hugging Face 下载大模型时,我们下载了什么中,我们聊了下载大模型时,各类文件的作用。今天,我们继续深入,看看如何用 vLLM 搭建在线推理服务,并解决 OpenAI API 升级后的一些兼容性问题。

本文重点:基于 vLLM 提供的 OpenAI API 兼容接口,实现在线推理(Online Inference)。


vLLM 推理服务的基本启动方式

参考 vLLM 官方文档 openai-compatible-server 和 Engine Arguments,我们可以快速启动一个大模型推理服务:

python 复制代码
python3 -m vllm.entrypoints.openai.api_server \
  --host 0.0.0.0 \
  --port 8000 \
  --dtype float16 \
  --served-model-name xxx  \
  --model path_to_model  \
  --trust-remote-code  \
  --tensor-parallel-size 2  \
  --gpu-memory-utilization 0.9  \
  --enable-prefix-caching  \
  --enable-chunked-prefill  \
  --task generate  \
  --allowed-local-media-path /data/llms/images  \
  --max-model-len 8192 \
  --generation-config path_to_model_generation_config

大部分参数的含义都可以直接参考官方文档,这里我们重点关注 --generation-config 这个参数。

这个参数的作用是指定 生成配置文件 ,也就是上一篇文章《从 Hugging Face 下载大模型时,我们下载了什么》中提到的 推理与生成配置 中的 generation_config.json。

我们以 Qwen2.5 系列模型的 generation_config.json 为例,看看这个文件包含哪些关键参数:

json 复制代码
{
  "bos_token_id": 151643,
  "pad_token_id": 151643,
  "do_sample": true,
  "eos_token_id": [
    151645,
    151643
  ],
  "repetition_penalty": 1.05,
  "temperature": 0.7,
  "top_p": 0.8,
  "top_k": 20,
  "transformers_version": "4.37.0"
}
  • bos_token_id、pad_token_id、eos_token_id:一些特殊 token 的 ID,可参考 tokenizer.json
  • repetition_penalty:重复 token 生成的惩罚项,控制文本的重复度
  • temperature、top_p、top_k:控制生成结果的多样性(top_k 与 top_p 一般二选一)

根据 vLLM 文档 Inference Parameters,temperature、top_p、top_k 的默认值分别是 1.0、1.0、-1。


OpenAI API 兼容性问题 & 解决方案

在 OpenAI API 最新版本的 Chat Completion 文档中,我们可以看到,一些常见的参数,比如 repetition_penalty 和 top_k,已经被移除。

那么,问题来了:如果我们的推理服务基于 vLLM,而调用方代码仍然需要使用这些参数,应该怎么办?

解决方案来自 GitHub 讨论:在 API 请求时,使用 extra_body 参数,把不受支持的参数塞进去。

示例代码如下:

python 复制代码
from openai import OpenAI

client = OpenAI()
client.chat.completions.create(
  model='gpt-4',
  messages=....,
  extra_body={'repetition_penalty': 2},
)

这样,我们就可以在 使用 vLLM 作为推理引擎时,继续兼容 OpenAI API 旧版参数 了。

此外,在测试 Qwen2.5-VL 系列模型时,我发现 调整 top_k 比调整 top_p 更有效 ,可以更明显地影响生成质量。如果你在调优 VL 模型的生成效果时,可以重点关注 top_k。


总结

  1. vLLM 提供了兼容 OpenAI API 的推理服务,但 generation_config.json 仍然需要合理配置。
  2. OpenAI API 升级后,一些老参数(如 repetition_penalty、top_k)已被移除,但可以用 extra_body 继续传递。
  3. 在 Qwen2.5-VL 这样的模型中,top_k 的调整往往比 top_p 更有效。

希望这篇文章能帮你更好地理解 vLLM 在 OpenAI API 兼容性上的处理方法。如果你在实际使用过程中遇到了其他问题,欢迎留言交流!


感谢阅读,如果这篇文章对你有所帮助,欢迎关注算法工程笔记公众号!

相关推荐
Tsuki_tl4 分钟前
【优选算法 — 双指针】经典例题题解+算法总结
算法·蓝桥杯·力扣·刷题·双指针·1024程序员节·优选算法
拓恒技术1 小时前
内河航道无人机智能巡检系统与算法应用
人工智能·深度学习·算法·无人机·智慧城市
如何原谅奋力过但无声1 小时前
【LeetCode hot100】代码随想录未cover部分
数据结构·算法·leetcode
INGNIGHT1 小时前
377.组合总和 Ⅳ(背包)
c++·算法·1024程序员节
拓恒技术1 小时前
城市管理中的无人机AI识别算法:架构、场景与落地
人工智能·算法·视觉检测·无人机·1024程序员节
吴可可1232 小时前
Accumark二次开发环境搭建与API入门
算法
木井巳3 小时前
【动态规划: 线性dp】解码方法
java·算法·leetcode·动态规划·推荐算法
春弦_11 小时前
自用算法整理二
数据结构·算法·图论
hetao173383712 小时前
2026-10-22~23 hetao1733837 的刷题记录
c++·算法
java_nnnn13 小时前
LeetCode刷题滑动窗口(串联所有单词的子串+最小覆盖的子串)Java
算法·leetcode·职场和发展