开源的DeepSeek-R1系列包含不同模型,即DeepSeek-R1-671B,和基于蒸馏技术的衍生版本,从1.5B-70B,目前了解到的有:
这里的B是指Billion,也就是根据模型的参数量大小分出来的版本。带有“Distill”标签,表示它们是蒸馏模型。蒸馏模型通过将一个大型、复杂的模型(称为“教师模型”)的知识传递给一个较小、较轻量的模型(称为“学生模型”),以便在保持模型性能的同时,降低计算和存储资源的消耗。
模型的不同,自然对硬件的要求不同,以下是 DeepSeek 各版本模型在不同精度下存需求对照表:
参数量 | 适用场景 | FP32 | FP16 | INT8 | INT4 |
1.5B | 简单任务 | 6GB | 3GB | 1.5GB | 0.75GB |
7B | 常见任务 | 28GB | 14GB | 7GB | 3.5GB |
14B | 复杂任务 | 56GB | 28GB | 14GB | 7GB |
32B | 高精度的任务 | 128GB | 64GB | 32GB | 16GB |
70B | 大规模计算、高精度任务 | 280GB | 140GB | 70GB | 35GB |
简单来说,FP16(半精度浮点数)显存需求约为参数量的 2 倍、FP32(单精度浮点数)显存需求约为参数量的 4 倍。后面带INT的是量化版本,它是通过压缩模型计算精度来降低硬件需求的技术。INT8 量化是将模型权重和激活值量化为 8 位整数,显存需求约为 FP32 的 1/4;INT4 量化是将模型权重和激活值量化为 4 位整数,显存需求约为 FP32 的 1/8。
如果仅看INT4量化版对显存的要求,两张3090即可满足。不过这显然不是科研领域深度学习所能接受的。下面我们以7B模型为例,简单计算下在深度学习训练和推理过程中各自FP16\FP32精度下的显存需求。
1. 训练阶段
训练阶段的显存需求主要包括:
模型参数:存储模型权重。
优化器状态:存储动量、梯度等优化器相关数据。
激活值:前向传播和反向传播中计算的中间结果。
梯度:反向传播计算的梯度。
FP16 训练
模型参数:70 亿参数 × 2 字节 = 14 GB。
优化器状态:通常需要 2 倍于模型参数的显存(例如 Adam 优化器),即14 GB × 2 = 28 GB。
激活值和梯度:取决于批量大小(batch size)和序列长度,通常与模型参数显存相当或更大。假设激活值和梯度需要 14 GB。
总显存需求:14 GB(参数) + 28 GB(优化器) + 14 GB(激活值和梯度) ≈ 56 GB。
FP32 训练
模型参数:70 亿参数 × 4 字节 = 28 GB。
优化器状态:通常需要 2 倍于模型参数的显存。28 GB × 2 = 56 GB。
激活值和梯度:假设需要 28 GB。
总显存需求:28 GB(参数) + 56 GB(优化器) + 28 GB(激活值和梯度) ≈ 112 GB。
2. 推理阶段
推理阶段的显存需求主要包括:
模型参数:存储模型权重。
激活值:前向传播中计算的中间结果。
FP16 推理
模型参数:70 亿参数 × 2 字节 = 14 GB。
激活值:通常远小于训练阶段,假设需要 2-4 GB。
总显存需求:14 GB(参数) + 4 GB(激活值) ≈ 18 GB。
FP32 推理
模型参数:70 亿参数 × 4 字节 = 28 GB。
激活值:假设需要 4-8 GB。
总显存需求:28 GB(参数) + 8 GB(激活值) ≈ 36 GB。
所以即使在FP16精度下,7B模型在训练阶段对显卡的要求也非常高。而在实际的深度学习过程中通常采用的是 混合精度训练,可以兼顾 FP16的速度和 FP32 的精度。例如权重和梯度上使用 FP16 进行计算和存储,梯度更新等关键操作使用 FP32 进行高精度计算,Loss Scaling通过缩放损失值来避免 FP16 的数值下溢问题。混合精度训练对显存的要求介于FP32与FP16之间。
接着我们计算了各参数量在不同学习阶段的显存需求。
参数量 | 学习阶段 | 精度模式 | 显存需求 |
7B | 训练 | FP16 | 56GB |
训练 | FP32 | 112GB | |
推理 | FP16 | 18GB | |
推理 | FP32 | 36GB | |
14B | 训练 | FP16+FP32 | 274 GB |
推理 | FP16 | 32-36 GB | |
32B | 训练 | FP16+FP32 | 592 GB |
推理 | FP16 | 104 GB | |
70B | 训练 | FP16+FP32 | 1270 GB |
推理 | FP16 | 220 GB |
以下是我们就高校课题组中深度学习比较常见的服务器:10万以内的单卡A6000、10万级别的4卡4090、20万级别的8卡4090、150万级别的8卡A100(40G),以及200万以上的8卡A100(80G),分别部署7B、14B、32B、70B模型,对应DeepSeek给出的解决方案。
先给出一个总表看看结果:
配置 | 阶段 | 可行性 | 性能预测 |
单卡A6000部署7B | 训练 | 可行 | 中等速度,需调优 |
推理 | 流畅 | 低延迟,高吞吐 | |
4卡4090部署7B | 训练 | 可行 | 中等速度,需调优 |
推理 | 流畅 | 低延迟,高吞吐 | |
8卡4090部署14B | 训练 | 可行 | 中等速度,需精细调优 |
推理 | 流畅 | 低延迟,高吞吐 | |
8卡A100(40G)部署32B | 训练 | 可行 | 中等速度,需精细调优 |
推理 | 流畅 | 低延迟,高吞吐 | |
8卡A100(80G)部署70B | 训练 | 可行 | 高性能,需精细调优 |
推理 | 流畅 | 低延迟,高吞吐 |
简要的部署方案参考下文,详细的部署方案可以联系客服索取,或直接问DeepSeek。
单卡A6000部署7B模型
1:训练阶段
FP16 混合精度训练理论显存需求122 GB(远超单卡 48GB 显存)。故需要采用优化方案。
解决方案:显存优化技术
1.1DeepSpeed ZeRO Stage 2 或 3
ZeRO Stage 2:将梯度和优化器状态分片到单卡,显存占用降至约 14 + 42 + 10 = 66 GB(仍超过 48GB)。
ZeRO Stage 3:将模型参数、梯度和优化器状态分片到单卡,显存占用降至约 14 + 21 + 10 = 45 GB(接近单卡 48GB 显存上限)。
1.2.梯度检查点(Gradient Checkpointing)
通过牺牲 20-30% 计算时间,将激活值显存减少 60-70%(如从 10 GB 降至 3 GB)。
1.3.混合精度训练(FP16+FP32)
使用 FP16 存储参数和梯度,FP32 保存优化器状态,结合 Loss Scaling 避免数值下溢。
1.4.降低批次大小
将批次大小(batch size)设为 1,减少激活值显存占用。
推荐训练配置
优化技术:
ZeRO Stage 3 + 梯度检查点:显存需求降至约 14 + 21 + 3 = 38 GB(单卡 48GB 可支持)。
混合精度训练:启用 FP16 加速计算。
批量大小:设为 1,避免显存溢出。
框架:使用 DeepSpeed 实现显存优化。
2.推理阶段
2.1单卡推理
直接在一张 A6000 上运行 FP16 或 INT8 量化模型。
2.2量化技术
使用 INT8 量化(TensorRT 或 PyTorch 量化工具),显存需求减半,性能提升。
2.3动态批处理(Dynamic Batching)
合并多个请求提高吞吐量,减少单次推理成本。
推荐推理配置
框架:HuggingFace Transformers + TensorRT(支持 INT8 量化)
量化:应用 INT8 量化(需硬件支持),进一步降低显存和延迟。
硬件加速:启用 A6000 的 Tensor Cores 和 CUDA Graph 优化。
4卡4090服务器部署7B模型
1:训练阶段
由于单卡RTX 4090仅有24GB显存,离FP16要求的56GB有一定距离,需通过以下技术实现多卡协同训练:
1.1混合精度训练(FP16+FP32)
使用FP16存储参数和梯度,FP32保存优化器状态(如Adam)。结合Loss Scaling避免梯度下溢,显存需求可降低至约40-50 GB。
1.2模型并行(Model Parallelism)
将模型拆分到4张GPU上,每卡加载部分参数(如每卡约1.75B参数)。需依赖框架支持(如PyTorch的torch.distributed或Megatron-LM)。
1.3数据并行(Data Parallelism)
单卡无法容纳完整模型时,数据并行不适用,需与模型并行结合(如流水线并行)。
1.4 DeepSpeed ZeRO优化
使用ZeRO Stage 2或3,将优化器状态、梯度、参数分散到多卡。显存占用可降至单卡约10-15 GB,4卡总显存足够支持。
推荐配置
框架:PyTorch + DeepSpeed。
并行策略:ZeRO Stage 3 + 模型并行。
批量大小:需调小批次(如每卡batch_size=2),避免激活值显存溢出。
2. 推理阶段
单卡满足推理需求,可以直接在一张RTX 4090上运行FP16。
推荐配置
框架:使用HuggingFace Transformers + TensorRT。
8卡4090服务器部署14B模型
1:训练阶段
在混合精度训练情况下,14B模型要求的显存(约250GB)远高于单卡4090,也高于8 卡总显存,需通过以下技术降低显存占用:
1.1 DeepSpeed ZeRO 优化
ZeRO Stage 3:将模型参数、梯度和优化器状态分片到多卡,显存占用降至单卡约 254 GB / 8 ≈ 32 GB(仍超过单卡 24GB)。
ZeRO-Offload:将部分优化器状态卸载到 CPU 内存,进一步降低显存需求。
1.2 模型并行(Model Parallelism)
将模型层拆分到多卡(如 2 卡张量并行 + 4 卡流水线并行),显存需求按分片比例降低。
1.3 梯度检查点(Gradient Checkpointing)
通过牺牲计算时间,将激活值显存减少 60-70%(如从 30 GB 降至 10 GB)。
1.4 混合精度训练(FP16+FP32)
使用 FP16 存储参数和梯度,FP32 保存优化器状态,结合 Loss Scaling 避免数值下溢。
推荐训练配置
并行策略:
ZeRO Stage 3 + 模型并行(2D 并行):4 卡用于流水线并行,2 卡用于张量并行。
梯度检查点:启用以减少激活值显存。
批量大小:每卡微批次(micro-batch)设为 1-2,避免显存溢出。
框架:使用 DeepSpeed 或 Megatron-LM 实现分布式训练。
2.推理阶段
单卡无法满足推理需求,需通过多卡并行方式或者量化技术:
2.1 多卡模型并行
将模型拆分到 2 张 GPU(如每卡加载 7B 参数),使用 NVIDIA Triton 或 FasterTransformer 实现多卡推理加速。
2.2量化技术
使用 INT8 量化(需 TensorRT 或 PyTorch 量化工具),显存需求减半,单卡可运行。
2.3 动态批处理(Dynamic Batching)
在高并发场景下,通过动态合并请求提高吞吐量。
推荐推理配置
框架:HuggingFace Transformers + TensorRT(支持 INT8 量化)。
并行策略:2 卡模型并行(FP16)或单卡 INT8 量化。
硬件加速:启用 RTX 4090 的 Tensor Cores 和 CUDA Graph 优化。
8卡A100(40G版)部署32B模型
1.训练阶段
在混合精度训练情况下,32B模型要求的显存远高于单卡A100,也高于8 卡总显存,需通过以下技术降低显存占用:
1.1 DeepSpeed ZeRO Stage 3 + Offload
将模型参数、梯度和优化器状态分片到 8 卡,显存占用降至单卡约 562 GB / 8 ≈ 70.25 GB,仍超过单卡 40GB。
ZeRO-Offload:将优化器状态和梯度卸载到 CPU 内存,显存需求进一步降低至单卡约 35-40 GB(可适配 A100 40GB)。
1.2 模型并行(Model Parallelism)
张量并行(Tensor Parallelism):将模型层横向拆分到多卡(如 4 卡并行,每卡负责 8B 参数)。
流水线并行(Pipeline Parallelism):将模型层纵向拆分到多卡(如 2 卡并行,每卡负责 16B 参数)。
结合两种并行策略(如 4×2 混合并行),显存需求按分片比例降低。
1.3 梯度检查点(Gradient Checkpointing)
通过牺牲 20-30% 的计算时间,将激活值显存减少 60-70%(如从 50 GB 降至 15 GB)。
1.4 混合精度训练(FP16+FP32)
使用 FP16 存储参数和梯度,FP32 保存优化器状态,结合 Loss Scaling 避免数值下溢。
推荐训练配置
并行策略:
ZeRO Stage 3 + 模型并行:4 卡用于张量并行,2 卡用于流水线并行,剩余 2 卡处理数据并行。
梯度检查点:启用以减少激活值显存。
批量大小:每卡微批次(micro-batch)设为 1-2,全局批次大小(global batch)为 16-32。
框架:使用 DeepSpeed + Megatron-LM 实现分布式优化。
2.推理阶段
FP16推理条件下显存需求约80G,同样超过单张A100,需要多卡并行。
2.1多卡模型并行
将模型拆分到 2-4 张 GPU(如 4 卡张量并行,每卡加载 8B 参数),使用 NVIDIA Triton 或 FasterTransformer 加速推理。
2.2量化技术
使用 INT8 量化(需 TensorRT 或 PyTorch 量化工具),显存需求减半,单卡可运行部分分片。
2.3 动态批处理(Dynamic Batching)
在高并发场景下,通过合并请求提高吞吐量,减少单次推理成本。
有深度学习相关解决方案和硬件需求的同学、老师可以联系我们,微信号:cailiaoren010。