这份手册是 “手把手教学”,从环境准备、模型下载,到部署启动、接口调用,再到问题排查,每一步都附具体代码和操作截图逻辑,就算是新手也能跟着做,最终实现 “发送请求→AI 返回结果” 的完整流程!

一、部署前准备:明确目标 + 软硬件清单

1. 部署目标

  • 模型:Qwen2.5-3B-Instruct(通义千问轻量化模型,兼顾性能和易用性,适合新手)

  • 框架:VLLM(高并发、低延迟,支持 API 调用,社区生态成熟)

  • 功能:通过 HTTP 接口调用模型,实现 “文案生成、问答、翻译” 等功能,支持多用户同时访问

  • 最终效果:用 Python 代码发送请求,1 秒内收到 AI 的精准回复

2. 软硬件必备清单(最低配置 + 推荐配置)

类别最低配置推荐配置备注
操作系统Ubuntu 20.04 LTSUbuntu 22.04 LTS不推荐 Windows(GPU 驱动兼容性差),Mac 可选(仅支持 CPU 部署)
GPUNVIDIA GTX 3090(24GB 显存)NVIDIA A100(40GB 显存)必须支持 CUDA(算力≥7.0),3B 模型 FP16 精度需≥14GB 显存
CPU8 核 Intel i7/Ryzen 716 核 Intel i9/Ryzen 9并发访问时需足够 CPU 核心支撑
内存(RAM)32GB64GB避免加载模型时内存不足
硬盘空间50GB(SSD)100GB(NVMe SSD)存储模型权重(3B 模型约 10GB)+ 环境文件
网络100Mbps 宽带1Gbps 宽带下载模型权重(约 10GB)需高速网络

3. 提前安装的基础工具

  • Git:用于克隆代码仓库(sudo apt install git

  • Conda:管理 Python 环境(避免版本冲突,推荐 Miniconda)

    • 下载命令:wget https://repo.anaconda.com/miniconda/Miniconda3-py310_24.1.2-0-Linux-x86_64.sh

    • 安装命令:bash Miniconda3-py310_24.1.2-0-Linux-x86_64.sh(一路回车,最后输入 yes)

    • 激活环境:source ~/.bashrc(激活后命令行前会出现 (base))

二、 step1:搭建 Python 环境(避坑关键!)

1. 创建独立 conda 环境

# 创建名为llm-deploy的环境,Python版本指定3.10(兼容性最好)
conda create -n llm-deploy python=3.10
# 激活环境(后续所有操作都在这个环境中进行)
conda activate llm-deploy
  • 验证:命令行前出现 (llm-deploy),说明环境创建成功

2. 安装 CUDA 驱动(GPU 部署核心!)

  • 查看 GPU 型号:nvidia-smi(如果显示 GPU 信息,说明已安装驱动;如果报错,按以下步骤安装)

  • 安装对应 CUDA 版本(推荐 12.1,兼容性最广):

# 安装CUDA 12.1(Ubuntu 22.04为例)
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sudo sh cuda_12.1.0_530.30.02_linux.run
  • 安装时注意:只勾选 “CUDA Toolkit”,取消勾选 “Driver”(如果已安装驱动),其他默认下一步

  • 配置环境变量:

echo 'export PATH=/usr/local/cuda-12.1/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
  • 验证:nvcc -V(显示 CUDA 版本 12.1,说明安装成功)

3. 安装部署依赖库

# 安装VLLM(核心框架,支持高并发推理)
pip install vllm==0.4.0  # 固定版本,避免兼容性问题
# 安装Hugging Face相关库(下载模型、处理权重)
pip install transformers==4.41.2 datasets==2.14.7
# 安装API相关库(发送请求、处理响应)
pip install requests fastapi uvicorn
# 安装工具库(处理数据、日志)
pip install numpy pandas python-dotenv
  • 验证:pip list | grep vllm(显示 vllm 0.4.0,说明安装成功)

三、 step2:下载模型权重(Qwen2.5-3B-Instruct)

1. 两种下载方式(选一种即可)

方式 1:通过 Hugging Face 直接下载(推荐,自动校验)
# 创建模型存储目录
mkdir -p /workspace/models/qwen
cd /workspace/models/qwen

# 用transformers的snapshot_download下载(支持断点续传)
python -c "from huggingface_hub import snapshot_download; snapshot_download(repo_id='Qwen/Qwen2.5-3B-Instruct', local_dir='./', local_dir_use_symlinks=False)"
  • 说明:repo_id 是模型在 Hugging Face 的地址,下载完成后,目录下会有 config.json、model-00001-of-00002.safetensors 等文件(约 10GB)

方式 2:手动下载(适合网络不稳定的情况)
  1. 打开 Hugging Face 模型页面:https://huggingface.co/Qwen/Qwen2.5-3B-Instruct

  2. 点击 “Files and versions”,下载以下核心文件:

    • config.json、generation_config.json、tokenizer_config.json、tokenizer.model

    • model-00001-of-00002.safetensors、model-00002-of-00002.safetensors

  3. 将所有文件放入/workspace/models/qwen目录

2. 验证模型完整性

# 查看目录下文件数量(应不少于8个核心文件)
ls /workspace/models/qwen | wc -l
# 检查safetensors文件大小(两个文件总大小约10GB)
du -sh /workspace/models/qwen/*.safetensors
  • 正常情况:model-00001-of-00002.safetensors 约 5GB,model-00002-of-00002.safetensors 约 5GB,无损坏则说明下载成功

四、 step3:用 VLLM 部署模型(支持 API 调用)

1. 启动 VLLM API 服务

# 进入模型目录
cd /workspace/models/qwen

# 启动VLLM服务(关键参数说明)
python -m vllm.entrypoints.api_server \
  --model ./ \  # 模型权重目录(当前目录)
  --dtype float16 \  # 数据精度(FP16,平衡速度和显存)
  --port 8000 \  # 端口号(后续调用API用)
  --host 0.0.0.0 \  # 允许外部访问(局域网内其他设备可调用)
  --tensor-parallel-size 1 \  # 显卡数量(单卡部署填1)
  --max-num-batched-tokens 4096 \  # 单次批量处理的最大token数(根据显存调整)
  --max-model-len 8192  # 模型支持的最大上下文长度(3B模型默认8192)

启动成功的标志:

INFO:     Started server process [12345]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
  • 注意:启动时会加载模型权重到显存,约占用 14-16GB 显存,耐心等待 1-2 分钟(首次启动较慢)

2. 测试服务是否正常(两种方式)

方式 1:用 curl 命令本地测试(简单快捷)

打开新的终端(保持服务终端运行),输入:

curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen2.5-3B-Instruct",
    "prompt": "写一篇100字左右的夏日饮品文案,突出清爽、低糖特点",
    "max_tokens": 150,
    "temperature": 0.7,
    "top_p": 0.9
  }'

正常响应:返回 JSON 格式结果,包含 AI 生成的文案,类似:

{
  "id": "cmpl-xxx",
  "object": "text_completion",
  "created": 1755000000,
  "model": "Qwen2.5-3B-Instruct",
  "choices": [
    {
      "text": "夏日续命饮品来啦!这款清爽果茶低糖无负担,精选鲜切青柠+脆甜西瓜,搭配清香绿茶底,一口下去酸甜解渴,气泡感十足~ 0添加蔗糖,减脂期也能放心喝,冷藏后口感更绝,不管是通勤路上还是午后小憩,都能带来满满的清凉感,妥妥的夏日必备!",
      "finish_reason": "stop",
      "index": 0
    }
  ],
  "usage": {
    "prompt_tokens": 32,
    "completion_tokens": 128,
    "total_tokens": 160
  }
}
方式 2:用 Python 代码调用(适合集成到项目)

创建test_api.py文件,内容如下:

import requests
import json

# API地址(本地部署,端口8000)
url = "http://localhost:8000/v1/completions"

# 请求头
headers = {
    "Content-Type": "application/json"
}

# 请求参数(根据需求调整)
data = {
    "model": "Qwen2.5-3B-Instruct",  # 模型名称(与部署时一致)
    "prompt": "解释一下什么是大模型?用通俗的话讲,不要专业术语",  # 用户提问
    "max_tokens": 200,  # 最大生成字数(含prompt)
    "temperature": 0.6,  # 创造力(0-1,越低越严谨,越高越有创意)
    "top_p": 0.85,  # 采样阈值(越高越多样)
    "stop": None  # 停止符(默认无,可设置比如["###"]停止生成)
}

# 发送POST请求
response = requests.post(url=url, headers=headers, data=json.dumps(data))

# 解析响应
if response.status_code == 200:
    result = response.json()
    print("AI回复:")
    print(result["choices"][0]["text"].strip())
else:
    print(f"请求失败,状态码:{response.status_code}")
    print(f"错误信息:{response.text}")
  • 运行代码:python test_api.py

  • 预期输出:

AI回复:
大模型就像一个学了超多知识的“超级大脑”!它通过读遍网上的文章、书籍,记住了很多语言规律和生活常识,还能举一反三。你问它问题、让它写东西,它都能快速回应——比如帮你写文案、解答疑惑,甚至编小故事。简单说,它就像一个聪明的“全能助手”,啥都懂点,还能跟你顺畅聊天~

五、 step4:进阶配置(优化性能 + 支持多用户并发)

1. 显存优化(针对显存不足的情况)

如果启动时提示 “Out of memory”,修改启动命令,启用 “量化” 减少显存占用:

python -m vllm.entrypoints.api_server \
  --model ./ \
  --dtype auto \  # 自动选择精度
  --load-format auto \  # 自动选择加载格式
  --quantization awq \  # 启用AWQ量化(4-bit,显存占用减少50%)
  --port 8000 \
  --host 0.0.0.0
  • 说明:量化后显存占用约 8GB,但生成精度会略有下降,适合显存≤20GB 的 GPU

2. 配置并发请求(支持多用户同时访问)

VLLM 默认支持高并发,可通过以下参数调整:

python -m vllm.entrypoints.api_server \
  --model ./ \
  --dtype float16 \
  --port 8000 \
  --host 0.0.0.0 \
  --max-num-seqs 64 \  # 最大并发序列数(根据CPU核心调整,8核建议≤32)
  --waiting-served-ratio 1.2 \  # 等待队列比例
  --batch-size 16  # 单次批量处理数

测试并发:用ab工具(Apache Bench)测试 100 个并发请求:

ab -n 100 -c 10 -p prompt.json -T application/json http://localhost:8000/v1/completions

3. 配置 API 密钥(安全防护,避免被恶意调用)

创建.env文件,添加 API 密钥:

API_KEY=your_secure_api_key_123456  # 自定义密钥,比如随机字符串

修改启动命令,启用密钥验证:

python -m vllm.entrypoints.api_server \
  --model ./ \
  --dtype float16 \
  --port 8000 \
  --host 0.0.0.0 \
  --api-key ${API_KEY}  # 引用.env文件中的密钥

调用时需在请求头添加密钥:

headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer your_secure_api_key_123456"
}

六、 常见问题排查(避坑指南!)

1. 启动服务时报错 “CUDA out of memory”(显存不足)

  • 解决方案 1:启用量化(--quantization awq),减少显存占用;

  • 解决方案 2:降低--max-model-len(比如设为 4096),减少上下文长度;

  • 解决方案 3:关闭其他占用显存的程序(nvidia-smi | grep python找到进程,kill -9 进程号)。

2. 下载模型时速度慢 / 中断

  • 解决方案 1:配置 Hugging Face 镜像(国内用户):

export HF_ENDPOINT=https://hf-mirror.com
  • 解决方案 2:用迅雷下载手动下载链接,再上传到服务器;

  • 解决方案 3:使用断点续传工具(比如 wget -c 下载链接)。

3. 调用 API 时提示 “model not found”

  • 检查模型目录是否正确(--model 参数路径是否指向权重文件所在目录);

  • 检查模型文件是否完整(是否缺少 config.json 或 safetensors 文件);

  • 重启服务,确保模型加载成功(启动日志无报错)。

4. 生成结果乱码 / 不连贯

  • 检查 prompt 格式:Qwen 模型需要符合 “用户:xxx\n 助手:” 的格式,修改 data 中的 prompt:

"prompt": "用户:写一篇100字夏日饮品文案,突出清爽低糖\n助手:"
  • 降低 temperature(比如设为 0.5),让生成更严谨;

  • 检查模型版本:确保下载的是 “Instruct” 版本(不是 Base 版本,Base 版本无对话能力)。

5. 外部设备无法访问 API(仅本地能访问)

  • 检查防火墙:关闭 Ubuntu 防火墙(sudo ufw disable);

  • 检查 host 参数:确保启动时 --host 0.0.0.0(不是 127.0.0.1,仅本地访问);

  • 检查端口是否开放:用netstat -tuln | grep 8000确认端口监听状态。

七、 扩展场景:部署其他模型(通用流程)

除了 Qwen2.5-3B,其他模型的部署流程完全一致,只需替换模型权重:

1. 部署 LLaMA 3-8B-Instruct

# 下载模型(需Hugging Face授权)
python -c "from huggingface_hub import snapshot_download; snapshot_download(repo_id='meta-llama/Meta-Llama-3-8B-Instruct', local_dir='./llama3', local_dir_use_symlinks=False)"
# 启动服务
python -m vllm.entrypoints.api_server --model ./llama3 --dtype float16 --port 8001

2. 部署 Mistral-7B-Instruct

# 下载模型
python -c "from huggingface_hub import snapshot_download; snapshot_download(repo_id='mistralai/Mistral-7B-Instruct-v0.3', local_dir='./mistral', local_dir_use_symlinks=False)"
# 启动服务
python -m vllm.entrypoints.api_server --model ./mistral --dtype float16 --port 8002

结尾:后续可探索的方向

  1. 搭建 Web 界面:用 FastAPI+Vue.js 做一个可视化聊天界面,不用写代码也能调用模型;

  2. 集成到项目:将 API 接口嵌入到自己的应用(比如公众号后台、小程序、办公软件);

  3. 模型微调:针对特定场景(比如 “电商文案生成”“行业问答”)微调模型,提升效果;

  4. 边缘部署:用 Ollama 框架将模型部署到 Mac/Windows 电脑,离线使用(无需网络)。

更多推荐