Linux 或者 Ubuntu 离线使用 vllm启动大模型

使用 vllm 启动 QWQ-32B 的命令

完整的命令如下

shell 复制代码
python -m vllm.entrypoints.openai.api_server \
--model /root/.cache/modelscope/hub/models/Qwen/QwQ-32B \
--tensor-parallel-size 4 \
--host 0.0.0.0 \
--port 8000 \
--max-num-batched-tokens 2048 \
--gpu-memory-utilization 0.85 \
--hosted-model-name QwQ-32B

参数详解

1. python -m vllm.entrypoints.openai.api_server
  • 启动的是 vLLM 的 OpenAI API 兼容服务器
  • 这个服务器对外提供与 OpenAI API 类似的接口(如 /v1/chat/completions
  • 可以用 curl、Python SDK 或前端调用,兼容 OpenAI 格式请求

2. --model /root/.cache/modelscope/hub/models/Qwen/QwQ-32B
  • 指定要加载的模型路径
  • 这里是本地存储的 QwQ-32B 模型,通常是一个 HuggingFace 风格的模型文件夹
  • 支持 GGUF、HuggingFace、以及经过 vLLM 转换后的张量并行模型

3. --tensor-parallel-size 4
  • 表示使用 4 块 GPU 来进行 Tensor Parallelism(张量并行)
  • QwQ-32B 是一个大模型,单卡放不下,所以需要拆分到多个 GPU 上推理
  • 如果你有 4 张卡,这个设置合理;如果只有 1 张卡,就设为 --tensor-parallel-size 1

4. --host 0.0.0.0
  • 设置监听地址为所有网络接口
  • 这样可以从外部访问该服务(比如从其他机器通过 IP 访问)
  • 如果只想本机访问,可以改为 --host 127.0.0.1

5. --port 8000
  • 设置服务监听的端口号为 8000
  • 可以通过浏览器或 API 请求访问:http://localhost:8000http://<ip>:8000

6. --max-num-batched-tokens 2048
  • 控制每次 batch 中最多处理多少个 token(输入 + 输出)
  • 增大这个值可以提高吞吐量,但会占用更多显存
  • 默认值通常是 2560 左右,这里设为 2048 是为了控制显存使用

7. --gpu-memory-utilization 0.85
  • 设置 GPU 显存使用率为 85%
  • 这是为了防止 OOM(Out Of Memory),留出一部分缓冲空间
  • 默认值是 0.9,如果你的显存较小,可以适当降低(如 0.7)

8. --hosted-model-name QwQ-32B

它表示:虽然模型实际路径是 /root/.cache/...,但对外暴露的模型名是 QwQ-32B


要让 MODEL_NAME = "QwQ-32B" 成功调用你的本地模型,你需要在启动 vLLM 服务时加上一个参数::

shell 复制代码
--hosted-model-name QwQ-32B \

# 也就是
--host 0.0.0.0 \
--port 8000 \
--model /root/.cache/modelscope/hub/models/Qwen/QwQ-32B \
--hosted-model-name QwQ-32B \

它表示:虽然模型实际路径是 /root/.cache/...,但对外暴露的模型名是 QwQ-32B

示例请求(使用 curl)

可以使用如下命令测试服务是否正常运行:

bash 复制代码
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
  "model": "QwQ-32B",
  "messages": [{"role": "user", "content": "讲个笑话吧"}]
}'

示例请求代码(使用python)

python 复制代码
import openai

client = openai.OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="EMPTY"  # 如果没有启用鉴权,可以为空
)

completion = client.chat.completions.create(
    model="QwQ-32B",  # ← 这里就能用了!
    messages=[
        {"role": "user", "content": "你好,请讲个笑话。"}
    ]
)

print(completion.choices[0].message.content)
相关推荐
donoot7 小时前
Linux系统下图书馆级电子书全自动标准化分类整理完整实施方案
大数据·linux·运维·电子书管理
Felix-lxd7 小时前
Ubuntu 22.04 配置 Nginx
linux·nginx·ubuntu
Tim_Van8 小时前
在 CentOS 7 中安装 Chromium 的完整步骤
linux·运维·chrome·centos
2023自学中9 小时前
C++ 内存追踪器
linux·c++
啵啵鱼爱吃小猫咪10 小时前
Ubuntu 20.04 + ROS Noetic 源码安装 libfranka 0.8.0 和 franka_ros 0.8.0 完整教程
linux·运维·ubuntu
ljs64827395111 小时前
Linux运维实操:vi编辑器永久配置静态IP(CentOS系列)
linux·运维·编辑器
dddwjzx11 小时前
嵌入式Linux C应用编程入门——高级I/O
linux·嵌入式
Waay13 小时前
Linux 三个核心环境变量配置文件、作用域、生效方式完整梳理
linux·运维·学习·云原生·容器
星空语13 小时前
音频001_Android+Linux车载/手机音频全链路分层架构图
android·linux·音视频
携程DBA13 小时前
数据库软限制相关研究
linux·mysql·性能