大模型(LLMs)显存问题面.pdf

计算机与AI
文档页数:5
文档大小:274.24KB
文档格式:pdf
文档分类:计算机与AI
上传会员:
上传日期:
最后更新:

大模型(LLMs)显存问题面

1.大模型大概有多大,模型文件有多大?

一般放出来的模型文件都是fpl6的,假设是一个nB的模型,那么模型文件占2nG,fpl6加载到显存里做推理也是占2nG,对外的pr都是10n亿参数的模型.

2.能否用4*v10032G训练vicuna65b?

不能.首先,llama65b的权重需要5*v10032G才能完整加载到GPU.其次,vicuna 使用flash-attention 加速训练,暂不支持v100,需要 turing 架构之后的显卡.(fastchat上可以通过调用train脚本训练vicuna而非train_mem,其实也是可以训练的)

3.如果就是想要试试65b模型,但是显存不多怎么办?

最少大概50g显存,可以在1lama-65b-int4(gptg)模型基础上LoRA[6],当然各种库要安装定制版本的.

4.nB模型推理需要多少显存?

考虑模型参数都是fp16,2nG的显存能把模型加载.

5.nB模型训练需要多少显存?

基础显存:模型参数梯度优化器,总共16nG.

解释:优化器部分必须用fp32(似乎fp16会导致训练不稳定),所以应该是2212=16,参考ZeRO论文.注:以上算数不够直观,举个例子?7B 的vicuna 在fsdp下总其160G显存勉强可以训练.(按照上面计算7*16=112G是基础显存)所以全量训练准备显存20nG大概是最低要求,除非内存充足,显存不够offload内存补.

activation 占用显存,和 max len、batch size 有关.

6.如何估算模型所需的RAM?

首先,我们需要了解如何根据参数量估计模型大致所需的RAM,这在实践中有很重要的参考意义.我们需要通过估算设置batch_size,设置模型精度,选择微调方法和参数分布方法等.接下来,我们用LLaMA-6B模型为例估算其大致需要的内存.

首先考虑精度对所需内存的影响:

fp32 精度,一个参数需要 32bits 4bytes.fp16 精度,一个参数需要16bits 2bytes.int8 精度,一个参数需要 8 bits 1 byte.

其次,考虑模型需要的RAM大致分三个部分:

模型参数:等于参数量*每个参数所需内存.

对于fp32,LLaMA-6B 需要6B*4 bytes=24GB 内存对于int8,LLaMA-6B 需要6B*1 byte= 6GB

> torch.ones((1 1)).to("cuda") > print_gpu_utilization()>>>GPU memory occupied: 1343 MB

综上,int8精度的LLaMA-6B 模型部分大致需要6GB6GB12GB1.3GB=25.3GB 左右.再根据 LLaMA 的架构(hidden_size =4096 intermediate_size =11008 num_hidden_layers = 32 contex1_length=2048)计算中间变量内存.每个 instance 需要:(4096 11008)* 2048 *32 * 1byte = 990MB所以一张A100(80GBRAM)大概可以在int8精度:batch_size=50的设定下进行全参数训练.查看消费级显卡的内存和算力:

2023 GPU Benchmark and Graphics Card Comparison Charthttps:/

7.如何评估你的显卡利用率

zero3 如果没有nvlink,多卡训练下会变慢.但是一直不知道究竞会变得多慢,下面给出几种方法来评估自己在训练时发挥了多少gpu性能,以及具体测试方法.

7.1 flops 比值法

测试工具:deepspeed参考数据:nvidia公布的显卡fpl6峰值计算速度(tensorcore)gpu利用率=实测的flops/显卡理论上的峰值flops举例:deepspeed 实测flops 100tflops,而用的是A100卡理论峰值312tflops,可以得到GPU利用率只有32.05%

7.2throughout估计法

7.3torchprofiler分析法

测试工具:torch profiler 及 tensorboard参考数据:无利用 torch profiler 记录各个函数的时间,将结果在tensorboard上展示,在gpukenel视图下,可以看到 tensor core 的利用率,比如 30%

总结:以上三种方法,在笔者的实验中能得到差不多的利用率指标. 从准确性上看,方案三>方案一>方案二从易用性上看,方案二>方案一>方案三

如果不想改代码就用方案二估算自己的训练速度是不是合理的,如果想精确分析训练速度的瓶颈还是建议使用方案三.

8.测试你的显卡利用率实现细节篇

8.1如何查看多机训练时的网速?

iftop命令,看网速很方便.

8.2如何查看服务器上的多卡之间的NVLINKtopo?$ nvidia-smi topo -m

8.3如何查看服务器上显卡的具体型号?cd /usr/local/cuda/samples/1_Utilities/deviceQuerymake/deviceQuery

8.4如何查看训练时的flops?(也就是每秒的计算量)

理论上,如果flops比较低,说明没有发挥出显卡的性能.如果基于deepspeed训练,可以通过配置文件很方便的测试."flops_profiler*: { "enabled": true "profile_step": 1 ‘1 :snpou do "module_depth": -1 "detailed": true nu : oryndhno } 参考:

8.5如何查看对deepspeed的环境配置是否正确?

S ds_report

8.6tf32格式有多长?

19位

8.7哪里看各类显卡算力比较?

8.8(torchprofiler)如何查看自已的训练中通信开销?

用pytorch profiler查看,下面给出基于transformers的一种快捷的修改方式. training_trainer_prof.py用记录的pt.trace.json文件放到 tensorboard上,可以看出 tensor core 的利用率.根据实践经验,使用deepspcedzero3时,pcie版本的卡很大部分时间都在通信上,AlIGather和ReduceScatter 的时间超过 tensor core 计算的时间,所以flops 上不去.

资源链接请先登录(扫码可直接登录、免注册)
①本文档内容版权归属内容提供方。如果您对本资料有版权申诉,请及时联系我方进行处理(联系方式详见页脚)。
②由于网络或浏览器兼容性等问题导致下载失败,请加客服微信处理(详见下载弹窗提示),感谢理解。
③本资料由其他用户上传,本站不保证质量、数量等令人满意,若存在资料虚假不完整,请及时联系客服投诉处理。
④本站仅收取资料上传人设置的下载费中的一部分分成,用以平摊存储及运营成本。本站仅为用户提供资料分享平台,且会员之间资料免费共享(平台无费用分成),不提供其他经营性业务。
投稿会员:标准资料
我的头像

您必须才能评论!

手机扫码、免注册、直接登录

 注意:QQ登录支持手机端浏览器一键登录及扫码登录
微信仅支持手机扫码一键登录

账号密码登录(仅适用于原老用户)