GPU 大模型本地部署(vllm、open webUI)
本文最后更新于36 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

一、vLLM 企业级推理框架

1. 框架定位

vLLM(virtual Large Language Model)是面向大模型推理优化的高性能服务框架,核心解决传统 Transformers 部署的高延迟、低吞吐、显存浪费问题,是生产级推理服务的主流方案。

  • 核心能力:模型加载、GPU 资源调度、KV Cache 管理、API 服务
  • 核心技术:PagedAttention + Continuous Batching
  • 兼容性:HuggingFace 模型无缝接入、OpenAI API 标准接口、多品牌 GPU/TPU

2. 两大核心技术

2.1 PagedAttention(分页注意力)

  • 设计思想:借鉴操作系统虚拟内存分页机制,将 KV Cache 切分为固定大小的 Block(页),通过页表映射管理,物理上无需连续,按需分配、用完即回收。
  • 解决痛点:传统 KV Cache 按最大上下文预留整块连续显存,实际使用率低,显存碎片化严重,导致并发数上不去。
  • 核心优势:显存利用率提升至 96% 以上,支持更多并发请求,吞吐量最高达传统框架的 24 倍。

2.2 Continuous Batching(连续批处理)

  • 设计思想:新请求动态插入正在执行的批次,无需等待整批处理完成;谁先生成结束,立刻释放位置补入新请求。
  • 解决痛点:传统静态批处理必须等最长请求完成才能处理下一批,GPU 空闲时间多,短请求被长请求阻塞。
  • 核心优势:GPU 始终高负载运行,请求等待时间短,吞吐量大幅提升,高并发场景优势显著。

3. vLLM 解决的核心问题

表格

传统部署痛点vLLM 解决方案
显存碎片严重、浪费大PagedAttention 分块管理 KV 缓存,显存利用率接近最优
推理吞吐量低、GPU 空转连续批处理 + 优化 CUDA 内核,大幅提升推理速度
多任务调度混乱先进调度策略(先来先服务 + 抢占机制),资源合理分配
多 GPU 部署复杂原生支持张量并行、流水线并行,简化多设备部署
业务集成难度高兼容主流模型与 OpenAI API,降低接入门槛

4. 主要应用场景

  • 实时推理服务:智能客服、聊天机器人等高并发低延迟场景
  • 长文本生成:文章写作、摘要生成、创意内容创作
  • 企业内部 AI 助手:稳定承接多用户并发请求
  • RAG 与知识库系统:高并发下性能优势明显
  • 业务集成:作为推理后端对接前端应用,支持分布式扩展

二、vLLM 部署实战

1. 环境准备

1.1 包管理器 uv 安装

uv 是 Python 高性能包与虚拟环境管理器,速度远快于 pip,用于隔离环境和快速安装依赖。

# 方式1:官方脚本安装
curl -LsSf https://astral.sh/uv/install.sh | sh

# 方式2:pip安装
pip install uv
  • 验证命令:uv --version

1.2 创建虚拟环境

要求 Python 版本≥3.10

mkdir /root/uv-vllm-qwen
cd /root/uv-vllm-qwen
uv venv --python 3.10
source .venv/bin/activate  # 激活后终端前缀显示 (.venv)

2. 安装 vLLM

# 基础安装
uv pip install "vllm==0.7.2" --torch-backend=auto

# 国内加速:使用清华源
UV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple uv pip install "vllm==0.7.2" --torch-backend=auto
  • 安装验证:python -c "import vllm; print(vllm.__version__)"

3. 国内模型下载优化

vLLM 默认从 HuggingFace 下载,国内网络受限,切换为 ModelScope(魔搭)加速:

# 1. 安装modelscope工具
uv pip install modelscope==1.25.0

# 2. 开启环境变量,优先从ModelScope拉取模型
export VLLM_USE_MODELSCOPE=True

# 3. 升级配套依赖库
uv pip install "transformers==4.45.2" "tokenizers==0.20.1"

4. 启动模型服务

基础启动命令示例(Qwen2-1.5B-Instruct):

vllm serve Qwen/Qwen2-1.5B-Instruct \
  --max-model-len 4096 \
  --gpu-memory-utilization 0.9 \
  --tensor-parallel-size 1 \
  --max-num-seqs 16 \
  --dtype half
  • 默认监听地址:http://localhost:8000
  • 首次运行自动下载模型,下载完成后启动推理服务

5. 核心参数详解

5.1 基础服务参数

表格

参数说明默认值
--host服务绑定的 IP 地址0.0.0.0
--port服务监听端口8000
--served-model-nameAPI 对外暴露的模型名称与原模型名一致
--api-keyAPI 访问鉴权密钥无
--trust-remote-code允许执行模型仓库自定义代码关闭

5.2 性能与显存调优参数

表格

参数说明调优建议
--gpu-memory-utilizationGPU 显存最大使用比例默认 0.9(使用 90% 显存,预留 10% 给系统进程)
--max-model-len最大上下文长度(输入 + 输出 Token 总数)根据业务场景设置,不必盲目追大,节省显存提升并发
--max-num-seqs同时处理的最大请求数(并发序列数)直接决定并发能力,过大易显存溢出,过小浪费 GPU 资源
--dtype模型推理数据精度FP16 (half)/BF16/INT8/INT4;精度越低,显存越少、速度越快

显存估算参考(模型权重部分):

  • FP32:参数量 × 4 字节
  • FP16:参数量 × 2 字节
  • INT8:参数量 × 1 字节
  • INT4:参数量 × 0.5 字节 总显存占用 = 模型权重 + KV Cache + CUDA 运行时开销

6. 多 GPU 并行策略

6.1 张量并行(–tensor-parallel-size, -tp)

  • 原理:将模型权重矩阵横向切分,分散到多张 GPU,每张卡计算一部分,最后拼接结果。
  • 特点:降低单卡显存占用,适合单模型装不下单张卡的场景;对通信带宽要求高,仅适合单机内多卡(NVLink 最佳)。
  • 示例:4 张 GPU 张量并行运行 70B 模型 vllm serve Llama-3-70B-Instruct --tensor-parallel-size 4

6.2 流水线并行(–pipeline-parallel-size, -pp)

  • 原理:按模型层纵向切分,每组 GPU 负责一部分层,数据依次流过各段完成计算。
  • 特点:适合跨节点多机部署;存在 “气泡”(前后级等待导致的算力浪费)。

6.3 数据并行(Data Parallelism, DP)

  • 原理:每张 GPU 复制完整模型,数据切分后独立计算,最后汇总梯度更新模型。
  • 特点:实现简单,通用性强;无法解决模型过大单卡装不下的问题,多用于训练场景。

一句话记忆:

  • TP 横切权重,单机多卡降显存
  • PP 竖切层级,多机部署跑大模型
  • DP 复制模型,数据分片提吞吐

7. 高级优化参数

  • --enable-prefix-caching:开启前缀缓存,相同系统提示词复用 KV Cache,显著降低首 Token 延迟,对话系统推荐开启。
  • --enable-chunked-prefill:分块预填充,长文本输入拆分成小块与生成交替执行,避免长请求独占 GPU。
  • --speculative-model:投机解码,用小模型生成候选 Token,大模型验证,在不损失质量的前提下提升生成速度。
  • --swap-space:KV Cache 换出到 CPU 内存的大小,显存不足时临时兜底,不宜设置过大。

三、Open WebUI 前端部署

1. 概述

Open WebUI 是功能丰富的自托管 AI 前端界面,完全离线运行,支持 Ollama、OpenAI 兼容协议,是本地大模型的可视化交互入口。

  • 特点:协议优先、与后端解耦、支持模型管理、RAG 知识库、插件扩展
  • 默认端口:8080

2. 部署步骤

2.1 环境准备

mkdir /root/open-webui
cd /root/open-webui
uv venv --python 3.11  # 要求Python≥3.11
source .venv/bin/activate

2.2 安装 Open WebUI

# 避免下载超时
export UV_HTTP_TIMEOUT=600

# 国内源安装
uv pip install open-webui -i https://pypi.tuna.tsinghua.edu.cn/simple

2.3 启动服务

export HF_ENDPOINT=https://hf-mirror.com    # 模型下载镜像加速
export ENABLE_RAG_WEB_SEARCH=false      # 关闭联网搜索功能
open-webui serve
  • 访问地址:http://服务器IP:8080
  • 首次访问需注册管理员账号

3. 对接后端

3.1 对接 Ollama

  1. 进入设置 → 连接配置
  2. 添加 Ollama 接口地址:http://localhost:11434
  3. 启用连接,在模型下拉框选择对应模型即可对话

3.2 对接 vLLM

  1. 进入设置 → 外部连接
  2. 添加 OpenAI 兼容接口:http://vLLM服务IP:8000/v1
  3. 填写 API 密钥(如有),保存后即可选择 vLLM 加载的模型

四、API 调用方式(了解)

vLLM 原生兼容 OpenAI API 标准,支持 curl、Python 等多种方式调用。

1. curl 调用示例

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen2-1.5B-Instruct",
    "messages": [{"role": "user", "content": "介绍一下Linux"}],
    "stream": false
  }'

2. Python SDK 调用

2.1 安装依赖

uv pip install openai

2.2 单轮调用脚本

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="token-abc123"  # 与启动时--api-key参数一致
)

resp = client.chat.completions.create(
    model="Qwen/Qwen2-1.5B-Instruct",
    messages=[{"role": "user", "content": "介绍一下Linux"}]
)

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

2.3 并发批量调用

使用线程池实现多请求并发,常用于压测场景:

from openai import OpenAI
from concurrent.futures import ThreadPoolExecutor

client = OpenAI(base_url="http://localhost:8000/v1", api_key="token-abc123")

questions = [
    "介绍一下Linux",
    "什么是Docker",
    "什么是Kubernetes",
    "解释一下TCP三次握手"
]

def ask(q):
    resp = client.chat.completions.create(
        model="Qwen/Qwen2-1.5B-Instruct",
        messages=[{"role": "user", "content": q}]
    )
    return q, resp.choices[0].message.content

with ThreadPoolExecutor(max_workers=5) as executor:
    results = executor.map(ask, questions)
    for q, ans in results:
        print(f"问题: {q}")
        print(f"回答: {ans}")
        print("-" * 50)

五、高频汇总

  1. PagedAttention 的原理和优势? 答:借鉴操作系统分页思想,将 KV Cache 切分为固定大小的 Block,通过页表映射管理,物理上无需连续,按需分配、用完回收。解决了传统 KV Cache 显存浪费、碎片化严重的问题,显存利用率提升至 96% 以上,可支持更多并发请求。
  2. 连续批处理相比传统静态批处理的优势? 答:传统静态批处理必须等整批请求全部完成才能处理下一批,GPU 空转时间多、整体延迟高。连续批处理动态将新请求插入运行中的批次,请求完成立即释放位置补入新请求,GPU 始终保持高负载,吞吐量更高、平均延迟更低。
  3. vLLM 的多 GPU 并行策略有哪些,区别是什么? 答:
    • 张量并行(TP):横向切分权重矩阵,单机多卡部署,降低单卡显存压力,对通信带宽要求高
    • 流水线并行(PP):纵向切分模型层级,适合跨多机部署,存在算力气泡浪费
    • 数据并行(DP):每张卡复制完整模型,数据分片计算,多用于训练,不能解决单卡装不下模型的问题
  4. 影响大模型推理显存占用的因素有哪些? 答:模型参数量、推理数据精度(dtype)、上下文长度、并发请求数量、KV Cache 大小、CUDA 运行时固定开销。
  5. 如何提升推理服务的并发能力? 答:使用 PagedAttention 优化显存利用率;开启连续批处理提升 GPU 使用率;适当降低推理精度(如 INT4/INT8);合理设置 max-model-len,避免盲目开大上下文;使用张量并行扩展单卡显存容量。
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇