基于vLLM的大模型部署
一、前言
vLLM是一种优化大语言模型(LLM)推理的开源系统,核心优势在于显著提升了大模型的推理速度和计算资源的利用率,适合高并发请求的场景。
本文档搭建一套使用vLLM+OpenWebUI的环境来运行大模型。
二、架构
| 序号 | 类型 | 名称 | 版本 |
|---|---|---|---|
| 1 | 操作系统 | Ubuntu | 22.04 LTS x64 |
| 2 | 中间件 | Python | 3.11.10 |
| 3 | 驱动 | CUDA | 12.1 |
| 4 | 驱动 | NVIDIA | 530.30.02 |
| 5 | 推理引擎 | vLLM | 0.6.3 |
| 6 | 框架 | PyTorch | 2.5 |
| 7 | 显卡 | Nvidia GPU | RTX 2070 8G |
| 8 | 前端 | OpenWebUI | 0.3.35 |
| 9 | 模型 | Qwen 2.5 | 1.5B-Instruct |
三、部署
3.1 安装nvidia驱动
3.1.1 删除自带驱动(如有)
sudo apt-get remove --purge nvidia*3.1.2 禁用nouveau驱动(如有)
#编辑配置文件
sudo vi /etc/modprobe.d/blacklist-nouveau.conf
#添加配置
blacklist nouveau
options nouveau modeset=0
#更新initramfs文件
sudo update-initramfs -u
#重启服务器
sudo reboot
#再次检查
lsmod | grep nouveau3.1.3 安装依赖
若未提前安装依赖,执行驱动安装时会报错,并无法继续。

图:由于缺少编译依赖而无法安装驱动
安装编译依赖
sudo apt update
sudo apt install gcc make -y3.1.4 下载驱动
此驱动版本对应CUDA12.1版本。
其他版本驱动见官方下载页面:https://www.nvidia.cn/drivers/lookup/
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/530.30.02/NVIDIA-Linux-x86_64-530.30.02.run提示
数据中心级显卡在下载时可以指定cuda版本。使用消费级显卡,在匹配cuda版本时,需要自行查找不同驱动版本的cuda版本号。nvidia驱动版本与CUDA版本对照清单:
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#id5
确定具体驱动版本号后,可前往nvidia-linux-driver-archive页面下载对应版本驱动:
https://www.nvidia.com/en-us/drivers/unix/linux-amd64-display-archive/
3.1.5 安装驱动
赋予可执行权限并允许安装程序。
chmod +x NVIDIA-Linux-x86_64-530.30.02.run
./NVIDIA-Linux-x86_64-530.30.02.run
图:驱动安装程序建议安装发行版本提供的驱动。选择 Continue installation 继续安装。

图:驱动程序编译内核模块。

图:驱动安装程序提示无法找到X模块。由于不需要图形界面,选择 OK 继续。

图:驱动安装程序提示是否需要安装32位兼容库,选择 No 不安装。

图:驱动安装程序提示系统缺少Vulkan ICD加载器,选择 OK 继续。

图:驱动安装中。

图:驱动程序提示,是否自动更新X配置文件,这里选择 No 不更新。

图:驱动程序已安装完成。
3.1.6 验证驱动和CUDA版本
输出显卡信息
nvidia-smi
图:显示 GPU 参数和资源使用情况。
3.2 安装 Nvidia 容器工具包(可选)
若需要将大模型运行在Docker容器中,则需要安装 NVIDIA Container Toolkit。
安装方法参见 Nvidia 官方文档:
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installing-with-apt3.2.1 安装步骤
添加nvidia官方apt仓库源
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list添加额外实验性包(可选)
sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list安装容器套件
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit重启docker服务
systemctl restart docker3.2.3 验证 NVIDIA Container Toolkit
docker run --rm --gpus all --name nvidia-cuda nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi信息
为 Docker 配置http_proxy或指定国内Docker镜像加速,可以加速镜像下载。
3.3 安装 Conda 包管理器
Conda 是 Python 的包管理器,并提供建立虚拟环境的能力。
vLLM 官方推荐使用 Conda 进行虚拟环境的管理,但不建议使用 Conda 安装 PyTorch。
提示
pip 能够独立安装 PyTorch 及其依赖库(例如 NCCL),而 Conda 安装的 PyTorch 会将 NCCL 进行静态链接,这可能会导致 vLLM 使用 NCCL 时出现问题。
安装miniconda
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
source ~/.bashrc
conda --version创建环境
conda create -n vLLM-01 python=3.11.10激活环境
conda activate vLLM-01退出环境(命令参考)
conda deactivate列出所有环境(命令参考)
conda env list删除环境(命令参考)
conda remove -n vLLM-01 --all添加国内频道(可选)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/3.4 安装vLLM
官方文档:
https://docs.vllm.ai/en/latest/提示
vLLM 要求 7.0 以上架构的 Nvidia 显卡。
7.0:Volta 架构(如 Tesla V100)
7.5:Turing 架构(如 T4, RTX 20 系列)
8.0:Ampere 架构(如 A100)
8.6:Ampere 架构的更新(如 RTX 30 系列)
8.9:Ada Lovelace架构(如 RTX 40 系列)
9.0:Hopper 架构(如 H100)
安装 vLLM (PyTorch 会自动安装)
pip install https://vllm-wheels.s3.us-west-2.amazonaws.com/nightly/vllm-1.0.0.dev-cp38-abi3-manylinux1_x86_64.whl
图:vLLM安装
验证安装
git clone https://github.com/vllm-project/vllm.git
cd vllm
python python_only_dev.py3.6 安装 OpenWebUI
Open WebUI 是一个可扩展、自托管的 AI 界面,完全离线运行。
官方文档:
https://openwebui.com/
图:OpenWebUI提供一个与ChatGPT类似的交互界面
安装 OpenWebUI
pip install open-webui启动 OpenWebUI
open-webui serve启动后可通过IP地址+端口进行访问,首次访问需要进行用户注册,注册数据保存在本地。
Docker 方式启动(可选)
docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda
图:OpenWebUI 界面
四、运行模型
4.1 部署模型
模型下载网站:huggingface
https://huggingface.co/模型下载网站:魔塔社区
https://modelscope.cn/home下载本文示例模型:Qwen/Qwen2.5-1.5B-Instruct
从魔塔社区下载模型,下载后的模型默认保存在:~/.cache/modelscope/hub路径下。
modelscope download --model Qwen/Qwen2.5-1.5B-Instruct
mkdir /data/module && cd /data/module4.2 加载模型
快速执行模型(从 huggingFace 自动下载)
vllm serve Qwen/Qwen2.5-1.5B-Instruct --dtype=half --api-key token-WjPiAPE8xzLR0tb1 --gpu-memory-utilization 1.0
#千问2.5 1.5B 模型加载本地模型:
vllm serve /data/module/Qwen2.5-1.5B-Instruct --dtype auto --api-key token-WjPiAPE8xzLR0tb1 --gpu-memory-utilization 1.0
#加载本地的千问2.5 1.5B 模型启动参数
--dtype=half 由于所使用显卡为7.5版本,因此不支持Bfloat16,添加此参数以float16运行。
--gpu-memory-utilization 1.0 可使用显存比例。默认值为0.9,由于内存不足设置为1。
图:模型加载完成,占用6.56GB显存
4.3 连接 OpenWebUI 与 vLLM
vLLM 提供兼容 OpenAI 的 api 服务器,因此可使用 OpenWebUI 进行调用。
由于openwebui在调用api时必须配置token,在vllm启动时需要配置token。

图:在设置-外部连接中输入部署的IP信息和token

图:与模型进行对话
4.4 通过接口调用
在启动vllm时若指定了token则在请求时需要带上token,若未指定token则可直接访问。
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer token-5iwxFbav9wDuNat3" 'http://127.0.0.1:8000/v1/chat/completions' -d '{"model": "Qwen/Qwen2.5-1.5B-Instruct", "messages": [{"role": "user", "content": "请详细介绍一下什么是大模型?"}]}'
图:通过接口调用
五、扩展信息
5.1 模型文件
模型通常包含以下文件:
LICENSE 包含许可证信息,说明使用条款。
README.md 项目概述和使用说明,通常包括安装和贡献指南。
config.json 存储应用程序或模型的配置参数。
configuration.json 更详细的配置设置,定义运行时参数。
generation_config.json 配置生成模型的参数,如温度和最大长度。
merges.txt 包含词汇合并信息,帮助处理子词编码。
model.safetensors 保存模型权重和结构文件。较大的模型会分为多个文件。
tokenizer.json 定义分词器配置,处理文本标记化。
tokenizer_config.json 包含分词器的特殊设置和参数。
vocab.json 列出模型使用的词汇表及其索引。5.2 vLLM参数
vLLM具备许多运行参数,用于调整资源占用和性能。(例如多卡并行执行。)
官方文档:
https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html(完)