自然语言处理:第一百零四章 生产环境vLLM 部署 DeepSeek,如何调优,看这里

本人项目地址大全:Victor94-king/NLP__ManVictor: 优快云 of ManVictor


写在前面: 笔者更新不易,希望走过路过点个关注和赞,笔芯!!!

写在前面: 笔者更新不易,希望走过路过点个关注和赞,笔芯!!!

写在前面: 笔者更新不易,希望走过路过点个关注和赞,笔芯!!!


之前有小伙伴想让我出一篇,生产环境如何部署deepseek,什么样的配置能生产可用,今天我用双4090,测试几个模型。大家看看。 非常感谢提供环境的朋友。

vLLM 简单介绍

vLLM 是一个快速且易于使用的 LLM 推理和服务库。

vLLM(Very Large Language Model Serving)是由加州大学伯克利分校团队开发的高性能、低延迟的大语言模型(LLM)推理和服务框架。它专为大规模生产级部署设计,尤其擅长处理超长上下文(如8k+ tokens)和高并发请求,同时显著优化显存利用率,是当前开源社区中吞吐量最高的LLM推理引擎之一。

  • 高吞吐量 :采用先进的服务器吞吐量技术。
  • 内存管理 :通过PagedAttention高效管理注意力键和值内存。
  • 请求批处理 :支持连续批处理传入请求。
  • 模型执行 :利用CUDA/HIP图实现快速模型执行。
  • 量化技术 :支持GPTQ、AWQ、INT4、INT8和FP8量化。
  • 优化内核 :包括与FlashAttention和FlashInfer的集成。
  • 其他特性 :支持推测解码、分块预填充。

vLLM 文档:https://docs.vllm.ai/en/latest/index.html

源码地址:https://github.com/vllm-project/vllm

性能测试:https://blog.vllm.ai/2024/09/05/perf-update.html

软硬件信息

我的环境是双4090,内存是192GB。我预想的8k上下文。最好16k。图片

CUDA信息

图片

Driver Version: 550.144.03
CUDA Version: 12.4

环境安装

#下载 miniconda3
 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && chmod +x Miniconda3-latest-Linux-x86_64.sh

# 安装
sh Miniconda3-latest-Linux-x86_64.sh

# 添加国内镜像
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/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/


#创建vllm环境
conda create -n vllm python=3.12 -y
#激活环境,注意,切换窗口一定要执行该命令
conda activate vllm
#设置国内镜像源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
#安装vllm和 modelscope
pip  install vllm modelscope

#根据自己的cuda版本安装,具体适配哪个,可以问下kimi或deepseek,使用下面的方法比较慢,不推荐
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu124

# 设置镜像(推荐)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/linux-64/

conda install pytorch torchvision torchaudio pytorch-cuda=12.4
#安装基准测试依赖包
pip install pandas datasets transformers

监控工具

pip install nvitop
# 查看
nvitop

图片

模型选择

我以8k上下文为要求,让deepseek给我推荐测试模型的大小。

精度推荐模型单卡显存占用剩余显存适用场景
16bit7B-13B13-19GB4-10GB高精度任务(代码/数学)
8bit20B-30B15-23GB0.6-8GB通用任务+大上下文
4bit40B-50B12-21GB3-11GB低延迟+超大模型

基准测试

参考: https://modelscope.cn/docs/models/download

# 创建模型目录
mkdir -p /opt/models

# 官方基准测试代码
git clone https://github.com/vllm-project/vllm.git
cd vllm/benchmarks

图片

基准测试指标含义

指标含义
Avg prompt throughput输入吞吐量 (Prompt Tokens/s),0.0 表示当前没有新的输入请求
Avg generation throughput生成吞吐量 (Generation Tokens/s),86.8 表示模型每秒生成86.8 个 token
Running正在处理的请求数 (当前正在生成的请求)
Swapped被换出的请求数 (当显存不足时,某些请求会被移到 CPU)
Pending等待中的请求数 (尚未处理的请求)
GPU KV cache usageGPU KV Cache 使用率 ,表示当前 GPU 的 key-value cache 使用情况,数值越高表示显存消耗越多
DeepSeek-R1-Distill-Qwen-14B
modelscope download --model 'deepseek-ai/DeepSeek-R1-Distill-Qwen-14B' --local_dir '/opt/models/DeepSeek-R1-Distill-Qwen-14B'

基准测试代码

CUDA_VISIBLE_DEVICES=0,1 python benchmark_throughput.py \
  --model "/opt/models/DeepSeek-R1-Distill-Qwen-14B" \
  --backend vllm \
  --input-len 2048 \
  --output-len 10000 \
  --num-prompts 50 \
  --seed 1100 \
  --dtype float16 \  -- 半精度
  --tensor-parallel-size 2 \  -- 双cpu
  --gpu-memory-utilization 0.95 \
  --max-model-len 60000   --长上下文

图片

刚开始600多tokens/s,并行能达到20多个

图片几分钟以后,降到了290tokens/s,并发降到10多个

图片最后降到了200tokens 左右,并发稳定到7个。

Qwen/QwQ-32B

modelscope download --model 'Qwen/QwQ-32B' --local_dir '/opt/models/QwQ-32B'
CUDA_VISIBLE_DEVICES=0,1 python benchmark_throughput.py \
  --model "/opt/models/QwQ-32B" \
  --backend vllm \
  --input-len 1024 \
  --output-len 3000 \
  --num-prompts 50 \
  --seed 1100 \
  --dtype float16  \
  --tensor-parallel-size 2 \
  --gpu-memory-utilization 0.95 \
  --max-model-len 4096 

图片

直接内存溢出,加载不上。

Valdemardi/DeepSeek-R1-Distill-Llama-70B-AWQ

modelscope download --model 'Valdemardi/DeepSeek-R1-Distill-Llama-70B-AWQ' --local_dir '/opt/models/deepseek-70b-awq'

基准测试脚本

CUDA_VISIBLE_DEVICES=0,1 python benchmark_throughput.py \
  --model "/opt/models/deepseek-70b-awq" \
  --backend vllm \
  --input-len 1024 \
  --output-len 4096 \
  --num-prompts 50 \
  --seed 1100 \
  --dtype float16  \
  --tensor-parallel-size 2 \
  --gpu-memory-utilization 0.95 \
  --max-model-len 5200 

图片压测刚开始,还好一些,能达到6~9个并发,随着时间的挪移,逐步稳定到2个并发。

图片

图片

利用内存,开启长上下文

deepseek推荐的两个参数.

参数作用机制适用场景性能影响
–cpu-offload-gb将部分模型权重静态卸载到CPU内存,形成"虚拟显存"模型参数过大导致OOM高延迟(需频繁CPU-GPU数据传输)
–swap-space将KV Cache动态交换到CPU/磁盘,处理长上下文时的显存溢出长序列生成导致KV Cache爆炸中等延迟(按需交换)
CUDA_VISIBLE_DEVICES=0,1 python benchmark_throughput.py \
  --model "/opt/models/deepseek-70b-awq" \
  --backend vllm \
  --input-len 4096 \
  --output-len 10000 \
  --num-prompts 50 \
  --seed 1100 \
  --dtype float16  \
  --tensor-parallel-size 2 \
  --gpu-memory-utilization 0.95 \
  --max-model-len 16384 \
  --swap-space 40

图片在启动的过程中,一直报超过了10256,我以为这个参数可以直接通过CPU增加GPU的内存。

然后在官方的ai上问了下图片

看这个意思,在并发的时候,才会利用,启动的时候,并不会利用。

然后我就又问下了,该如何配置启动参数。

图片官方的api给我了一个配置参数,用上。

CUDA_VISIBLE_DEVICES=0,1 python benchmark_throughput.py \
  --model "/opt/models/deepseek-70b-awq" \
  --backend vllm \
  --input-len 4096 \
  --output-len 10000 \
  --num-prompts 50 \
  --seed 1100 \
  --dtype float16  \
  --tensor-parallel-size 2 \
  --gpu-memory-utilization 0.95 \
  --max-model-len 16384 \
  --cpu-offload-gb 10
    --enforce-eager 

图片好不容易看到点希望,又挂了。继续调整脚本。

CUDA_VISIBLE_DEVICES=0,1 python benchmark_throughput.py \
  --model "/opt/models/deepseek-70b-awq" \
  --backend vllm \
  --input-len 4096 \
  --output-len 10000 \
  --num-prompts 50 \
  --seed 1100 \
  --dtype float16  \
  --tensor-parallel-size 2 \
  --gpu-memory-utilization 0.95 \
  --max-model-len 16384 \
  --cpu-offload-gb 10 \
  --enforce-eager 

图片这次终于起来了,这速度。。。图片这cpu也没有利用起来。

后记

使用vllm还是老老实实的使用显存吧,使用cpu,这速度真的没法忍受。也可能是我的能力有限。有哪位高手看到了,可以指教下。

善于利用官方的ai工具真能省不少力气,感觉浪费了好几个小时。

生产环境看自己的要求,尽量减少上下文长度,十几个并发,重度使用,也就20来个人可用,轻度使用,几十个人。它不像普通程序,很快就返回,每次执行都是好多秒。

通过官方的基准测试,不断地调整参数,找到适合自己的配置,没有绝对。

相关软件都放到了网盘里。有需要的可以自己下载。想加群的小伙伴,直接加我微信,yxkong。我拉你们进群。

相关资料

清华DeepSeek相关资料

https://pan.quark.cn/s/5c1e8f268e02https://pan.baidu.com/s/13zOEcm1lRk-ZZXukrDgvDw?pwd=22ce

北京大学DeepSeek相关资料

https://pan.quark.cn/s/918266bd423ahttps://pan.baidu.com/s/1IjddCW5gsKLAVRtcXEkVIQ?pwd=ech7

零基础使用DeepSeek

https://pan.quark.cn/s/17e07b1d7fd0

https://pan.baidu.com/s/1KitxQy9VdAGfwYI28TrX8A?pwd=vg6g

ollama的docker镜像

https://pan.baidu.com/s/13JhJAwaZlvssCXgPaV_n_A?pwd=gpfq

deepseek和qwq模型(ollama上pull下来的)

https://pan.quark.cn/s/dd3d2d5aefb2

https://pan.baidu.com/s/1FacMQSh9p1wIcKUDBEfjlw?pwd=ks7c

dify相关镜像

https://pan.baidu.com/s/1oa27LL-1B9d1qMnBl8_edg?pwd=1ish

ragflow相关资料和模型

https://pan.baidu.com/s/1bA9ZyQG75ZnBkCCenSEzcA?pwd=u5ei

公众号案例

https://pan.quark.cn/s/18fdf0b1ef2ehttps://pan.baidu.com/s/1aCSwXYpUhVdV2mfgZfdOvA?pwd=6xc2

总入口(有时候会被屏蔽):

https://pan.quark.cn/s/05f22bd57f47提取码:HiyL

https://pan.baidu.com/s/1GK0_euyn2LtGVmcGfwQuFg?pwd=nkq7

### 使用 Vllm 部署 DeepSeek 项目 为了成功部署 DeepSeek 语言模型,需遵循一系列特定的操作流程来设置环境并运行所需的服务。此过程主要依赖于 vLLM 工具的支持。 #### 准备工作 安装 Python 环境第一步操作,在确保计算机上已正确设置了 Python 后才能继续后续步骤[^1]。对于大多数开发者而言,推荐版本通常是最新的稳定版 Python,这可以保证兼容性和性能最化。 #### 获取 DeepSeek 模型 本指南选用 `deepseek-ai/DeepSeek-R1-Distill-Qwen-7B` 模型作为实例展示对象。该预训练模型已经过充分,适用于多种自然语言处理任务。获取方式可通过官方仓库下载或 API 接口拉取最新镜像文件。 #### 设置 vLLM 环境 vLLM 是一个高效的推理引擎框架,专为大规模分布式机器学习设计。通过它能够显著提升大型语言模型的加载速度和服务响应效率。具体来说: - 安装必要的依赖库和工具包; - 根据硬件条件整参数配置以达到最佳效果; - 利用 Docker 或者 Kubernetes 实现容器化管理以便移植性强的应用场景下快速迁移服务[^2]。 #### 运行与测试 完成上述准备工作之后,即可启动服务并对模型执行基本的功能验证。此时应该能看到预期的结果输出,证明整个部署流程顺利完成。如果遇到任何问题,则建议查阅相关文档资料或者向社区求助获得更专业的支持。 ```bash # 示例命令用于启动基于 vLLMDeepSeek 模型服务 docker run -p 8000:8000 deepseek:vllm ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曼城周杰伦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值