vLLM Linux 双卡部署大模型服务器指南

vLLM Linux 双卡部署大模型服务器指南

1. 环境准备

1.1 硬件要求

  • GPU: 2 张 NVIDIA GPU(推荐 RTX 3090/4090 或更高)
  • 显存: 每张 GPU 至少 24GB(以支持 Qwen3.5-9B-GPTQ-4bit 模型)
  • 内存: 至少 32GB
  • 存储: 至少 50GB 可用空间

1.2 软件依赖

bash 复制代码
# 安装 NVIDIA 驱动(需适配 CUDA 版本)
sudo apt-get install nvidia-driver-535

# 安装 CUDA Toolkit 12.x
# 参考 NVIDIA 官方文档

1.3 创建 Conda 环境

bash 复制代码
# 创建并激活虚拟环境
conda create -n vllm-qwen python=3.13 -y
conda activate vllm-qwen

# 安装 vLLM(支持 GPTQ 量化)
pip install vllm

2. 模型准备

2.1 下载模型

将模型文件放置到指定目录:

复制代码
/home/zadyd/桌面/vllm_server/models/DavidWen2025/Qwen3___5-9B-GPTQ-4bit/

2.2 模型文件结构

复制代码
Qwen3___5-9B-GPTQ-4bit/
├── config.json
├── generation_config.json
├── model-00001-of-00002.safetensors
├── model-00002-of-00002.safetensors
├── tokenizer.json
└── quantize_config.json

3. 启动脚本配置

3.1 创建启动脚本 start_server.sh

bash 复制代码
#!/bin/bash
# vLLM 双卡部署 Qwen3.5-9B-GPTQ-4bit (TP=2)

MODEL_PATH="/home/zadyd/桌面/vllm_server/models/DavidWen2025/Qwen3___5-9B-GPTQ-4bit"
API_KEY="sk-vllm-2024"
MODEL_NAME="qwen3.5-9b"

source ~/miniconda3/etc/profile.d/conda.sh
conda activate vllm-qwen

python -m vllm.entrypoints.openai.api_server \
    --model ${MODEL_PATH} \
    --tensor-parallel-size 2 \          # 双卡部署
    --dtype float16 \                   # 数据类型
    --kv-cache-dtype fp8 \              # KV缓存使用FP8压缩
    --gpu-memory-utilization 0.85 \     # GPU显存使用率
    --max-model-len 262144 \           # 最大上下文窗口(262K tokens)
    --port 8000 \                       # 服务端口
    --host 0.0.0.0 \                   # 允许外部访问
    --trust-remote-code \               # 信任远程代码
    --enforce-eager \                   # 强制eager模式
    --api-key ${API_KEY} \              # API密钥
    --served-model-name ${MODEL_NAME} \ # 模型名称
    --enable-auto-tool-choice \         # 启用自动工具选择
    --tool-call-parser qwen3_xml \      # Qwen3 XML工具解析器
    --stream-interval 1 \               # 流式响应间隔(防止超时)
    --distributed-timeout-seconds 300   # 分布式超时时间

3.2 赋予执行权限

bash 复制代码
chmod +x start_server.sh

4. 启动服务器

4.1 直接启动

bash 复制代码
bash start_server.sh

4.2 后台运行(使用 nohup)

bash 复制代码
nohup bash start_server.sh > vllm.log 2>&1 &

4.3 检查启动状态

bash 复制代码
# 查看进程
ps aux | grep vllm

# 查看日志
tail -f vllm.log

5. API 访问方式

5.1 本地访问

bash 复制代码
URL: http://localhost:8000/v1

5.2 局域网访问

bash 复制代码
# 服务器IP: 192.168.110.123
URL: http://192.168.110.123:8000/v1

5.3 认证信息

参数
API Key sk-vllm-2024
模型名称 qwen3.5-9b

6. API 使用示例

6.1 使用 OpenAI Chat Completions API

python 复制代码
from openai import OpenAI

client = OpenAI(
    base_url="http://192.168.110.123:8000/v1",
    api_key="sk-vllm-2024"
)

response = client.chat.completions.create(
    model="qwen3.5-9b",
    messages=[
        {"role": "user", "content": "你好"}
    ],
    max_tokens=2048
)

print(response.choices[0].message.content)

6.2 使用 Anthropic Messages API

python 复制代码
import requests

response = requests.post(
    "http://192.168.110.123:8000/v1/messages",
    headers={
        "Authorization": "Bearer sk-vllm-2024",
        "Content-Type": "application/json"
    },
    json={
        "model": "qwen3.5-9b",
        "messages": [
            {"role": "user", "content": [{"type": "text", "text": "你好"}]}
        ],
        "max_tokens": 2048
    }
)

print(response.json())

6.3 使用 cURL 测试

bash 复制代码
curl -X POST http://localhost:8000/v1/chat/completions \
  -H "Authorization: Bearer sk-vllm-2024" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3.5-9b",
    "messages": [{"role": "user", "content": "你好"}],
    "max_tokens": 100
  }'

7. 关键参数说明

参数 说明 默认值
--tensor-parallel-size 张量并行数(双卡设为2) 1
--dtype 数据类型(float16/bfloat16) float16
--kv-cache-dtype KV缓存类型(fp8可节省显存) fp8
--gpu-memory-utilization GPU显存使用率 0.85
--max-model-len 最大上下文长度(Qwen3.5支持262K) 2048
--stream-interval 流式响应间隔(防止客户端超时) 1
--distributed-timeout-seconds 分布式操作超时时间 300

8. 常见问题与解决方案

8.1 模型响应中断

问题: 模型说话说到一半就没响应了

原因: 流式响应间隔过长,客户端超时断开

解决方案 : 添加 --stream-interval 1 参数

8.2 显存不足

问题: CUDA out of memory

解决方案:

bash 复制代码
# 降低显存使用率
--gpu-memory-utilization 0.7

# 使用FP8 KV缓存
--kv-cache-dtype fp8

8.3 端口被占用

问题: Address already in use

解决方案:

bash 复制代码
# 更换端口
--port 8001

# 或关闭占用进程
lsof -ti:8000 | xargs kill -9

8.4 API Key 错误

问题: Unauthorized

解决方案: 确保请求头包含正确的 API Key

bash 复制代码
-H "Authorization: Bearer sk-vllm-2024"

9. 监控与日志

9.1 查看实时日志

bash 复制代码
tail -f vllm.log

9.2 检查服务器状态

bash 复制代码
curl http://localhost:8000/health

9.3 查看可用模型

bash 复制代码
curl http://localhost:8000/v1/models

10. 安全建议

  1. 防火墙配置: 限制端口访问

    bash 复制代码
    sudo ufw allow from 192.168.110.0/24 to any port 8000
  2. API Key 管理: 使用强密钥,定期更换

  3. HTTPS: 生产环境建议配置 SSL/TLS


附录:启动成功日志示例

复制代码
(APIServer pid=1914529) INFO 05-08 17:54:08 [api_server.py:602] Starting vLLM server on http://0.0.0.0:8000
(APIServer pid=1914529) INFO:     Started server process [1914529]
(APIServer pid=1914529) INFO:     Application startup complete.

文档版本 : v1.0
创建日期 : 2026年5月
适用模型: Qwen3.5-9B-GPTQ-4bit

相关推荐
j_xxx404_1 小时前
Linux命名管道:跨进程通信实战指南|附源码
linux·运维·服务器·人工智能·ai
楼田莉子2 小时前
仿Muduo的高并发服务器:Http协议模块
linux·服务器·c++·后端·学习
紫小米8 小时前
后端日志管理
python·fastapi
agicall.com8 小时前
座机通话双方语音分离技术解决方案详解
人工智能·语音识别·信创电话助手·座机语音转文字·固话座机录音转文字
AI机器学习算法8 小时前
《动手学深度学习PyTorch版》笔记
人工智能·学习·机器学习
milo.qu8 小时前
RockyLinux9.7 docker部署Jisti Meet
linux·docker·容器
GanGanGanGan_8 小时前
CentOS 7.9 glibc 2.17 源码编译升级到 glibc 2.31
linux·运维·centos·glibc
Goboy8 小时前
「我的第一次移动端 AI 办公」TRAE SOLO 三端联动, 通勤路上就把活干了,这设计,老罗看了都想当场退役
人工智能·ai编程·trae
qq_452396238 小时前
第二十篇:《UI自动化测试的未来:AI驱动的智能测试与低代码平台》
人工智能·低代码·ui