私有化部署DeepSeek-R1的新选择,vLLM让算力减半、吞吐增十倍!
坦白说,之前用Ollama部署deepseek-r1:32b模型确实方便,一条命令搞定,适合个人快速上手。但到了企业生产环境,事情就没那么简单了——高并发、低延迟、资源利用率,哪一个都是硬指标。这时候,vLLM和SGLang这类专业推理框架才是正道。本文就聚焦vLLM,看看它怎么把DeepSeek-R1的部署效能拉满。

Ollama 与 vLLM:定位截然不同的两个工具
先摆个结论:Ollama是轻量级本地工具,适合个人开发者和小规模实验;vLLM则是为高并发、低延迟的企业级场景量身打造的生产级推理框架。核心差异如下:
| 对比维度 | Ollama | vLLM |
| 核心定位 | 轻量级本地化工具,适合个人开发者和小规模实验 | 生产级推理框架,专注高并发、低延迟的企业级场景 |
| 硬件要求 | 支持 CPU 和 GPU,低显存占用(默认使用量化模型) | 必须依赖 NVIDIA GPU,显存占用高 |
| 模型支持 | 内置预训练模型库(支持1700+模型),自动下载量化版本(int4为主) | 需手动下载原始模型文件(如 HuggingFace 格式),支持更广泛模型 |
| 部署难度 | 一键安装,开箱即用,无需编程基础 | 需配置 Python 环境、CUDA 驱动,依赖技术经验 |
| 性能特性 | 单次推理速度快,但并发处理能力弱 | 高吞吐量,支持动态批处理和千级并发请求 |
| 资源管理 | 灵活调整资源占用,空闲时自动释放显存 | 显存占用固定,需预留资源应对峰值负载 |
vLLM 凭什么能“算力减半、吞吐增十倍”?
vLLM 的核心优势在于它的全新算法。与 HuggingFace Transformers 相比,吞吐量最高可提升 24 倍,而且无需对模型架构做任何改动。在官方测试中,他们分别用 LLaMA-7B(NVIDIA A10G GPU)和 LLaMA-13B(NVIDIA A100 GPU 40GB)进行对比,从 ShareGPT 数据集采样输入/输出长度,结果非常直观:vLLM 的吞吐量比 HuggingFace Transformers 高 24 倍,比 HuggingFace Text Generation Inference(TGI)高 3.5 倍。这才是真正值得关注的地方。

图片不必看懂,知道它“牛就完事了”。具体性能数据可以看官方博客:https://blog.vllm.ai/2024/09/05/perf-update.html
环境准备:腾讯云高性能应用服务
本次部署选用腾讯云的高性能应用服务,配置如下:
- Ubuntu 20.04
- 环境配置:Ubuntu 20.04, Driver 525.105.17, Python 3.8, CUDA 12.0, cuDNN 8
- 算力类型:两卡GPU基础型 - 2*16GB+ | 16+TFlops SP | CPU - 16 核 | 内存 - 64GB
安装 Conda
使用 conda 创建 python 环境,直接贴脚本:
- wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && chmod +x Miniconda3-latest-Linux-x86_64.sh
- ./Miniconda3-latest-Linux-x86_64.sh -b
- source /root/miniconda3/bin/activate
- conda init
- conda config --set auto_activate_base false
使用 vLLM 部署 DeepSeek-R1
先创建 python 环境:
- conda create -n vllm python=3.12 -y
- conda activate vllm
安装 vllm 和 modelscope:
- pip install vllm modelscope
使用 modelscope 下载 DeepSeek-R1 模型(这里用的是 1.5B 蒸馏版本,方便测试):
- mkdir -p /data/models && modelscope download --model 'deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B' --local_dir '/data/models/DeepSeek-R1-Distill-Qwen-1.5B'
然后启动 vLLM 服务:
- vllm serve "/data/models/DeepSeek-R1-Distill-Qwen-1.5B" --served-model-name "DeepSeek-R1" --load-format "safetensors" --gpu-memory-utilization 0.8 --tensor-parallel-size 2 --dtype half --port 8000
如果遇到“Bfloat16 is only supported on GPUs with compute capability of at least 8.0.”的警告,说明你的 GPU(比如 T4)不支持 bfloat16,按提示加上 --dtype=half 即可。
各参数含义:
--tensor-parallel-size:和 GPU 数量设置一致--gpu-memory-utilization:控制使用显存的百分比--served-model-name:API 中使用的模型名称--disable-log-requests:禁用日志记录请求(可选)
更多参数可参考官方文档:https://docs.vllm.ai/en/latest/serving/engine_args.html
使用 Postman 测试
启动成功后,浏览器打开 http://ip:8000/ 即可查看状态,接口文档在 http://ip:8000/docs。用 Postman 调用时,请求体如下:
- {
- "model": "DeepSeek-R1",
- "messages": [
- {
- "role": "user",
- "content": "Hi,我叫小渣渣。请问你是谁?"
- }
- ]
- }
基准测试:吞吐量到底怎么样?
最后跑一波基准测试,看看效果。下载测试脚本:
- wget https://raw.githubusercontent.com/vllm-project/vllm/refs/heads/main/benchmarks/benchmark_utils.py
- wget https://raw.githubusercontent.com/vllm-project/vllm/refs/heads/main/benchmarks/benchmark_throughput.py
执行:
- python benchmark_throughput.py --model "/data/models/DeepSeek-R1-Distill-Qwen-1.5B" --backend vllm --input-len 128 --output-len 512 --num-prompts 50 --seed 1100 --dtype half
结果:Throughput: 2.45 requests/s, 1569.60 total tokens/s, 1255.68 output tokens/s。对于 1.5B 模型来说,这个吞吐量已经是相当不错的水平了。如果换成更大规模的模型,并行度和显存管理带来的优势会更明显。
(完)
