别人公司网站进不去,什么是展示型网站建设,为什么要建设企业网站,网页快速开发平台一、目录
1 大模型训练需要多少算力#xff1f; 2. 大模型训练需要多少显存#xff1f; 3. 大模型需要多少数据量训练#xff1f; 4. 训练时间估计 5. epoch 选择经验 6. 浮点计算性能测试
二、实现
1 大模型训练需要多少算力#xff1f;
训练总算力#xff08;Flops 2. 大模型训练需要多少显存 3. 大模型需要多少数据量训练 4. 训练时间估计 5. epoch 选择经验 6. 浮点计算性能测试
二、实现
1 大模型训练需要多少算力
训练总算力Flops 6 * 模型的参数量 * 训练数据的token 数
参考https://blog.csdn.net/qq_29788741/article/details/135411259?utm_mediumdistribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-135411259-blog-134679887.235^v43^controlspm1001.2101.3001.4242.1utm_relevant_index1模型的参数量和训练数据的 token 数之间也有个比例关系这也很容易理解只要把模型想象成数据的压缩版本就行了压缩比总是有极限的。模型的参数量太小就吃不下训练数据里面所有的知识模型的参数量如果大于训练数据的 token 数那又浪费还容易导致 over-fitting。
大模型训练需要多少显存
内存分配 1.模型参数 2. 梯度 3.优化器参数。
chatglm3 6B为例全精度模型参数是float32类型1b(10亿)个模型参数约占用4G显存(实际大小10^9 * 4 / 1024^3 ~ 3.725 GB)那么LLaMA的参数量为6b那么加载模型参数需要的显存为3.725 * 6 ~ 22 GB
5. 训练显存计算大小模型参数占用梯度占用优化器占用CUDA kernel占用LLaMA-6B为例模型参数等于参数量*每个参数所需内存。对于 fp32需要 6B*4 bytes 24GB内存梯度同上等于参数量*每个梯度参数所需内存。对于 fp32需要 6B*4 bytes 24GB内存优化器参数不同的优化器所储存的参数量不同。对于常用的 AdamW 来说需要储存两倍的模型参数用来储存一阶和二阶momentum。fp32 的 AdamW 需要 6B*8 bytes 48 GB除此之外CUDA kernel也会占据一些 RAM大概 1.3GB 左右查看方式如下。综上模型部分大致需要 2424GB48GB1.3GB 97GB 左右大模型需要多少数据量训练
2022 年 9 月DeepMindChinchilla 论文中提出Hoffman scaling laws表明每个参数需要大约 20 个文本token进行训练。比如一个7B的模型需要140B token若每个token使用int32(四字节)进行编码的话就是560GB的数据。训练模型参数量与训练数据量的统计 参考https://zhuanlan.zhihu.com/p/667363516 https://zhuanlan.zhihu.com/p/636812912?utm_id0 4. 训练时间估计
理想清空下训练总算力Flops 6 * 模型的参数量 * 训练数据的token 数一般GPU 利用率在0.3 到 0.55 之间。 GPU峰值每张卡每秒实际做的浮点运算数一般在理论上限的50%以上现在衡量计算速度的标准是TFLOPS。 浮点运算峰值计算能力 每个SM的CUDA核心数 * 每个CUDA核心的时钟频率 * 每个CUDA核心的浮点运算能力。
epoch 选择经验
1 如果你有百万数据量的话一个epoch足够了。如果只有几千上万的数据量可以尝试1~3个epoch
2 深度神经网络以及最新的视觉Transformer模型训练数百个epoch是很常见的操作不过大型语言模型通常指训练1个epoch。研究人员对维基百科的数据进行了一项相关实验相比C4来说他们认为维基百科是高质量的不过事实证明当维基百科数据在训练期间重复多个epoch后发生了退化现象。浮点计算性能测试 import torch
from torch.utils import benchmark
typ torch.float16 #数据精度 #FP16 精度
#typ torch.float32 #数据精度 #tf32
#typ torch.float64 #数据精度 #FP64
n 1024 * 16
a torch.randn(n, n).type(typ).cuda()
b torch.randn(n, n).type(typ).cuda()
t benchmark.Timer( stmta b,globals{a: a, b: b})
x t.timeit(50)
print(2*n**3 / x.median /1e12)V100 测试结果 理论值网址https://www.nvidia.cn/data-center/v100/