大模型训练准备工作

一、目录

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.mzph.cn/news/752865.shtml

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

相关文章

python知识点总结(三)

python知识点总结三 1、有一个文件file.txt大小约为10G,但是内存只有4G,如果在只修改get_lines 函数而其他代码保持不变的情况下,应该如何实现? 需要考虑的问题都有那些?2、交换2个变量的值3、回调函数4、Python-遍历列表时删除元素的正确做…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:TextPicker)

滑动选择文本内容的组件。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 TextPicker(options?: {range: string[] | string[][] | Resource | TextPickerRangeContent[] | Te…

Redis-Sentinel哨兵

Redis Sentinel可以通过心跳检测的方式监视多个主服务器以及它们属下的所有从服务器,并在某个主服务器下线时自动对其实施故障转移。 1 启动Sentinel 一个Sentinel配置文件至少需要包含以下选项,用于指定Sentinel要监视的主服务器: sentine…

PyTorch深度学习框架:综合入门与应用指南

引言:掌握PyTorch版本信息的必要性 在深度学习的广阔天地中,PyTorch以其卓越的灵活性和易用性,成为了研究人员和开发者的首选框架。了解正在使用的PyTorch版本对于保证代码的兼容性和项目的顺利进行至关重要。尤其是在多人合作和多环境切换的…

MC0206 小码哥的英语

小码哥在做英语单选题的时候突然想到了一个很有意思的问题:单选题的答案都是A或者B,那么很多道题目的答案组成的就是一个A和B组成的字符串。如果两个相邻的题目的答案是相同的,小码哥就可以修改这两个题目的答案,改成都是A、都是B…

前端流式(stream)请求,获取持续响应的方式

在网络请求中,流(stream)表示持续接收数据的过程。使用流,可以逐步获取服务器响应,而不是等待整个响应完成后一次性获取。 Axios 通过监听响应对象的 data 事件,可以实现流式请求,主要的写法有直接 pipe 流和手动监听事件两种。使用流可以实现大文件或数据的流传输,有效…

深度解读:如何解决Image-to-Video模型视频生成模糊的问题?

Diffusion Models视频生成-博客汇总 前言:目前Image-to-Video的视频生成模型,图片一般会经过VAE Encoder和Image precessor,导致图片中的信息会受到较大损失,生成的视频在细节信息上与输入的图片有较大的出入。这篇博客结合最新的…

怎么在电脑上记录每日事项,并在桌面上显示便签记事本?

作为一名教师兼班主任,我每天的工作繁忙且多样。从早晨的课程准备,到课间的学生辅导,再到课后的作业批改和家长沟通,每一项工作都需要我细心且有条理地完成。在这样的工作节奏下,如何高效管理每日事项,确保…

python for循环打印字符串、指定区间范围数字以及打印区间数字内的奇数和偶数

1.一串字符,循环打印: 源码: strings"Python" n0 print("字符长度为:"str(len(strings))) for a in strings: nn1 print ("第"str(n)"位是:"a)打印结果&#xff1a…

C# delegate的使用

C# 中的delegate(委托)是一种类型安全的函数指针,它安全地封装了方法的签名和引用。 可以将delegate视为一种可引用的方法类型,类似于C或C中的函数指针,但比函数指针更安全、更类型安全。 delegate主要用于事件处理、…

幸福感掉线了?那就去借点“光”吧

做什么事都提不起兴趣,总觉得自己不是很开心但是又难以描述哪里不对劲,遇到想不通的事情总会控制不住地持续内耗自己?当生活不断给你下达负能量挑战时,你是否准备好反击了呢? 这里有一个“借光”故事或许可能帮得上你…

【PyTorch】成功解决TypeError: iteration over a 0-d tensor

【PyTorch】成功解决TypeError: iteration over a 0-d tensor 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您…

【Java IO流】缓冲流和对象流的解析和应用实例

目录 前言 一、缓冲流 四种方式拷贝文件的用时对比 二、对象流 1. 使用对象流写入对象到本地文件 2. 使用对象流读取对象数据 总结 前言 【File文件管理及IO流(基本流)】http://t.csdnimg.cn/uG5Ff 该篇博客中,介绍了学习高级流需要的…

C++ 函数的默认形参和函数重载

C 函数的默认形参和函数重载 函数的默认形参 在C中,函数的默认形参(Default Arguments)允许在函数声明或定义时为一个或多个参数指定默认值。这意味着在调用函数时,如果某个参数没有提供值,则自动使用其默认值。这个…

字节跳动后端工程师实习生笔试题-c++

字节跳动后端工程师实习生笔试题链接 笔试题 1. 最大映射2. 木棒拼图3. 魔法权值4. 或与加 1. 最大映射 有 n 个字符串,每个字符串都是由 A-J 的大写字符构成。现在你将每个字符映射为一个 0-9 的数字,不同字符映射为不同的数字。这样每个字符串就可以看…

金航标和萨科微总经理宋仕强说,中国还有一个优势就是有全世界最大的半导体消费市场

金航标和萨科微总经理宋仕强说,中国还有一个优势就是有全世界最大的半导体消费市场,有超过1万亿人民币的规模,全球占比34%,领先美国(27%),更大幅领先欧洲和日韩,金航标电子是在的中国…

Vue3 watch侦听器

一 侦听响应式ref 侦听响应式ref常量&#xff0c;当常量的ref的value值发生改变时会触发watch 一个小栗子&#xff1a;当输入框的输入内容变化时下方的文本也会跟着改变 <template><div class"box content"><div class"intro"><el…

【C语言】字符分类函数与字符转换函数

1. 字符分类函数 C语言中有⼀系列的函数是专门做字符分类的&#xff0c;也就是⼀个字符是属于什么类型的字符的。 这些函数的使用都需要包含⼀个头文件是 ctype.h 这些函数的使用方法非常类似&#xff0c;我们就讲解⼀个函数的事情&#xff1a; int islower ( int c ); islow…

Linux 15个常用脚本练习(初级)

&#xff08;1&#xff09;用户猜数字 #!/bin/bash # 脚本生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了, # 猜小了或猜大了,直至用户猜对脚本结束。 # RANDOM 为系统自带的系统变量,值为 0‐32767的随机数 # 使用取余算法将随机数变为 1‐100 的…

js中函数参数的归一化处理

在 JavaScript 中&#xff0c;函数参数的归一化处理是一种将不同类型或格式的参数转换为统一的标准或格式的过程。这样做的目的是为了提高代码的灵活性、可维护性和可重用性。 以下是一些常见的函数参数归一化处理的方式&#xff1a; 数据类型转换&#xff1a;将不同类型的参数…