当前位置: 首页 > news >正文

【大模型】DeepSeek-R1各版本模型推理显存需求测算【理论+实践】

前言

最近临危受命,调研了一下DeepSeek需要什么硬件配置才能本地部署。查询中文社区相关资料,发现不少帖存在夸大唬人嫌疑。

于是撰写本文,辅以实验验证,以正试听。

1. 数据精度

硬件配置的核心就是显卡的显存。实际部署应用中,不可能拿CPU+大内存的方案进行推理,输出实在过慢。因此,理论上来说,只要显卡的显存容得下模型,部署就没问题。

要从理论角度计算不同参数量版本的模型大概需要多少显存,首先要理清不同精度和模型参数量之间的关系。不谈精度空谈参数量的结论都是耍流氓!

精度类型构成,常见的FP32、FP16等浮点数精度类型通常由符号位(sign)、指数位(exponent)和小数位(mantissa)三部分组成,如下图[1]所示。

在这里插入图片描述
符号为0或1,(0表示正,1表示负),指数位影响浮点数范围,小数位影响精度。

指数位越多,数据表示的范围越大;小数位越多,数据表示的精度越高。

除了FP(Floating Point)这种基本格式外,还有TF32(TensorFloat-32)、BF16(Brain Floating Point16)等特殊格式,通过微调范围或精度,做到性能和存储的权衡。

不同格式的基础情况如下表所示。

精度格式总位数符号位指数位小数位主要用途
FP646411152科学计算、高精度需求
FP32321823深度学习训练、通用计算
TF32191810NVIDIA Ampere GPU 深度学习训练
BF1616187深度学习训练
FP16161510深度学习推理、低内存场景
INT8817-深度学习推理、量化模型
INT4413-极度资源受限的推理场景

2. 模型推理显存理论计算

理清数据精度之后,就可以根据模型参数量对所需显存进行理论计算。

比如,DeepSeek-R1 - Distill Qwen - 32B型号的模型,参数量为32B,如果参数精度为FP16,那么实际所需显存量即为32×16bit=32×10亿×16 bit

又因基本比特换算关系:
1 GB = 1 , 024 1,024 1,024 MB = ( 1 , 024 ) 2 (1,024)^2 (1,024)2 KB = ( 1 , 024 ) 3 (1,024)^3 (1,024)3 bytes = ( 1 , 024 ) 3 (1,024)^3 (1,024)3 × 8 = bit

即 32×10亿×16 bit = 32× 1 0 9 10^9 109×16 / ( 1 , 024 ) 3 (1,024)^3 (1,024)3 × 8 GB

由于32B并不是一个正好的整数,因此计算时,我们姑且认为1000 ≈ 1024,这样一进行化简,就可以得到:

32×10亿×16 bit ≈ 64 GB

理清这个关系之后,对于DeepSeek各版本各精度推理所需显存占用情况就可以同样计算,计算结果如下:

模型名称版本参数量FP16 显存占用INT8显存占用INT4 显存占用
DeepSeek-R1-671B满血版671B1342.0GB671.0GB335.5GB
DeepSeek-R1 - Distill Llama - 70B蒸馏版70B140.0GB70.0GB35.0GB
DeepSeek-R1 - Distill Qwen - 32B蒸馏版32B64.0GB32.0GB16.0GB
DeepSeek-R1 - Distill Qwen - 14B蒸馏版14B28.0GB14.0GB7.0GB
DeepSeek-R1 - Distill Llama - 8B蒸馏版8B16.0GB8.0GB4.0GB
DeepSeek-R1 - Distill Qwen - 7B蒸馏版7B14.0GB7.0GB3.5GB
DeepSeek-R1 - Distill Qwen - 1.5B蒸馏版1.5B3.0GB1.5GB0.75GB

注:此表为理论计算,因为存在一些化简操作,所以实际部署时,显存占用会略高一些。

由此不难发现,在Ollama上,默认的xxb的DeepSeek-R1实际都是4位精度极致版。

在这里插入图片描述
所以各大厂商吹嘘的各种DeepSeek满血版,没准还是量化的残血版,真正的满血是671b模型+fp16精度!

3. 模型推理显存实践验证

空谈理论,还是缺乏实际数据支撑。
正好实验室的有三张4090D显卡闲置,拿来进行实验。

3.1 单卡32b部署

上表看出32b四位精度所需显存约16.0GB,因此理论上单卡24GB的4090D就可以部署上去。

执行

ollama run deepseek-r1:32b 

发现实际显存占用约21.1GB,这里一方面是计算精度的误差问题,另一方面是KV Cache的问题(这里暂不细究)。因此,实际会比理论计算值略高一些。

在这里插入图片描述

3.2 双卡70b部署

在默认情况下,直接运行

ollama run deepseek-r1:70b 

会报错:

Error: llama runner process has terminated: CUDA error

虽然ollama会自动扫描所有可用显卡,但多卡使用时,必须设置一下OLLAMA_SCHED_SPREAD,以开启调度分布。更多环境变量及含义,可参考[3]。

修改配置文件

vim /etc/systemd/system/ollama.service

OLLAMA_SCHED_SPREAD设为1,开启调度,并设置所用显卡为4,5。

在这里插入图片描述
保存,重新加载配置文件,并重启 ollama 服务。

systemctl daemon-reload
systemctl restart ollama.service

再次执行:

ollama run deepseek-r1:70b 

查看日志:

journalctl -u ollama

可以看到ollama成功识别到了两张显卡:

在这里插入图片描述
4,5显卡显存占用情况:

在这里插入图片描述

总显存占用约为44.6GB。

3.3 三卡70b部署

两张卡已经能顺利部署70b的四位模型,下面再测试一下三卡部署70b的情况。

显卡占用情况如下:

在这里插入图片描述

显存占用约45.3GB,考虑到显卡本身的显存开销,实际双卡和三卡显存占用情况差不多,说明开启调度之后,ollama会自动把显存平均分配给各卡。

4. 训练所需资源估算

现在已经把DeepSeek-R1各版本所需推理显存分析透彻了。对于模型训练,显存的预估会更为复杂,因为有时候训练会涉及混合精度,资料[2]中部分提到了计算方式。

此外,还有16 比特全参数微调、冻结微调、LoRA 微调、QLoRA 微调等各种微调策略,这里挖个坑,后续再继续讨论大模型训练需要多少显存。

这里放一张LLaMA-Factory[4]的模型训练显存预估表,可大致参考:

在这里插入图片描述

参考资料

[1] NVIDIA A100 Tensor Core GPU Architecture :https://images.nvidia.cn/aem-dam/en-zz/Solutions/data-center/nvidia-ampere-architecture-whitepaper.pdf

[2] 一文讲明白大模型显存占用(只考虑单卡):https://zhuanlan.zhihu.com/p/713256008

[3] Ollama笔记(四)Ollama配置 :
https://zhuanlan.zhihu.com/p/712642806

[4] LLaMA-Factory:
https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md


http://www.mrgr.cn/news/93080.html

相关文章:

  • 线程相关八股
  • 机器学习11-经典网络解析
  • 【算法学习之路】5.贪心算法
  • 四、数据存储
  • 大营销平台
  • docker利用docker-compose-gpu.yml启动RAGFLOW,文档解析出错【亲测已解决】
  • Docker 学习(二)——基于Registry、Harbor搭建私有仓库
  • 【JavaEE】线程安全
  • k8s面试题总结(八)
  • redis 与 DB 的一致性 7 种策略
  • 显式 GC 的使用:留与去,如何选择?
  • 【前端】简单原生实例合集html,css,js
  • Spring(二)容器-注册
  • 博客系统测试报告
  • USB2.0学习(1)
  • DeepSeek 助力 Vue3 开发:打造丝滑的弹性布局(Flexbox)
  • 【Mac】2025-MacOS系统下常用的开发环境配置
  • 嵌入式开发:傅里叶变换(5):基于STM32,实现CMSIS中的DSP库
  • Linux 的at定时任务
  • golang的io