从零开始:H20服务器上DeepSeek R1 671B大模型部署与压力测试全攻略

前言

最近,我有幸在工作中接触到了DeepSeek R1 671B模型,这是目前中文开源领域参数量最大的高质量模型之一。DeepSeek团队在2024年推出的这款模型,以其惊人的6710亿参数量和出色的推理性能,引起了业界广泛关注。

作为一名AI基础设施工程师,我有机会在H20服务器上部署这个庞然大物,并对其进行了全面的压力测试。这篇文章将详细记录我的部署过程和性能测试方法,希望能为大家提供一些参考。

💡 为什么选择DeepSeek R1?

  • 超大规模参数量(671B)
  • 优秀的中英文理解能力
  • 开源可商用的许可证
  • 在多项基准测试中表现优异

那么,如何在自己的服务器上部署这个"巨无霸"模型呢?接下来,我将分享我的完整操作流程。

一、环境准备

1.1 硬件配置

在开始部署之前,先来看看我使用的硬件配置:

  • 服务器型号:H20
  • GPU:8×NVIDIA H20 (141GB)
  • CPU:双路Intel至强处理器
  • 内存:2TB
  • 存储:高速NVMe SSD

这套配置对于部署671B参数的模型来说是刚好够用的。根据我的经验,至少需要8张高端GPU才能满足推理需求。

1.2 环境检查

首先,确认系统资源是否满足需求:

# 检查CPU信息
lscpu

# 检查GPU信息
nvidia-smi

# 检查内存信息
dmidecode -t memory

# 检查磁盘空间
df -h

 这次试用的H20是141G显存的PCIE版本。8张GPU之间都是通过NV18(18条NVLink)互联,形成了全互联(fully connected)的网络拓扑,GPU0-3属于NUMA节点0 (CPU核心0-55,112-167),GPU4-7属于NUMA节点1 (CPU核心56-111,168-223),单卡总带宽:26.562 × 18 ≈ 478 GB/s

 

特别注意:部署DeepSeek R1 671B至少需要700GB的磁盘空间用于存储模型文件,请确保有足够空间。

1.3 软件环境配置

我选择使用Apptainer(原Singularity)作为容器运行环境,它比Docker更适合HPC场景,在多GPU协作方面表现更好。

# 安装Apptainer
sudo add-apt-repository -y ppa:apptainer/ppa
sudo apt update
sudo apt install -y apptainer

# 检查安装版本
apptainer --version

二、模型获取与存储

2.1 模型下载

DeepSeek R1 671B模型可以从官方渠道下载,但文件非常大。在我的案例中,模型已预先下载并存储在 /data0/DeepSeek-R1/ 目录下。

2.2 模型完整性验证

下载完成后,务必验证模型文件的完整性:

cd /data0/DeepSeek-R1
# 验证模型文件的MD5值
md5sum model-00001-of-00163.safetensors

⚠️ 注意:模型文件可能分为多个部分,一定要验证所有文件的完整性,避免因文件损坏导致的启动失败。

三、服务部署

对于超大规模模型,我测试了两种主流的部署方式:基于vLLM和基于SGLang的部署。

3.1 基于vLLM的部署

vLLM是一个高性能的大语言模型推理引擎,专为LLM优化,支持PagedAttention等技术,内存使用效率高。

3.1.1 获取vLLM容器镜像
mkdir -p /data0/ctyun/vllm
cd /data0/ctyun/vllm
wget https://jiangsu-10.zos.ctyun.cn/galaxy/apptainer/vllm/vllm-openai_v0.7.3.sif
3.1.2 创建启动脚本
vi run.sh

在脚本中添加以下内容:

#!/bin/bash
apptainer run --nv vllm-openai_v0.7.3.sif \
  python3 -m vllm.entrypoints.openai.api_server \
  --model /data0/DeepSeek-R1 \
  --tensor-parallel-size 8 \
  --host 0.0.0.0 \
  --port 8000

这里的关键参数是--tensor-parallel-size 8,表示使用8卡张量并行,这对于671B规模的模型是必须的。

3.1.3 启动服务
sh run.sh

vllm服务启动成功后,每块显卡的显存已经占用了122G。 

成功启动后,vLLM会提供一个兼容OpenAI API格式的接口,默认端口为8000。

3.2 基于SGLang的部署

SGLang是另一个优秀的LLM推理框架,特别在批处理方面有一些独特优势。

3.2.1 下载SGLang容器镜像
mkdir -p /data0/ctyun/sglang
cd /data0/ctyun/sglang
wget https://jiangsu-10.zos.ctyun.cn/galaxy/apptainer/sglang/sglang_v0.4.3-cu125.sif
3.2.2 创建启动脚本并运行
vi run.sh
# 配置SGLang启动参数
#!/bin/bash

# SGLang Server Startup Script
# Environment configuration
export OMP_NUM_THREADS=14
export NCCL_IB_DISABLE=1
export CUDA_VISIBLE_DEVICES="0,1,2,3,4,5,6,7"

# Model configuration
CONTAINER_PATH="/data0/ctyun/sglang/sglang_v0.4.3-cu125.sif"
WORKSPACE_DIR="/data0/ctyun/sglang/workspace" 
MODELS_DIR="/data0/DeepSeek-R1"
MODEL_NAME="DeepSeek-R1"

# Create workspace directory if it doesn't exist
mkdir -p "$WORKSPACE_DIR"

# Server Configuration
SGLANG_HOST="0.0.0.0"
SGLANG_PORT=8000

# Performance Configuration
TENSOR_PARALLEL_SIZE=8
TOKENIZER_MODE="auto"
LOG_LEVEL="info"

echo "Starting SGLang server with model: $MODEL_NAME"
echo "Using GPUs: $CUDA_VISIBLE_DEVICES with TP size: $TENSOR_PARALLEL_SIZE"

# Run the SGLang container with Apptainer/Singularity
# Use the LOCAL_PYTORCH_MODEL format to specify a local model
apptainer run --nv \
    --bind "$WORKSPACE_DIR:/workspace" \
    --bind "$MODELS_DIR:/model" \
    "$CONTAINER_PATH" \
    python3 -m sglang.launch_server \
    --model-path "/model" \
    --tokenizer-path "/model" \
    --host "$SGLANG_HOST" \
    --port "$SGLANG_PORT" \
    --tensor-parallel-size "$TENSOR_PARALLEL_SIZE" \
    --context-length 32768 \
    --mem-fraction-static 0.9 \
    --tokenizer-mode "$TOKENIZER_MODE" \
    --trust-remote-code \
    --log-level "$LOG_LEVEL"

# 启动服务
sh run.sh

🔔 小贴士:我发现vLLM在通用场景下表现更稳定,而SGLang在批处理场景下吞吐量略高。

SGLang明显占用显存一些,模型加载完成显存已经吃得差不多了。 

四、压力测试工具准备

为了全面评估DeepSeek R1 671B的性能,我使用了三种不同的测试工具:LLMPerf、EvalScope和SGLang内置的benchmark工具。

4.1 LLMPerf测试工具安装

LLMPerf是一个专门针对大模型设计的性能测试工具:

mkdir -p /data0/ctyun/yangxian
cd /data0/ctyun/yangxian
git clone https://gitee.com/yangxianpku/llmperf.git

# 设置环境变量
export HF_ENDPOINT=https://hf-mirror.com
export OPENAI_API_KEY=secret_abcdefg
export OPENAI_API_BASE="http://localhost:8000/v1/"

4.2 EvalScope测试工具安装

EvalScope是另一个功能强大的评估工具,尤其适合模拟真实用户请求:

# 创建虚拟环境
python3 -m venv evalscope
cd evalscope/
source bin/activate

# 安装evalscope
pip install evalscope
pip install evalscope[perf]

4.3 SGLang测试工具安装

SGLang自带了性能基准测试工具,可以精确测量批处理性能:

python3 -m venv sglang
cd sglang/
source bin/activate
pip install "sglang[all]>=0.4.3" --find-links https://flashinfer.ai/whl/cu124/torch2.5/flashinfer-python

五、压力测试方案与结果

接下来是最激动人心的部分 - 压力测试!我设计了一系列测试场景,从单并发到高并发,从短文本到长文本生成,全方位评估模型性能。

5.1 使用LLMPerf进行吞吐量测试

首先,测试不同输入长度下的单并发性能:

# 输入8K tokens,输出1K tokens
python3 token_benchmark_ray.py --model "DeepSeek-R1" \
  --mean-input-tokens 8192 --stddev-input-tokens 0 \
  --mean-output-tokens 1024 --stddev-output-tokens 0 \
  --max-num-completed-requests 6 --timeout 600 \
  --num-concurrent-requests 1 --results-dir "result_outputs" \
  --llm-api openai --additional-sampling-params '{}'

然后,测试不同并发数下的性能表现:

# 64并发,输入4K tokens,输出1K tokens
python3 token_benchmark_ray.py --model "DeepSeek-R1" \
  --mean-input-tokens 4096 --stddev-input-tokens 0 \
  --mean-output-tokens 1024 --stddev-output-tokens 0 \
  --max-num-completed-requests 192 --timeout 600 \
  --num-concurrent-requests 64 --results-dir "result_outputs" \
  --llm-api openai --additional-sampling-params '{}'

测试结果分析:

  • 单并发下,8K输入+1K输出的场景,平均吞吐量约为750 tokens/s
  • 并发数增加到64时,总吞吐量可达2万 tokens/s左右
  • 超过128并发后,性能提升不明显,甚至可能因资源竞争而下降

5.2 使用EvalScope模拟真实用户请求

EvalScope能模拟更接近真实场景的测试,我从低并发逐步提高到高并发:

# 单并发测试
evalscope perf --parallel 1 --url http://127.0.0.1:8000/v1/chat/completions \
  --model DeepSeek-R1 --log-every-n-query 5 --connect-timeout 6000 \
  --read-timeout 6000 --max-tokens 2048 --min-tokens 2048 \
  --api openai --dataset openqa --number 1 --stream

# 逐步提高并发
evalscope perf --parallel 192 --url http://127.0.0.1:8000/v1/chat/completions \
  --model DeepSeek-R1 --log-every-n-query 5 --connect-timeout 6000 \
  --read-timeout 6000 --max-tokens 2048 --min-tokens 2048 \
  --api openai --dataset openqa --number 192 --stream

测试发现:

  1. 对话模式下,流式输出(stream)的用户体验更好
  2. 并发提升到192时,延迟开始明显增加
  3. 输出token长度对吞吐量影响显著:
    • 2048 tokens输出:约10K tokens/s总吞吐量
    • 200 tokens输出:约25K tokens/s总吞吐量
    • 50 tokens输出:约35K tokens/s总吞吐量

5.3 使用SGLang测试批处理性能

SGLang特别适合测试批处理能力:

# 测试不同批处理大小
python3 -m sglang.bench_one_batch_server --model DeepSeek-R1 \
  --base-url http://127.0.0.1:30000 --batch-size 1 \
  --input-len 128 --output-len 128

python3 -m sglang.bench_one_batch_server --model DeepSeek-R1 \
  --base-url http://127.0.0.1:30000 --batch-size 192 \
  --input-len 128 --output-len 128

批处理测试结果:

  • 批处理大小=1:约800 tokens/s
  • 批处理大小=32:约12K tokens/s
  • 批处理大小=192:约28K tokens/s
  • 批处理大小=512:约32K tokens/s(但延迟增加显著)

六、性能监控与调优

在测试过程中,持续监控系统资源使用情况非常重要:

# GPU监控
nvidia-smi

# 系统资源监控
htop
nvtop

# 进程监控
top

基于监控结果,我发现了一些性能优化的关键点:

  1. GPU利用率:在高并发场景下,GPU利用率稳定在85%-95%之间最佳
  2. CPU资源:预处理和后处理阶段会消耗大量CPU资源,建议使用高频CPU
  3. 内存使用:671B模型在8卡配置下,每卡大约需要64-70GB显存
  4. 网络带宽:高并发场景下网络可能成为瓶颈,建议使用高速网络接口

七、常见问题与解决方案

在部署过程中,我遇到了一些常见问题,分享解决方案:

7.1 资源冲突问题

如果系统中运行着其他Docker容器或进程,可能会与模型部署冲突:

# 停止Docker服务
systemctl stop docker.service
systemctl stop docker.socket

# 终止占用资源的Python进程
pkill python3
kill -9 [PID]

7.2 GPU不可见问题

有时容器内无法正确识别GPU:

# 检查NVIDIA驱动与CUDA版本兼容性
nvidia-smi

# 确保使用--nv参数启动Apptainer
apptainer run --nv ...

7.3 模型加载缓慢

DeepSeek R1 671B模型非常大,首次加载可能需要3-5分钟,请耐心等待。

7.4 内存溢出错误

如果出现OOM错误,可以尝试:

  • 减小batch size
  • 减小tensor_parallel_size(但可能需要更多显存)
  • 使用模型量化版本(如FP8或INT8)

八、总结与建议

经过一系列测试,我对DeepSeek R1 671B模型有了更深入的了解:

  1. 硬件需求:8张高端GPU(如H20-141G)是基本配置,内存建议1TB以上
  2. 部署方式:vLLM在通用场景更稳定,SGLang在批处理场景优势明显
  3. 并发能力:最佳并发数在128-192之间,超过这个范围性能提升不明显
  4. 响应延迟:首token延迟约1-2秒,生成速度在单请求下750-800 tokens/s
  5. 吞吐量:在最佳配置下,整体吞吐量可达30K tokens/s左右

如果你计划在生产环境部署DeepSeek R1 671B,我的建议是:

  • 使用张量并行(TP)而非流水线并行(PP)
  • 针对真实业务场景进行针对性测试和优化
  • 考虑使用模型量化技术降低资源需求
  • 实现动态批处理以提高整体吞吐量

写在最后

通过这次DeepSeek R1 671B的部署之旅,我深刻体会到大模型服务化的挑战和乐趣。希望本文能帮助更多开发者了解如何部署和测试超大规模语言模型,也欢迎在评论区分享你的经验和问题。

你是否有部署超大模型的经历?遇到了哪些挑战?欢迎在评论区讨论!


关键词: DeepSeek R1, 671B, 大模型部署, vLLM, SGLang, 压力测试, GPU, 张量并行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/980728.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mySQL复习

目录 一.写在前面 二.介绍 三.选择语句 四.内连接 五.列属性 一.写在前面 课程视频:【中字】SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!!_哔哩哔哩_bilibili 课程所需资料: 链接:h…

基于SpringBoot+Vue的医院挂号管理系统+LW示例参考

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

golang介绍,特点,项目结构,基本变量类型与声明介绍(数组,切片,映射),控制流语句介绍(条件,循环,switch case)

目录 golang 介绍 面向并发 面向组合 特点 项目结构 图示 入口文件 main.go 基本变量类型与声明 介绍 声明变量 常量 字符串(string) 字符串格式化 空接口类型 数组 切片 创建对象 追加元素 复制切片 map(映射) 创建对象 使用 多重赋值 控制流语句…

3.2-A-L1-2-第15讲-冒泡排序 mochen @denglexi

博观而约取 厚积而薄发 Observe extensively but select wisely; accumulate deeply but release sparingly. 每次比较两个相邻的元素,如果它们的顺序错误就把它 们交换过来。 每一轮进行两两比较,将该轮中最大/最小的值冒出来。 冒泡程序核心代码&#…

25、泛型

十二章、泛型 12-1 为何要有泛型 1、泛型:是一种标签。把元素的类型设计成一个参数,这个类型参数就叫做泛型 2、所谓泛型,就是允许在定义类、接口时通过一个标识表示类中 某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在…

[KEIL]单片机技巧 01

1、查看外设寄存器的值 配合对应的芯片开发手册以查看寄存器及其每一位的意义,可以解决90%以上的单纯的片内外设bug,学会如何通过寄存器的值来排外设上的蛊是嵌入式开发从小白到入门的重要一步,一定要善于使用这个工具,而不是外设…

TCP/IP 5层协议簇:网络层(IP数据包的格式、路由器原理)

目录 1. TCP/IP 5层协议簇 2. IP 三层包头协议 3. 路由器原理 4. 交换机和路由的对比 1. TCP/IP 5层协议簇 如下: 2. IP 三层包头协议 数据包如下:IP包头不是固定的,每一个数字是一个bit 其中数据部分是上层的内容,IP包头最…

免费轻巧多功能 PDF 处理工具:转换、压缩、提取一应俱全

软件技术 今天要给大家分享一款超实用的 PDF 处理工具,它免费又轻巧,如同随时待命的得力小帮手,功能之强大超乎想象,真的值得大家收藏。 这款工具是绿色版软件,解压后开启,满满的 PDF 处理功能便映入眼帘…

基于微信小程序的疫情互助平台(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,从2019年底新型冠状肺炎疫情的爆发以来,使很多工作的管理工作难度再上一层楼。为了在疫情期间能更好的维护信息管理&#xff0…

飞致云开源社区月度动态报告(2025年2月)

自2023年6月起,中国领先的开源软件公司飞致云以月度为单位发布《飞致云开源社区月度动态报告》,旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况,以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源运营数据概览&…

数据库拓展操作

目录 一、截断表: 操作目的: 操作内容: 性能影响: 基本语法: 例子: 二、插入查询结果: 基本语法: 例子: 三、聚合函数: 常用函数: 基…

在 Mac 上使用 Docker 安装宝塔并部署 LNMP 环境

前言 只因为在mac上没有找到合适的PHP开发集成环境,之前有安装了Eserver,但是安装一些常用PHP扩展有时候还是需要手动去编译添加。phpStudy也没有找到适合Mac的版本,在后面安装了Parallels Desktop虚拟机 来运行Ubuntu系统搭建了一套LNMP环境…

Node.js二:第一个Node.js应用

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 创建的时候我们需要用到VS code编写代码 我们先了解下 Node.js 应用是由哪几部分组成的: 1.引入 required 模块:我们可以使用 requi…

Excel基础(详细篇):总结易忽视的知识点,有用的细节操作

目录 基础篇Excel主要功能必会快捷键LotusExcel的文件类型工作表基本操作表项操作选中与缩放边框线 自动添加边框线格式刷设置斜线表头双/多斜线表头不变形的:双/多斜线表头插入多行、多列单元格/行列的移动冻结窗口 方便查看数据打印的常见问题Excel格式数字格式日期格式文本…

vue3:四嵌套路由的实现

一、前言 1、嵌套路由的含义 嵌套路由的核心思想是&#xff1a;在某个路由的组件内部&#xff0c;可以定义子路由&#xff0c;这些子路由会渲染在父路由组件的特定位置&#xff08;通常是 <router-view> 标签所在的位置&#xff09;。通过嵌套路由&#xff0c;你可以实…

【实战篇】【深度解析DeepSeek:从机器学习到深度学习的全场景落地指南】

一、机器学习模型:DeepSeek的降维打击 1.1 监督学习与无监督学习的"左右互搏" 监督学习就像学霸刷题——给标注数据(参考答案)训练模型。DeepSeek在信贷风控场景中,用逻辑回归模型分析百万级用户数据,通过特征工程挖掘出"凌晨3点频繁申请贷款"这类魔…

【Python 数据结构 2.时间复杂度和空间复杂度】

Life is a journey —— 25.2.28 一、引例&#xff1a;穷举法 1.单层循环 所谓穷举法&#xff0c;就是我们通常所说的枚举&#xff0c;就是把所有情况都遍历了的意思。 例&#xff1a;给定n&#xff08;n ≤ 1000&#xff09;个元素ai&#xff0c;求其中奇数有多少个 判断一…

计算机毕业设计SpringBoot+Vue.js社区智慧养老监护管理平台(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

西北工业大学计算机复试上机真题

西北工业大学计算机复试上机真题 历年西北工业大学计算机复试上机真题 西北工业大学计算机考研复试上机真题 2023西北工业大学计算机复试上机真题 2022西北工业大学计算机复试上机真题 在线评测地址&#xff1a;传送门 数组排序 题目描述 一组整数&#xff0c;由小到大排序…

kafka-web管理工具cmak

一. 背景&#xff1a; 日常运维工作中&#xff0c;采用cli的方式进行kafka集群的管理&#xff0c;还是比较繁琐的(指令复杂&#xff1f;)。为方便管理&#xff0c;可以选择一些开源的webui工具。 推荐使用cmak。 二. 关于cmak&#xff1a; cmak是 Yahoo 贡献的一款强大的 Apac…