vLLM推理框架下跑Qwen3.5-9B及本地openai调用
本文介绍了使用vLLM推理框架运行Qwen3.5-9B大模型并进行本地OpenAI调用的完整流程。内容包括环境配置、vLLM离线批量推理实现、本地模型服务部署以及OpenAI方式调用验证。重点讲解了如何通过vLLM启动本地模型服务,包括单卡/多卡部署、显存优化策略,并提供了curl和Python两种测试方法。最终实现了一个私有化的OpenAI API服务,可兼容各种AI框架调用。该方案为大模型本地
vLLM推理框架下跑Qwen3.5-9B及本地openai调用
1.环境配置
[!IMPORTANT]
先决条件
- 操作系统:Linux
- Python: 3.10 – 3.13
以NVIDIA GPU为例
(1)创建并配置基础环境
conda create -n myenv python=3.10 -y
conda activate myenv
pip install torch torchvision torchaudio
pip install --upgrade uv #uv是一个非常快的 Python 环境管理器,来创建和管理 Python 环境。
uv pip install vllm --torch-backend=auto
2.vllm推理框架直接推理
离线批量推理
官网https://github.com/vllm-project/vllm/blob/main/examples/basic/offline_inference/basic.py的本地离线推理代码
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
from vllm import LLM, SamplingParams
# Sample prompts.
prompts = [
"Hello, my name is",
"The president of the United States is",
"The capital of France is",
"The future of AI is",
]
# Create a sampling params object.
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
def main():
# Create an LLM.
llm = LLM(
model="/Qwen35test/Qwen3.5-9B", #模型权重路径
max_model_len=8192,
gpu_memory_utilization=0.7,
)
# Generate texts from the prompts.
# The output is a list of RequestOutput objects
# that contain the prompt, generated text, and other information.
outputs = llm.generate(prompts, sampling_params)
# Print the outputs.
print("\nGenerated Outputs:\n" + "-" * 60)
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}")
print(f"Output: {generated_text!r}")
print("-" * 60)
if __name__ == "__main__":
main()
3.采用vllm起一个大模型服务,再通过openai库进行调用
3.1本地起vllm大模型服务
(1)起一个模型的vllm服务
起本地模型vllm服务
vllm serve /Qwen35test/Qwen3.5-9B #模型权重路径
终端中执行,即可看到

类似这种,即启动成功
如果遇到显存不足,则可以调整max_seq_len的大小和gpu显存初始化占用率
vllm serve /data/LK/Qwen35test/Qwen3.5-9B \
--max-model-len 8192 \
--gpu-memory-utilization 0.6
[!CAUTION]
为什么这是关键优化点
KV Cache 显存占用:
≈ hidden_size × layers × seq_len👉 seq_len 越大,显存爆炸越严重
如果是多卡服务器,我们也可以指定卡运行
CUDA_VISIBLE_DEVICES=0 vllm serve /Qwen35test/Qwen3.5-9B
指定多张卡时
CUDA_VISIBLE_DEVICES=0,1 vllm serve ...
(2)起多个大模型的本地vllm服务
# 模型1
CUDA_VISIBLE_DEVICES=0 vllm serve modelA
# 模型2
CUDA_VISIBLE_DEVICES=1 vllm serve modelB
......
(3)多卡跑一个模型起vllm服务
CUDA_VISIBLE_DEVICES=0,1,2,3 vllm serve model \
--tensor-parallel-size 4
3.2采用openai方式进行推理验证
(1)服务启动后状态验证
从日志看:
Starting vLLM API server 0 on http://0.0.0.0:8000
👉 说明:
✔ 模型已经加载成功(Qwen3.5-9B)
✔ GPU 正常工作(显存也OK)
✔ API 服务已经启动
✔ OpenAI兼容接口已经就绪
❗你看到的 404 是正常的
GET / → 404
👉 原因:
vLLM 没有根路径 / 接口
✅ 正确访问方式
你现在应该访问:
👉 文档页面
http://localhost:8000/docs
👉 FastAPI 自动生成接口文档(很重要)
查看FastAPI官方文档、手册
(2)测试vllm模型接口(核心)
✅ 方法1:curl测试(最直接)
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "/Qwen35test/Qwen3.5-9B",
"messages": [
{"role": "user", "content": "你好,介绍一下你自己"}
]
}'
✅ 方法2:Python(推荐)
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="EMPTY" # vllm不校验
)
resp = client.chat.completions.create(
model="/Qwen35test/Qwen3.5-9B",
messages=[
{"role": "user", "content": "你好"}
]
)
print(resp.choices[0].message.content)
⚠️ 一个关键点(很多人踩坑)
model="/Qwen35test/Qwen3.5-9B"
👉 模型路径必须与启动时保持一致
或者你可以先查:
curl http://localhost:8000/v1/models
4.总结
完成以上步骤,现在实际上已经拥有了一个:
“私有 OpenAI API”
👉 可以被任何框架调用:
- LangChain ✅
- FastAPI ✅
- 前端(Vue/React)✅
l=“/Qwen35test/Qwen3.5-9B”
👉 模型路径必须与启动时保持一致
或者你可以先查:
curl http://localhost:8000/v1/models
------
## 4.总结
完成以上步骤,现在实际上已经拥有了一个:
“私有 OpenAI API”
👉 可以被任何框架调用:
- LangChain ✅
- FastAPI ✅
- 前端(Vue/React)✅
- Agent系统 ✅
更多推荐
所有评论(0)