vllm方式部署Deepseek R1、Embedding、Reranker、Qwen3,并集成dify环境
服务器配置 :8块H20显卡、两颗至强白金8558P(单颗48核96线程)、2TB内存(32根64GB)
操作系统:Ubuntu24
一、显卡驱动及依赖准备
1、安装H20显卡驱动
安装H20显卡驱动及依赖包,参考:https://www.nvidia.com/en-us/drivers/results/

sudo apt install gcc g++ make
wget https://cn.download.nvidia.com/tesla/550.163.01/NVIDIA-Linux-x86_64-550.163.01.run
sudo sh NVIDIA-Linux-x86_64-550.163.01.run
2、tookit安装
tookit安装参考:https://developer.nvidia.com/cuda-toolkit-archive
wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run
sudo sh cuda_12.4.1_550.54.15_linux.run
apt-get install -y nvidia-container-toolkit
apt-get install -y nvidia-fabricmanager
二、Python环境准备
1、安装python环境
准备python环境,Index of /archive
bash https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
conda -V
conda create -n vllm python=3.12 -y
conda activate vllm
2、模型下载
pip install modelscope
modelscope download --model deepseek-ai/DeepSeek-R1 --local_dir /mnt/nvme01/models/deepseek671
modelscope download --model BAAI/bge-m3 --local_dir /mnt/nvme01/models/bge-m3
modelscope download --model BAAI/bge-reranker-base --local_dir /mnt/nvme01/models/bge-reranker-base
3、安装依赖
# 然后到PyTorch 官网(https://pytorch.org/get-started/locally/)查看相符的安装命令,执行
pip install torch==2.1.2 torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple --extra-index-url https://download.pytorch.org/whl/cu118
# 安装成功后,验证PyTorch 是否正确调用 GPU
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"
# 返回类似True NVIDIA GeForce RTX 4090就代表安装成功了
#安装显卡状态查看工具nvitop
pip install nvitop
nvitop
4、安装vllm
#安装vllm, pip install "vllm[triton]" 命令中的[triton]代表我们要安装VLLM的可选组件triton。它是OpenAI 开源的深度学习算子编译框架,vLLM 使用它来实现高性能的「Token 并行生成机制」,使VLLM在运行时性能会得到显著提升,推荐安装
pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple
# 验证是否安装成功
python -c "import vllm; print(vllm.__version__)" #如果打印出VLLM相关的东西,则代表安装成功了
5、vllm服务使用说明
推荐使用OpenAI API 格式服务启动。因为OpenAI API 格式几乎成为所有AI通用格式,能兼容绝大多数的服务与接口请求
vllm启动参数可参考:引擎参数 — vLLM 文档
模型启动示例
python -m vllm.entrypoints.openai.api_server --model /path/to/model --port 8000
# 模型参数详解
python -m vllm.entrypoints.openai.api_server #启动 vLLM 的 OpenAI API 服务接口,符合 OpenAI API 格式的调用方式
--model /home/xx/model/deepseek # 模型路径,可以使用本地路径,或 huggingface等远程路径。必填
--model-name mydeepseek # 最定义模型名称。用户或客户端需要指定模型名,所以你必须提前定义清楚它叫什么。非必填(默认为模型自己的名称)
--tokenizer /home/xx/model/deepseek # 指定分词器的位置或名称,模型文件结构规范的情况下可以不填。它的作用是防止模型文件夹结构不规范导致报错。日常不需要使用
--dtype float16 # 张量精度。支持auto(默认值。vLLM 会根据模型配置自动判断 dtype)、float32(单精度浮点数,最精确但显存占用大)、float16(半精度浮点数,推理快,占用小,当前主流推荐)等等参数。非必填(默认auto)
--port 8088 # 指定模型启动时占用的端口。最好必填
--host 0.0.0.0 # 指定模型启动时的地址,设为 0.0.0.0 允许所有 IP 访问。最好必填
--max-model-len 4068 # 最大输入 + 输出 token 长度。需模型支持。非必填。默认为模型的默认值
--gpu-memory-utilization 0.8 # 使用 GPU 显存的比例。0为最小,1为最大。(1.0=100%,0.1=%10)。调小可以保留一部分显存给系统或其他程序,防止OOM(Out Of Memory显存溢出)。非必填(默认0.9)
--tensor-parallel-size 2 # 用于多 GPU 并行推理。1 表示单卡运行(比如我的机器有2张显卡,就可以设置为2)。非必填(默认为1)
--swap-space 4 # 为内存不足时预留的 swap 空间(“交换空间”Swap Space)(单位 GB),在显存爆掉时能缓解崩溃。非必填(默认为4)
--disable-log-requests False # 是否禁用日志输出请求内容(保护隐私时可加)。非必填(默认为False)
--max-num-batched-tokens 4068 # 每一批请求最多允许的 token 总数。这个数越大,吞吐量高但延迟可能变大;越小,响应快但效率低。非必填(默认为自动)
--max-num-seqs 6 # 最大同时处理的请求数量,用于多并发的情况。非必填(默认为自动)
--seed 42 # 控制生成内容的一致性,设置固定值可复现生成(同样输入,生成的输出可能会不一样。但是如果设置了比如--seed 42,则会出现回答与之前完全一致的情况出现)。非必填(默认为随机)
--trust-remote-code False # 如果你从 HuggingFace 加载模型并需要运行自定义模型代码(如 LLaVA),必须加此参数。非必填(默认为False)
三、vllm启动模型
注意:我们是用VLLM 把模型部署成 openai API server 形式
vllm serve是vLLM提供的命令行工具,用于快速部署兼容OpenAl API的HTTP服务器。它是对python -m vllm.entrypoints.api_server的封装,语法更简洁。
1、vllm启动Deepseek
nohup python -m vllm.entrypoints.openai.api_server \
--model /mnt/nvme01/models/deepseek671 \
--served-model-name deepseek14 \
--dtype float16 \
--port 8000 \
--host 0.0.0.0 \
--max-model-len 4068 \
--gpu-memory-utilization 0.8 \
--tensor-parallel-size 8 \
--swap-space 8 \
--max-num-batched-tokens 4068 \
--max-num-seqs 6 &
nohup python -m vllm.entrypoints.openai.api_server \
--model="/mnt/nvme01/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 &
2、vllm启动Embedding模型bge-m3
CUDA_VISIBLE_DEVICES=0 nohup python -m vllm.entrypoints.openai.api_server \
--model="/mnt/nvme01/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 &
3、vllm启动Reranker模型bge-reranker-base
CUDA_VISIBLE_DEVICES=1 nohup python -m vllm.entrypoints.openai.api_server \
--model="/mnt/nvme01/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 &
4、vllm启动Qwen3
#下载模型
modelscope download --model Qwen/Qwen3-235B-A22B --local_dir /mnt/nvme02/models/Qwen3-235B-A22B
#启动模型
nohup python -m vllm.entrypoints.openai.api_server \
--model /mnt/nvme02/models/Qwen3-235B-A22B \
--served-model-name qwen3 \
--tensor_parallel_size 8 \
--host 0.0.0.0 \
--port 8004 \
--gpu-memory-utilization 0.8 \
--max-num-seqs 16 \
--enable-expert-parallel \
--max-model-len 4096 \
--enable-reasoning \
--reasoning-parser deepseek_r1 &
四、dify中添加模型
1、登录Dify后台 → 设置 → 模型供应商
2、安装插件OpenAI-API-compatible
3、分别配置LLM、Text Embedding、Rerank模型即可


五、待解决问题
同时跑多个模型资源调度可能会出现问题,看到网上有帖子说vgpu的方式可解决,待研究,有感兴趣的朋友一起研究。
附录:
模型下载:
阿里魔塔模型库:ModelScope - 模型列表页
AI快站:Models - Fast360
科学上网,模型库:https://huggingface.co/models
转自:vllm方式部署Deepseek R1、Embedding、Reranker、Qwen3,并集成dify环境_qwen3 embedding-CSDN博客
更多推荐

所有评论(0)