大模型训练准备工作

一、目录

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/
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模型标注工作是指对大型机器学习模型进行标注的过程,以便让模型能够理解和处理各种类型的数据。这个过程通常需要人工参与,以提供准确的标签和注释。下面是大模型标注工作的一般开展方式: 1. 数据准备:首先需要准备用于标注的数据集。这些数据可以是文本、图像、音频或视频等形式。数据集应该具有代表性,涵盖模型将要处理的各种情况和场景。 2. 制定标注规范:在进行标注之前,需要制定一套标注规范或指南,以确保标注人员能够按照统一的标准进行工作。标注规范应该清晰明确,包含对不同类型数据的标注要求和标签定义。 3. 招募标注人员:根据项目需求,招募合适的标注人员。标注人员应该具备相关领域的知识和经验,并且能够按照标注规范进行准确的标注工作。 4. 标注过程:标注人员根据标注规范,对数据集进行逐条或逐个样本的标注。他们可能需要对文本进行分类、实体识别、情感分析等操作,对图像进行目标检测、语义分割等操作,对音频进行语音识别、情感识别等操作。 5. 质量控制:为了确保标注质量,需要进行质量控制。可以通过随机抽样一部分数据进行复查,或者与其他标注人员进行交叉验证来检查标注结果的准确性和一致性。 6. 数据管理:标注完成后,需要对标注数据进行管理和整理。可以使用数据库或文件系统来存储和组织标注数据,以便后续的模型训练和评估。 7. 持续迭代:大模型标注工作通常是一个持续迭代的过程。随着模型的不断优化和需求的变化,可能需要对已有的标注数据进行更新或扩充,以提高模型的性能和适应性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值