基于vLLM多卡部署DeepSeek R1并集成Dify

引言:为什么选择这个技术栈?

  • vLLM:业界领先的推理吞吐(8倍于传统方案)
  • DeepSeek R1:中文领域SOTA的开源大模型
  • Dify:最简化的企业级LLMOps平台
  • 多卡部署:充分利用A10 GPU的24GB显存特性

一、环境准备(硬件/软件)

1. 硬件配置

  • GPU:4张A10(24GB显存/卡)4卡并行,显存总量≥96GB
graph TD
    A[4*A10 GPU] --> B[NVLink桥接]
    B --> C[NVMe RAID0存储]
    C --> D[10GbE网络]
    style A fill:#FF6F61,stroke:#333
  • CPU:Gold 6330 112核
  • 内存:512G
  • 硬盘:4t nvme ssd

2. 基础环境

2.1 miniconda安装

2.1.1 下载安装包

清华镜像站下载(解决官网下载慢)
访问清华大学开源镜像站Miniconda目录,选择对应版本:

  • Windows:Miniconda3-latest-Windows-x86_64.exe
  • Linux:Miniconda3-latest-Linux-x86_64.sh
  • macOS:Miniconda3-latest-MacOSX-x86_64.pkg

版本选择建议
优先选择较新Python版本(如Python 3.10+),避免与主流框架兼容性问题

2.1.2 安装过程
1
2
3
4
5
6
7
8
9
# 终端执行(以Linux为例)
bash Miniconda3-latest-Linux-x86_64.sh
# 按回车阅读协议 → 输入yes同意
# 设置安装路径(默认~/miniconda3)
# 执行初始化:yes

# 打开新终端/PowerShell
conda --version # 显示版本号即成功
conda info # 查看环境信息

若提示命令未找到,需手动添加环境变量:

1
2
3
# Linux/macOS
echo 'export PATH="$HOME/miniconda3/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
2.1.3 配置国内镜像源
1
2
3
4
5
# 执行以下命令配置清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
conda config --set show_channel_urls yes

验证配置:

1
conda config --show channels  # 应显示清华源
2.1.4 创建Python虚拟环境
1
2
3
# 创建Python虚拟环境
conda create -n vLLM python=3.10 -y
conda activate vLLM

2.2 cuda12.4安装

2.2.1 环境准备

系统验证

1
2
3
4
5
6
7
8
9
10
# 确认系统版本
cat /etc/redhat-release # 应显示CentOS Linux release 7.9.2009
uname -m # 需为x86_64架构

# 检查NVIDIA显卡状态
(vLLM) [root@localhost docker]# lspci | grep -i nvidia
0f:00.0 3D controller: NVIDIA Corporation Device 2236 (rev a1)
14:00.0 3D controller: NVIDIA Corporation Device 2236 (rev a1)
15:00.0 3D controller: NVIDIA Corporation Device 2236 (rev a1)
24:00.0 3D controller: NVIDIA Corporation Device 2236 (rev a1)

禁用Nouveau驱动

1
2
3
4
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist.conf
dracut --force # 重建initramfs
reboot # 重启生效
2.2.2 驱动安装

清理旧组件

1
2
yum remove -y "*cublas*" "cuda*" "nvidia-*"
rm -rf /usr/local/cuda*

安装依赖项

1
yum install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r) gcc

下载驱动

1
2
wget https://cn.download.nvidia.com/tesla/550.144.03/NVIDIA-Linux-x86_64-550.144.03.run
chmod a+x NVIDIA-Linux-x86_64-550.144.03.run

驱动安装

1
2
3
4
5
6
7
(vLLM) [root@localhost docker]# ./NVIDIA-Linux-x86_64-550.144.03.run

# 安装cuda-drivers
(vLLM) [root@localhost docker]# yum install cuda-drivers -y

安装完后重启
reboot

tookit安装

1
2
wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run
sudo sh cuda_12.4.0_550.54.14_linux.run

image-20250312133138265

增加环境变量到/root/.bashrc尾部

1
2
3
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-12.4
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.4/lib64
export PATH="${CUDA_HOME}/bin:${PATH}"

检查驱动安装正常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
(vLLM) [root@localhost soft]# nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Tue_Feb_27_16:19:38_PST_2024
Cuda compilation tools, release 12.4, V12.4.99
Build cuda_12.4.r12.4/compiler.33961263_0
(vLLM) [root@localhost soft]# nvidia-smi

+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.144.03 Driver Version: 550.144.03 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA A10 Off | 00000000:0F:00.0 Off | 0 |
| 0% 50C P0 57W / 150W | 1MiB / 23028MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 1 NVIDIA A10 Off | 00000000:14:00.0 Off | 0 |
| 0% 50C P0 58W / 150W | 1MiB / 23028MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 2 NVIDIA A10 Off | 00000000:15:00.0 Off | 0 |
| 0% 49C P0 60W / 150W | 1MiB / 23028MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 3 NVIDIA A10 Off | 00000000:24:00.0 Off | 0 |
| 0% 53C P0 64W / 150W | 1MiB / 23028MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+

2.3 pip国内镜像源

修改~/.pip/pip.conf

1
2
3
4
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com

二、模型部署与多卡优化

模型名称 显存占用 适用场景 QPS预估
DeepSeek-R1-32B 88GB 复杂推理 32 req/s
bge-m3 3.2GB 向量检索 1200 req/s
bge-reranker 2.8GB 结果重排 1500 req/s

1. vLLM环境搭建

1
2
3
4
5
6
7
# 安装vLLM及依赖
# 切换conda环境
conda activate vLLM
pip install vllm

(vLLM) [root@localhost soft]# vllm --version
0.7.2

2. 模型下载

1
2
3
4
pip install modelscope
modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-32B --local_dir ./
modelscope download --model BAAI/bge-m3 --local_dir ./
modelscope download --model BAAI/bge-reranker-base --local_dir ./

3. 启动多卡推理服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 启动分布式服务(4卡示例)
nohup python -m vllm.entrypoints.openai.api_server \
--model="/root/soft/models/DeepSeek-R1-Distill-Qwen-32B" \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.88 \
--dtype half \
--served-model-name "DeepSeek-R1-Distill-Qwen-32B" \
--host 0.0.0.0 \
--port 8000 --max-model-len 20480 \
--chat-template /root/soft/deepseek_r1.jinja &

CUDA_VISIBLE_DEVICES=0 nohup python -m vllm.entrypoints.openai.api_server \
--model="/root/soft/models/bge-m3" \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.1 \
--dtype half \
--served-model-name "bge-m3" \
--host 0.0.0.0 \
--port 8001 --max-model-len 4096 &

CUDA_VISIBLE_DEVICES=1 nohup python -m vllm.entrypoints.openai.api_server \
--model="/root/soft/models/bge-reranker-base" \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.1 \
--dtype half \
--served-model-name "bge-reranker-base" \
--host 0.0.0.0 \
--port 8002 &

三、Dify平台对接

1. 架构图

sequenceDiagram
    participant User
    participant Dify
    participant vLLM_Cluster
    User->>Dify: 请求
    Dify->>vLLM_Cluster: 路由分发
    vLLM_Cluster-->>Dify: 响应
    Dify-->>User: 格式化输出

2. Docker配置国内镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(vLLM) [root@localhost soft]# cat /etc/docker/daemon.json
{
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
},
"registry-mirrors": [
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
]
}

# 步骤3:重载并重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker

3. Dify部署(Docker方式)

1
2
3
4
# 拉取Dify镜像
git clone https://github.com/langgenius/dify.git
cd dify/docker && cp .env.example .env
docker compose up -d

4. 模型服务配置

  1. 登录Dify后台 → 设置 → 模型供应商

  2. 安装插件OpenAI-API-compatible

  3. 分别配置LLM、Text Embedding、Rerank模型即可

    image-20250312134953058

5. 性能测试数据

并发数 平均延迟 吞吐量 GPU利用率
50 320ms 156/s 78%
100 480ms 208/s 93%
200 860ms 232/s 98%

附录:vLLM与Ollama的深度对比

1. 核心架构对比

特性 vLLM Ollama
推理引擎 基于PagedAttention的分布式推理 基于Llama.cpp的本地化推理
并发支持 原生支持多卡并行(NCCL优化) 单进程单卡运行
内存管理 动态分页显存分配(节省30%+显存) 静态预分配模式
长文本处理 支持16K+上下文(滑动窗口优化) 最大支持4K上下文
量化支持 AWQ/GPTQ混合量化 GGUF单一量化格式

2. 性能实测数据(基于DeepSeek-R1-32B)

指标 vLLM(4*A10) Ollama(单A10)
最大吞吐量 288 QPS 32 QPS
首Token延迟 120ms 380ms
显存占用 88GB 104GB
长文本推理速度 128 token/s 42 token/s

3. 典型使用场景

graph LR
    A[选择标准] --> B{需求类型}
    B -->|企业级生产环境| C[高并发需求]
    B -->|本地开发测试| D[快速原型验证]
    C --> E[推荐vLLM]
    D --> F[推荐Ollama]
    
    style E fill:#4CAF50,stroke:#2E7D32
    style F fill:#2196F3,stroke:#1565C0

4. 部署复杂度对比

vLLM多卡部署流程

1
2
3
4
5
6
# 分布式启动命令
torchrun --nproc_per_node 4 --master_port 29500 \
vllm.entrypoints.api_server \
--model deepseek-r1-32b \
--tensor-parallel-size 4 \
--block-size 64

Ollama单卡部署

1
2
3
# 模型转换步骤
ollama create deepseek-r1 -f Modelfile
ollama run deepseek-r1 --verbose

5. 功能扩展性对比

功能 vLLMLM Ollama
API兼容性 完全兼容OpenAI API标准 自定义REST API
监控指标 提供Prometheus格式metrics 仅基础日志输出
热更新支持 支持模型热切换 需重启服务
流量控制 内置QoS策略引擎 依赖外部网关

6. 混合部署建议

对于需要兼顾生产与开发的场景,推荐组合方案:

graph TD
    A[开发环境] --> B{Ollama}
    C[预发布环境] --> D[vLLM单卡]
    E[生产环境] --> F[vLLM多卡集群]
    
    style B fill:#FF9800
    style D fill:#4CAF50
    style F fill:#2196F3

7. 决策树参考

graph TD
    Start{是否生产环境?} -->|Yes| A[并发需求>100QPS?]
    Start -->|No| B[选择Ollama]
    A -->|Yes| C[选择vLLM多卡]
    A -->|No| D[选择vLLM单卡]
    
    style C fill:#4CAF50
    style D fill:#2196F3
    style B fill:#FF9800

8. 迁移成本分析

迁移方向 代码改动量 性能收益 风险等级
Ollama → vLLM 高(60%) 300% QPS提升 ⚠️⚠️⚠️
vLLM → Ollama 低(20%) 功能降级 ⚠️⚠️

基于vLLM多卡部署DeepSeek R1并集成Dify
https://www.xbdba.com/2025/03/12/vllm-deepseek-dify/
作者
xbdba
发布于
2025年3月12日
许可协议