暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
42-大模型(LLMs)显存问题面.pdf
85
8页
0次
2025-07-10
5墨值下载
大模型(LLMs)显存问题面
来自: AiGC面试宝典
宁静致远 20230916 21:00
1. 大模型大概有多大,模型文件有多大?
一般放出来的模型文件都是fp16的,假设是一个 n B的模型,那么模型文件占 2n Gfp16加载到显存里做推理也
是占 2n G,对外的pr都是 10n 亿参数的模型。
2. 能否用4 * v100 32G训练vicuna 65b
不能。
(刚发现fastchat上可以通过调用train脚本训练vicuna而非train_mem,其实也是可以训练的)
3. 如果就是想要试试65b模型,但是显存不多怎么办?
最少大概50g显存,可以在llama-65b-int4gptq)模型基础上LoRA[6],当然各种库要安装定制版本的。
4. nB模型推理需要多少显存?
考虑模型参数都是fp162nG的显存能把模型加载。
5. nB模型训练需要多少显存?
基础显存:模型参数+梯度+优化器,总共16nG
activation占用显存,和max lenbatch size有关
解释:优化器部分必须用fp32(似乎fp16会导致训练不稳定),所以应该是2+2+12=16,参考ZeRO论文。
注以上算数不够直观,举个例子?
7Bvicunafsdp下总共160G显存勉强可以训练。(按照上面计算7*16=112G是基础显存)
所以全量训练准备显存20nG大概是最低要求,除非内存充足,显存不够offload内存补。
6. 如何 估算模型所需的RAM
首先,我们需要了解如何根据参数量估计模型大致所需的 RAM,这在实践中有很重要的参考意义。我们需要通
过估算设置 batch_size,设置模型精度,选择微调方法和参数分布方法等。
接下来,我们用LLaMA-6B 模型为例估算其大致需要的内存。
首先考虑精度对所需内存的影响:
其次,考虑模型需要的 RAM 大致分三个部分:
首先,llama 65b的权重需要5* v100 32G才能完整加载到GPU
其次,vicuna使用flash-attention加速训练,暂不支持v100,需要turing架构之后的显卡。
fp32 精度,一个参数需要 32 bits, 4 bytes.
fp16 精度,一个参数需要 16 bits, 2 bytes.
int8 精度,一个参数需要 8 bits, 1 byte.
模型参数
梯度
优化器参数
模型参数:等于参数量*每个参数所需内存。
对于 fp32LLaMA-6B 需要 6B*4 bytes = 24GB内存
对于 int8LLaMA-6B 需要 6B*1 byte = 6GB
扫码加
查看更多
对于常用的 AdamW 来说,需要储存两倍的模型参数(用来储存一阶和二阶momentum)。
除此之外,CUDA kernel 也会占据一些 RAM,大概 1.3GB 左右,查看方式如下。
综上,int8 精度的 LLaMA-6B 模型部分大致需要 6GB+6GB+12GB+1.3GB = 25.3GB 左右。
再根据LLaMA的架构(hidden_size = 4096, intermediate_size =11008, num_hidden_layers = 32,
context_length = 2048)计算中间变量内存。
每个 instance 需要:
所以一张 A10080GB RAM)大概可以在 int8 精度;batch_size = 50 的设定下进行全参数训练。
查看消费级显卡的内存和算力:
2023 GPU Benchmark and Graphics Card Comparison Chart
https://www.gpucheck.com/gpu-benchmark-graphics-card-comparison-chart
7. 如何评估你的显卡利用率
zero3如果没有nvlink,多卡训练下会变慢。但是一直不知道究竟会变得多慢,下面给出几种方法来评估自己在训
练时发挥了多少gpu性能,以及具体测试方法。
7.1 flops比值法
举例:deepspeed实测flops 100tflops,而用的是A100卡理论峰值312tflops,可以得到GPU利用率只有 32.05%
7.2 throughout估计法
举例:
实测训练时处理样本速度为 3 example/s,一共有4卡,max length 2048,则吞吐量为 1536 token/s/gpu
根据llama论文知道,他们训练7B模型的吞吐量约为 3300 token/s/gpu,那么GPU利用率只有46.54%
7.3 torch profiler分析法
利用torch profiler记录各个函数的时间,将结果在tensorboard上展示,在gpu kenel视图下,可以看到tensor core
的利用率,比如30%
梯度:同上,等于参数量*每个梯度参数所需内存。
优化器参数:不同的优化器所储存的参数量不同。
fp32 LLaMA-6BAdamW 需要 6B*8 bytes = 48 GB
int8 LLaMA-6BAdamW 需要 6B*2 bytes = 12 GB
> torch.ones((11)).to("cuda")
> print_gpu_utilization()
>>>
GPU memory occupied: 1343 MB
(4096 +11008)* 2048 *32 * 1byte = 990MB
测试工具:deepspeed
参考数据:nvidia公布的显卡fp16峰值计算速度(tensor core
gpu利用率 = 实测的flops/显卡理论上的峰值flops
测试工具:手动估算 或者 deepspeed
参考数据:论文中的训练速度或者吞吐量
吞吐量 = example数量/秒/GPU * max_length
gpu利用率 = 实际吞吐量 / 论文中的吞吐量(假设利用率100%)
测试工具:torch profiler tensorboard
参考数据:无
of 8
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜