原视频:【单卡、多卡 BERT、GPT2 训练性能【100亿模型计划】】
此笔记主要参考了李沐老师的视频,感兴趣的同学也可以去看视频~
视频较长,这里放上笔记,与大家分享~

大模型对于计算资源的要求越来越高,如何在有限的资源下开展训练?

对于公司尤其是个人开发者来说,是一个非常有价值的问题。

本文将主要介绍大模型训练技巧,在单卡和多卡上的不同策略,以及对于性能的评测。

文章目录

  • 1.GPU训练性能的测试脚本
  • 2.设置
  • 3.单卡性能
    • 内存消耗(这里指GPU的内存,即显存)
    • 实验现象
    • 性能优化
      • 1.kernal fusion操作:
      • 2.grad_accum
      • 3.丢弃中间结果
    • Megatron模型库
    • 优化总结
  • 4.多卡性能
    • 数据并行
    • 张量并行
    • ZeRO并行
  • 5.结论
    • 1.使用足够大的批量大小。
    • 2.并行运算
    • 3.设备性能
    • 以上是针对大模型的一些训练技巧,相信可以给大家日常的训练带来一些有价值的建议~
    • 欢迎大家关注我~分享有用的AI算法笔记~

1.GPU训练性能的测试脚本

2.设置


画红框的部分,会影响GPU的性能。

16位是半精度,32位是单精度,64位是双精度。bf16和fp16是精度。

optim是优化器。(adamw其实是一个多此一举的优化器。直接使用adam优化器就行。)

grad_accum表示是否要做梯度的累加。

steps表示要跑多少次的模型更新。

deepspeed是一种跑分布式的方式。


计算量:TFLOPS

huggingface是一个模型库


log文件

读取和解析log文件

核心是读取两个参数:gpu显存的峰值,和每秒读取的样本数

3.单卡性能

内存消耗(这里指GPU的内存,即显存)

1.模型的参数(大模型参数量大,占用空间大)

2.每一层的输出,即前向运算的中间计算结果,也叫activation

3.用的库,背后所占的内存。比如通信、cudnn

一般来说,占大头的是前两个。

注意:使用16位计算,并不能节省模型占用的空间。因为模型还是用32位来存的,模型的权重还是会转化为32位,进行更新。

但是如果使用16位运算,前向计算的中间结果(即activation)是16位的,这样就节省了空间。而且activation的大小和batchsize、序列长度、浮点运算量呈正比,所以如果使用16位运算,可以提高batchsize或者序列长度。

优先使用bf16,其次是fp16。

实验现象

fp32换为了fp16,性能并没有翻倍,说明还有别的地方在使用内存。
可能是内存带宽,造成了GPU性能的瓶颈。

性能优化

1.kernal fusion操作:

麻烦的python操作,用c++的for loop重写一遍。

目的:减少中间变量的读写过程,同时减少调用python运算产生的额外开销。

一般不需要自己重写,直接调用apex库就可以。

2.grad_accum

每次处理完一个batch,不直接更新梯度。而是计算多个batch,将梯度进行累加,再做梯度更新。

如果batchsize=10,grad_accum=4,那么会在总的10*4=40个batch后,才会进行梯度更新。

但是grad_accum或者总的批量大小不能太大,批量大小太大会影响算法的收敛。

做微调的时候,批量大小不能太大,因为数据集本来就不大;如果做预训练,批量大小可以大一些,因为数据集本身就很大。

3.丢弃中间结果

前向运算的时候,每一层的中间结果都会被保存。

可以将中间的一些结果丢弃,节省内存消耗。等运算完最后输出,进行梯度反传的时候,再重新进行前向计算,重新得到中间结果。

增加一部分计算量,换取一部分内存空间,至少能让模型跑起来。

当模型真的非常大的时候,这一操作特别有用!可以用来增加批量大小。

Megatron模型库



Megatron模型库性能好,是因为自己手写了很多算子:

优化总结

1.尽量增加批量大小(提高训练效率)

2.尽量使用16位的浮点数(降低中间结果占用内存数目)

3.使用Megatron这样的模型库(对重点算子,进行了手写,优化性能)

4.多卡性能


NV4表示两张卡使用四条nv-link进行两张GPU的连接。

使用一个脚本进行gpu之间的带宽的测试。

由于除了前向计算和反向计算,通信和模型更新还占用了新能。

所以一张GPU变为两张GPU,性能并没有翻倍。(只有一张GPU,并不需要GPU间的通信)

数据并行


没有使用nv-link,导致通信减慢,耗时明显增加。

nv-link可以增加带块,每次通信可以多传输信息,减少每一轮的通信次数。

数据并行的时候,每次梯度更新,GPU间都要进行通信。

所以使用梯度累加(grad-accum),减少梯度更新次数,从而减少通信次数,可以提高性能。

张量并行

如果有2张GPU,则将每一层的张量计算,拆为两部分。每个GPU计算完一部分张量后,再进行通信的交互。

好处是每张GPU的计算量减少了,坏处是需要计算和通信必须是串行的。

这里无法计算通信事件,因为通信时间都在前向计算和反向计算里了。

TP表示张量并行。TP的时候,梯度累加效果很小。因为通信次数已经很多了,就算减少梯度更新的次数,也没用。

张量并行的好处是,可以训练大模型(比如1.3B的参数量)。将每一层的运算在多个卡上计算。否则,批量大小为1也跑不起来。

由于参数量太大,所以梯度更新、进行优化的时间占比就比较大。所以使用梯度累加,还是有一些效果的。

ZeRO并行


使用ZeRO2,是将整个模型和adam里的状态,将梯度进行切分,每个GPU只需要维护一部分。

这样可以显著降低模型相关的内存占用,可以训练更大的模型。

5.结论

训练大模型的方法

1.使用足够大的批量大小。

一方面可以使得单个的算子的性能上升。另一方面可以降低模型梯度更新和通信带来的额外开销。

处理方法:1.GPU内存更大。2.使用16位运算。3.kernal fusion合并运算。4.梯度累加。5.梯度的ckpt记录中间结果。

但是特别大批量大小,会使得算法收敛变慢,需要更多的迭代才能使得算法收敛。

微调的时候,数据规模小,就不能使用太大的批量大小。预训练的时候,可以使用更大的批量大小。

当GPU数目特别大(成百上千)的时候,每张卡分配到的批量大小也会缩小,这个也需要改变。

2.并行运算

优先在单卡内部做数据并行。因为通信消耗少。

多卡并行。

ZeRO并行。划分模型和中间状态。

张量并行。将每一层的计算切开。

3.设备性能

nvi-link优化通信。

更大内存的GPU。

以上是针对大模型的一些训练技巧,相信可以给大家日常的训练带来一些有价值的建议~

欢迎大家关注我~分享有用的AI算法笔记~

大模型训练技巧|单卡多卡|训练性能评测相关推荐

  1. LLMs:大模型微调技巧的简介、四类微调方法(Prefix Tuning/Prompt Tuning,P-tuning/P-tuning v2​​​​​​​,Adapter Tuning,LoRA/Q

    LLMs:大模型微调技巧的简介.四类微调方法(Prefix Tuning/Prompt Tuning,P-tuning/P-tuning v2,Adapter Tuning,LoRA/QLoRA)之详 ...

  2. 高效又稳定的ChatGPT大模型训练技巧总结,让训练事半功倍!

    文|python 前言 近期,ChatGPT成为了全网热议的话题.ChatGPT是一种基于大规模语言模型技术(LLM, large language model)实现的人机对话工具.现在主流的大规模语 ...

  3. 大模型系统和应用——Transformer预训练语言模型

    引言 最近在公众号中了解到了刘知远团队退出的视频课程<大模型交叉研讨课>,看了目录觉得不错,因此拜读一下. 观看地址: https://www.bilibili.com/video/BV1 ...

  4. 大模型也内卷,Vicuna训练及推理指南,效果碾压斯坦福羊驼

    2023开年以来,大模型进入疯狂内卷状态,大模型的发布都要以"天"为单位进行迭代. 之前,尝试了从0到1复现斯坦福羊驼(Stanford Alpaca 7B) ,下面我们来尝试从0 ...

  5. PyTorch 单卡多卡训练模型常用命令

    linux系统查看gpu情况的三个命令: watch -n 1 nvidia-smi (是nvidia-smi命令的扩展,即实时查看gpu情况,每1秒刷新一次) nvidia-smi gpustat ...

  6. DOCK软件测试大乐,LeDock分子对接与虚拟筛选性能评测

    马上注册,结交更多好友,下载更多分子模拟资源. 您需要 登录 才可以下载或查看,没有帐号?我想注册 x LeDock在Astex Diversity Set以及Kinase 100 set(该测试集针 ...

  7. 单卡30秒预测未来10天全球天气,大模型“风乌”效果超DeepMind,来自上海人工智能实验室...

    允中 发自 凹非寺 量子位 | 公众号 QbitAI 预测未来10天全球天气,仅需30秒. 这一成果来自全球中期天气预报大模型"风乌",这也是全球气象有效预报时间首次突破10天,并 ...

  8. 从分布式训练到大模型训练

    要了解大模型训练难,我们得先看看从传统的分布式训练,到大模型的出现,需要大规模分布式训练的原因.接着第二点去了解下大规模训练的挑战. 从分布式训练到大规模训练 常见的训练方式是单机单卡,也就是一台服务 ...

  9. 《预训练周刊》第66期:智源2022大模型创新论坛、 ChatGPT手把手debug代码、AI与物理的交融...

    No.66 智源社区 预训练组 预 训 练 研究 观点 资源 活动 周刊订阅 告诉大家一个好消息,<预训练周刊>已经开启"订阅功能",以后我们会向您自动推送最新版的&l ...

最新文章

  1. 8 个 Python 高效数据分析的技巧
  2. DropDownList--下拉菜单
  3. 教务查询子系统时序图
  4. 在Hadoop 2.3上运行C++程序各种疑难杂症(Hadoop Pipes选择、错误集锦、Hadoop2.3编译等)
  5. pythorch学习笔记
  6. 文件无刷新上传(swfUpload与uploadify)
  7. C++判断是否为素数、求一个数的因数、质因数分解
  8. C++ 重载赋值运算符与11选5平台修复
  9. 一条命令扫描局域网所以IP地址和MAC地址
  10. 集合的体系结构 0119
  11. 遵循PSR-4的自动加载
  12. IBM:利用闪存提速实时分析 掘金大数据
  13. 211.添加与搜索单词-数据结构设计
  14. 移动网速测试软件,网速测试大师APP
  15. c语言叠阵题目怎么做,选出下列词语书写全正确的一组[]A、贪婪点辍忍军不禁玲珑剔透B、辜负骚扰擎天旱地多姿多采C、小憩茁壮怡然自得头昏目眩D、玷污糟蹋蜂围叠阵明察秋豪...
  16. android USB OTG功能如何打开及实现
  17. 全球城市排行榜:香港不再是“最贵”,丹麦首都“最宜居”,伦敦洛杉矶当选“未来城市”...
  18. C# 利用Excel及Spire.xls实现用户自定义打印模板
  19. 青岛著名地标“石老人”坍塌!数字化三维重建助力景观修复!
  20. Wi-Fi环境下基于注意力机制及深度学习的鲁棒被动感知技术

热门文章

  1. 网管大话电脑(16)
  2. WinSock网络编程经络----读书笔记(3)
  3. 【Kubernetes】 多云管理策略解析
  4. c#索引器的使用与用途
  5. Efinix 使用原厂jtag下载
  6. java swing awt绘制一个图片查看器 图片显示 图片控件
  7. HALCON 22.11来了
  8. 杰理之播歌下通话或者开启 siri 后,通话结束或退出 siri 后音量跟之前不一 致的问题【篇】
  9. win10配置html桌面,Windows配置 | Win10系统配置 - ManageEngine Desktop Central
  10. 我们如何和计算机进行沟通?(一)