大模型训练准备工作

一、目录

1 大模型训练需要多少算力?
2. 大模型训练需要多少显存?
3. 大模型需要多少数据量训练?
4. 训练时间估计
5. epoch 选择经验
6. 浮点计算性能测试

二、实现

1 大模型训练需要多少算力?

训练总算力(Flops)= 6 * 模型的参数量 * 训练数据的token 数
参考:https://blog.csdn.net/qq_29788741/article/details/135411259?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-135411259-blog-134679887.235^v43^control&spm=1001.2101.3001.4242.1&utm_relevant_index=1

模型的参数量和训练数据的 token 数之间也有个比例关系,这也很容易理解,只要把模型想象成数据的压缩版本就行了,压缩比总是有极限的。模型的参数量太小,就吃不下训练数据里面所有的知识;模型的参数量如果大于训练数据的 token 数,那又浪费,还容易导致 over-fitting。

  1. 大模型训练需要多少显存?
内存分配: 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 左右,查看方式如下。综上,模型部分大致需要 24+24GB+48GB+1.3GB = 97GB 左右
  1. 大模型需要多少数据量训练?
2022 年 9 月,DeepMind(Chinchilla 论文)中提出Hoffman scaling laws:表明每个参数需要大约 20 个文本token进行训练。比如一个7B的模型需要140B token,若每个token使用int32(四字节)进行编码的话,就是560GB的数据。

训练模型参数量与训练数据量的统计在这里插入图片描述
参考:https://zhuanlan.zhihu.com/p/667363516
https://zhuanlan.zhihu.com/p/636812912?utm_id=0
4. 训练时间估计

理想清空下,训练总算力(Flops)= 6 * 模型的参数量 * 训练数据的token 数

在这里插入图片描述
一般GPU 利用率在0.3 到 0.55 之间。 GPU峰值:每张卡每秒实际做的浮点运算数,一般在理论上限的50%以上,现在衡量计算速度的标准是TFLOPS。
浮点运算峰值计算能力 = 每个SM的CUDA核心数 * 每个CUDA核心的时钟频率 * 每个CUDA核心的浮点运算能力。

  1. epoch 选择经验
1   如果你有百万数据量的话,一个epoch足够了。如果只有几千上万的数据量,可以尝试1~3个epoch
2   深度神经网络以及最新的视觉Transformer模型训练数百个epoch是很常见的操作,不过大型语言模型通常指训练1个epoch。研究人员对维基百科的数据进行了一项相关实验,相比C4来说他们认为维基百科是高质量的,不过事实证明,当维基百科数据在训练期间重复多个epoch后发生了退化现象。
  1. 浮点计算性能测试
 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(    stmt='a @ 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/
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/541536.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某鱼弹幕逆向

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018…

系统设计学习(三)限流与零拷贝

七、有哪些常用限流算法? Leaky Bucket 漏桶 漏桶可理解为是一个限定容量的请求队列。想象有一个桶,有水(指请求或数据)从上面流进来,水从桶下面的一个孔流出来。水流进桶的速度可以是随机的,但是水流出桶…

Sublime Text简介、下载、安装、汉化、常用插件和激活——《跟老吕学Python编程》附录资料

Sublime Text简介、下载、安装、汉化、常用插件和激活——《跟老吕学Python编程》附录资料 Sublime Text 简介Sublime Text 下载、安装、汉化、常用插件和激活Sublime Text 官网Sublime Text 下载Sublime Text 安装1.安装2.右键菜单3.启动安装4.耐心等待5.安装完成 Sublime Tex…

社交革命的引领者:探索Facebook如何改变我们的生活方式

1.数字社交的兴起 随着互联网的普及,社交媒体成为我们日常生活的重要组成部分。Facebook作为其中的先驱,从最初的社交网络演变成了一个拥有数十亿用户的全球化平台。它不仅改变了我们与世界互动的方式,还深刻影响了我们的社交习惯、人际关系以…

MapStruct代替BeanUtils.copyProperties ()使用

1.为什么MapStruct代替BeanUtils.copyProperties () 第一:因为BeanUtils 采用反射的机制动态去进行拷贝映射,特别是Apache的BeanUtils的性能很差,而且并不支持所有数据类型的拷贝,虽然使用较为方便,但是强烈不建议使用…

面向对象编程第二式:继承 (Java篇)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…

【PLIO学习总结】laserMapping中的时间戳与状态更新逻辑

本文仅用于个人学习总结记录。如有错误,请批评指正。 0、PLIO简要思路 从PLIO的论文中,可以知道,完整的PLIO算法采用IMU和LiDAR数据同时作为“输入”,维护状态变量包括加速度和角速度。 同时,PLIO是一种distortion-…

YOLOv7改进 | 更换主干网络之PP-LCNet

前言:Hello大家好,我是小哥谈。PP-LCNet是一个由百度团队针对Intel-CPU端加速而设计的轻量高性能网络。它是一种基于MKLDNN加速策略的轻量级卷积神经网络,适用于多任务,并具有提高模型准确率的方法。与之前预测速度相近的模型相比,PP-LCNet具有更高的准确性。此外,对于计…

F-logic DataCube3 任意文件上传漏洞复现(CVE-2024-25832)

0x01 产品简介 F-logic DataCube3是一款用于光伏发电系统的紧凑型终端测量系统。 0x02 漏洞概述 F-logic DataCube3 /admin/setting_photo.php接口处存在任意文件上传漏洞 ,未经身份验证的攻击者可通过该漏洞在服务器端写入后门,获取服务器权限,进而控制整个web服务器。 …

【ShenYu源码阅读】支持提醒通知设计,来看看开源贡献者都做了什么

相信大家碰到源码时经常无从下手🙃,不知道从哪开始阅读,面对大量代码晕头转向,索性就读不下去了,又浪费了一次提升自己的机会😭。 我认为有一种方法,可以解决大家的困扰!那就是通过阅…

【vue.js】文档解读【day 5】| ref模板引用

如果阅读有疑问的话,欢迎评论或私信!! 本人会很热心的阐述自己的想法!谢谢!!! 文章目录 模板引用前言访问模板引用模板引用与v-if、v-show的结合v-for中的模板引用函数模板引用 模板引用 前言 …

如何把Spring的Bean注入到Quartz中

前言 今天写Quartz定时调度的时候遇到了想调用增删改查操作数据库的情况 这时候在Quartz容器中 直接注入bean 但是会出现bean为空的情况, 一、为什么为空 这种情况是因为Quartz容器 中 它读取不到Spring 容器中的bean,所以我们需要加一些方法让他读到 …