马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 hdy 于 2025-4-28 01:52 编辑
前言最近临危受命,调研了一下DeepSeek需要什么硬件配置才能本地部署。查询中文社区相关资料,发现不少帖存在夸大唬人嫌疑。 于是撰写本文,辅以实验验证,以正试听。 1. 数据精度硬件配置的核心就是显卡的显存。实际部署应用中,不可能拿CPU+大内存的方案进行推理,输出实在过慢。因此,理论上来说,只要显卡的显存容得下模型,部署就没问题。 要从理论角度计算不同参数量版本的模型大概需要多少显存,首先要理清不同精度和模型参数量之间的关系。不谈精度空谈参数量的结论都是耍流氓! 精度类型构成,常见的FP32、FP16等浮点数精度类型通常由符号位(sign)、指数位(exponent)和小数位(mantissa)三部分组成,如下图[1]所示。
符号为0或1,(0表示正,1表示负),指数位影响浮点数范围,小数位影响精度。 指数位越多,数据表示的范围越大;小数位越多,数据表示的精度越高。 除了FP(Floating Point)这种基本格式外,还有TF32(TensorFloat-32)、BF16(Brain Floating Point16)等特殊格式,通过微调范围或精度,做到性能和存储的权衡。 不同格式的基础情况如下表所示。
2. 模型推理显存理论计算
理清数据精度之后,就可以根据模型参数量对所需显存进行理论计算。 比如,DeepSeek-R1 - Distill Qwen - 32B型号的模型,参数量为32B,如果参数精度为FP16,那么实际所需显存量即为32×16bit=32×10亿×16 bit 又因基本比特换算关系: 1 GB = MB = KB = bytes = × 8 = bit即 32×10亿×16 bit = 32××16 / × 8 GB由于32B并不是一个正好的整数,因此计算时,我们姑且认为1000 ≈ 1024,这样一进行化简,就可以得到: 32×10亿×16 bit ≈ 64 GB 理清这个关系之后,对于DeepSeek各版本各精度推理所需显存占用情况就可以同样计算,计算结果如下:
注:此表为理论计算,因为存在一些化简操作,所以实际部署时,显存占用会略高一些。 由此不难发现,在Ollama上,默认的xxb的DeepSeek-R1实际都是4位精度极致版。
所以各大厂商吹嘘的各种DeepSeek满血版,没准还是量化的残血版,真正的满血是671b模型+fp16精度! 3. 模型推理显存实践验证空谈理论,还是缺乏实际数据支撑。 正好实验室的有三张4090D显卡闲置,拿来进行实验。 3.1 单卡32b部署 上表看出32b四位精度所需显存约16.0GB,因此理论上单卡24GB的4090D就可以部署上去。 执行
发现实际显存占用约21.1GB,这里一方面是计算精度的误差问题,另一方面是KV Cache的问题(这里暂不细究)。因此,实际会比理论计算值略高一些。
3.2 双卡70b部署 在默认情况下,直接运行
会报错:
虽然ollama会自动扫描所有可用显卡,但多卡使用时,必须设置一下OLLAMA_SCHED_SPREAD,以开启调度分布。更多环境变量及含义,可参考[3]。 修改配置文件
OLLAMA_SCHED_SPREAD设为1,开启调度,并设置所用显卡为4,5。
保存,重新加载配置文件,并重启 ollama 服务。
再次执行:
查看日志:
可以看到ollama成功识别到了两张显卡:
4,5显卡显存占用情况:
总显存占用约为44.6GB。 3.3 三卡70b部署 两张卡已经能顺利部署70b的四位模型,下面再测试一下三卡部署70b的情况。 显卡占用情况如下:
显存占用约45.3GB,考虑到显卡本身的显存开销,实际双卡和三卡显存占用情况差不多,说明开启调度之后,ollama会自动把显存平均分配给各卡。 4. 训练所需资源估算现在已经把DeepSeek-R1各版本所需推理显存分析透彻了。对于模型训练,显存的预估会更为复杂,因为有时候训练会涉及混合精度,资料[2]中部分提到了计算方式。 此外,还有16 比特全参数微调、冻结微调、LoRA 微调、QLoRA 微调等各种微调策略,这里挖个坑,后续再继续讨论大模型训练需要多少显存。 这里放一张LLaMA-Factory[4]的模型训练显存预估表,可大致参考:
|