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系统 ✅
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐