【PyTorch][chapter 28] 揭秘 Transformer:缩放定律指南

概括

       我们介绍了 LLM 的各种缩放定律,研究了模型损失如何随着训练数据和参数数量的增加而变化。讨论包括对用于解释 LLM 缩放定律的 IsoLoss 轮廓和 IsoFLOPs 切片的解释,从而为优化计算资源提供了见解。

       最后,我们讨论了 FLOP 和 FLOPS 的概念,它们分别衡量计算量和速度。以 GPT-4 或 Llama3 为例,我们阐明了训练 LLM 所涉及的复杂性。在我们的下一篇博客文章中,我们将探讨使用模型并行或数据并行等技术以及微调 LLM 的缩放定律来大规模训练 LLM 的策略,从而进一步深入了解高效的大规模训练技术。


目录:

  1.     缩放定律简介
  2.     OpenAI 和 DeepMind 的实证
  3.     Sample-Efficient LLMs
  4.     Appendix 


一  缩放定律

   论文:《Scaling Laws for Neural Language Models》

              https://arxiv.org/pdf/2001.08361

          各大云服务提供商和众多公司正在大力投资收购数十万个 GPU 集群并利用海量训练数据来开发大型语言模型 (LLM),这已不足为奇。为什么模型越大越好?对于 LLM 而言,下一个 token(1 个 token 约为 0.75 个单词)预测的丢失是可预测且平稳的。事实证明,您只需要知道两个关键变量即可估计其准确性:

     模型中的参数总数 (N) 和用于训练模型的文本 token 的大小 (D)

     参数数量反映了模型学习和表示数据中复杂关系的能力,而训练数据量则使模型能够从更多种类的示例和上下文中学习。

仅使用这两个变量(即 N 和 D),我们就可以预测 LLM 在下一个标记预测任务中的损失。随着我们在更多数据上训练更大的模型,我们继续看到准确性的提高。然而,Transformer 的神经网络架构在过去 7 年中进行了适度修改。我们希望未来的研究能够提出更优化的架构,因为 LLM 以耗能和耗数据而闻名。

LLM 的缩放定律揭示了模型质量如何随着其规模、训练数据量和计算资源的增加而变化这些见解对于应对训练大型模型的复杂性以及做出明智的资源分配决策至关重要。

因此,了解这些扩展规律对于优化 LLM 的开发和部署是必需的,以确保有效利用资源来实现所需的性能水平。

此外,过度拟合的风险与模型大小与数据集大小的比例密切相关建议 D ≥ 5 x 10³ N^(0.74) 以避免模型过度拟合(参见 OpenAI论文中的公式 4.4 )。训练曲线往往遵循可预测的幂律模式,允许根据当前的训练进度粗略预测未来的表现。

 

二  OpenAI 和 DeepMind 的实证实验

        

      从根本上说,研究人员正在试图回答 LLM 缩放定律的问题:

      在以 FLOP、浮点运算衡量的受限计算预算的情况下,模型大小N和训练数据大小D(以令牌数量衡量)的最佳组合是什么,以实现最低损失?

    计算预算有多种形式:PF-天(10¹⁵ FLOP/秒 x 24 小时 x 3600 秒/小时,总计 8.64x10¹⁹ FLOP)是最常见的单位之一。有关 FLOP 的更多详细信息,请参阅附录 1。

人们进行了各种实验来研究语言模型的缩放规律,涉及不同的模型大小、数据集大小和其他因素,例如:

  • 模型大小(N):   范围从 768 到 15 亿个非嵌入参数。
  • 数据集大小(D):从 2200 万到 230 亿个标记不等。
  • 模型形状:            包括深度、宽度、注意力头数量和前馈维度的变化。
  • 上下文长度:
  •               主要为 1024,一些实验使用较短的长度。请注意,人们可能会从各种论文或代码实现中看到上下文长度、上下文窗口大小或块大小。它们都指的是同一件事,即转换器在训练期间看到的最长的连续标记序列,并且可以一次推理。本博客文章中的代码使用块大小。

训练变量:

  • 测试交叉熵损失(L):表示模型的性能。
  • 计算(C):用于训练模型的计算资源。

       尽管这些实验已有近 4 年历史,但它提供了对 LLM 培训要求的深刻理解。当 OpenAI 研究人员研究 LLM 时,有两个重要发现引人注目:

   

首先:    规模对模型损失的影响比模型架构的影响更为明显。规模是指用于训练的参数数量(N)、数据集的大小(D)和计算资源(C,以 FLOP 为单位,如附录 1 中所述)。这些因素共同对模型损失的降低程度产生的影响比架构细节(即改变前馈比、长宽比、注意头尺寸等)更大,如图 2 所示。这意味着增加模型的大小、使用更广泛的数据集和分配更多的计算能力可能会比仅仅调整模型的结构产生更好的结果。

     其次:  如图1所示,当各个缩放因子( N, D , C )不受彼此制约时,模型性能与各个缩放因子( N, D , C )之间存在幂律关系,

如Eq1表中的三种情况所示:

  1. 情况 1:参数 = Nopt(计算高效的模型大小),数据 = Dopt(计算高效的数据令牌大小),计算 = Cmin(计算高效的计算预算)
  2. 情况 2:参数 = 无穷大,数据 = D,计算 = 提前停止
  3. 情况 3:参数 = N,数据 = 无穷大,计算 = 无穷大

这种关系适用于很多种,表明了一种一致的模式,即随着这些因素的增加,性能会可预测地提高。换句话说,随着模型大小、数据集大小或计算资源的扩大,我们可以预期模型性能会得到相应且可预测的改善,遵循幂律趋势。

 

      经验上,OpenAI 的研究人员拟合了 Eq1(即 N,D 为有限,提前停止,固定 batch size 的情况),估计 Nc = 8.8x10¹³,AlphaN = 0.076,AlphaD = 0.095,Dc = 5.4x1⁰¹³。以Llama 3为例,它有 70B 参数和 15T token,因此损失为 L(70x10⁹,15x10¹²)= 1.72。 


三   Sample-Efficient LLMs

论文  Training Compute-Optimal Large Language Models

   https://arxiv.org/pdf/2203.15556

   

      大型模型比小型模型具有更高的样本效率,以更少的优化步骤和更少的数据点达到相同的性能水平。很明显,对于给定的处理的 token,较大的模型实现较低的测试损失,如图 3 所示

    DeepMind 发表了另一篇论文,详细介绍了训练计算优化 LLM 的缩放定律的各种方法,这些方法与 OpenAI 的方法不同。他们进行了 400 多次 LLM 训练,发现对于计算优化训练,模型大小和数据集大小(token 数量)应该相等缩放。

他们应用了三种方法来计算缩放定律,并将他们的发现与 OpenAI 的结果叠加,如图 4 右侧所示。他们发现,为了实现相同的模型性能,这三种方法都建议使用小得多的模型尺寸。也就是说,在给定的计算预算和训练数据的情况下,可以用较小的模型尺寸实现相同的模型性能,如图 4 左侧所示。


 

当 DeepMind 的研究人员将损失建模为模型大小和 token 数量的函数,并使用OpenAI研究人员建议的约束 FLOPs (N, D) ~ 6ND 时,一种有趣的 LLM 缩放定律解释方式就出现了:

 绘制出 IsoLoss 轮廓或 IsoFLOPs 切片,如图 5 所示。为了理解左侧的 IsoLoss 轮廓图,让我们使用第一原理来掌握情况。对于给定的 IsoLoss(黑线),我们的目标是拥有最少的计算能力,这意味着最少的 FLOP。当你追踪所有代表所有 IsoLosses 的最少 FLOP 的点时,这些点可以连接成一条蓝线。这条线被称为有效前沿,这个概念对于在金融或商学院学习过运筹学的人来说很熟悉。

可以使用蓝线推断在计算预算较大(即训练 FLOP 较多)的情况下,最佳模型大小和预测损失可能是多少。例如,在 Gopher 模型中,给定预算的最佳模型大小为 40B 个参数。

为了实现最佳的计算效率训练,DeepMind 建议每 1 个模型参数有 ≥ 20 个训练 token,如图 6 所示。为了便于理解, Meta 发布的Llama 3的 token 与参数比例为 215:1。

  与 OpenAI 的缩放定律方程不同,DeepMind 的科学家使用了不同的缩放方程,并根据经验拟合了 Eq2。他们了解到 E = 1.69,A = 406.4,B = 410.7。以 Llama 3 为例,它是一个具有 70B 参数和 15T 标记的模型。损失为 L(70x10⁹,15x10¹²)= 1.86,比使用 Eq1 的估计值(即 1.72)略高。


四 Appendix 

    以 FLOP(浮点运算)衡量的计算预算

    模型的计算资源或计算复杂度以 FLOP 或浮点运算来衡量。它们用于估计训练和运行模型所需的计算资源,如图 7 的 y 轴所示。

从更直观的角度来看,据估计,OpenAI 使用了 1330 亿 petaFLOP 来训练 GPT4。在计算大型语言模型的 FLOP 时,重要的是要考虑训练过程中涉及的所有操作,包括与嵌入矩阵相关的操作。以下是 Transformer 模型前向传递的 FLOP 计算的细分:

# 参考:https://github.com/Lightning-AI/litgpt/blob/410a7126f82ea550d4a43dab89367547b073b5a3/litgpt/utils.py#L321 def  flops_per_param ( max_seq_length: int , n_layer: int , n_embd: int , n_params: int ) -> int : flops_per_token = 2 * n_params   # 每个参数用于每个网络操作的 MAC(2 FLOPS)# 假设所有样本都有等于块大小的固定长度# 这在微调期间很可能是错误的flops_per_seq = flops_per_token * max_seq_length attn_flops_per_seq = n_layer * 2 * 2 * (n_embd * (max_seq_length** 2 )) return flops_per_seq + attn_flops_per_seq def  assess_flops ( model: "GPT" , training: bool ) -> int : """测量 MFU 的估计 FLOP。参考:* https://ar5iv.labs.arxiv.org/html/2205.05198#A1 * https://ar5iv.labs.arxiv.org/html/2204.02311#A2 """ # 使用所有参数是一种简单的高估,因为并非所有模型参数实际上都有助于# 这个 FLOP 计算(例如嵌入、范数)。因此,与测量的 FLOP 相比,结果将高出固定百分比#(~10%),使结果更低但更现实。 # 为了进行正确的估计,这需要更细粒度的计算,如论文附录 A 中所示。     n_trainable_params = num_parameters(model, require_grad= True )     trainable_flops = flops_per_param(         model.max_seq_length, model.config.n_layer, model.config.n_embd, n_trainable_params     ) # 前向 + 后向 + 梯度 (假设没有梯度积累)     ops_per_step = 3 if training else 1     n_frozen_params = num_parameters(model, require_grad= False )     freeze_flops = flops_per_param(model.max_seq_length, model.config.n_layer, model.config.n_embd, n_frozen_params) # 前向 + 后向    freeze_ops_per_step = 2 if training else 1 return ops_per_step * trainable_flops + freeze_ops_per_step * freeze_flops

要注意的是,此计算仅涵盖前向传递。对于训练,还需要考虑后向传递,这通常涉及类似量的计算。

如果这变得太复杂,经验法则是分布式训练的计算要求(C)约为 6 ND 或 8 ND,其中 N 是 Transformer 的参数数量,D 是训练数据大小,以 token 为单位。C 前向约为 2 ND;C 后向约为 4 ND。

附录 2:以 FLOPS(每秒浮点运算次数)为单位的计算速度

   FLOPS,即每秒浮点运算次数,是计算的速度。下面是 Nvidia A100和H100 GPU 性能表,如图 8 所示。

可以根据表格和计算需求(即 6 ND 估计)估算训练 LLM 所需的 GPU 数量。例如,GPT4 需要 1330 亿petaFLOPs,即 1.33 x 10²⁶ FLOPs(或 1.7 万亿个参数并使用 13 万亿个 token,从而产生 6 x 1.7 x 10¹² x 13 x 10¹²,1.33 x 10²⁶ FLOPs)。假设计算使用稀疏的 FP16 Tensor Core 运行,A100 将提供 624TFLOPS(每秒 6.24 x 10¹⁴ 浮点运算)。据报道,OpenAI 使用了 25,000 台 A100。因此,1.33x10²⁶/(6.24x10¹⁴ x 25,000) = 8525641 秒或 98.67 天,这与报告和帖子一致。很好,计算正确!:)

 翻译 

https://medium.com/sage-ai/demystify-transformers-a-comprehensive-guide-to-scaling-laws-attention-mechanism-fine-tuning-fffb62fc2552


 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

JavaSE(十四)——文件操作和IO

文章目录 文件操作和IO文件相关概念Java操作文件文件系统操作文件内容操作字节流FileOutputStreamFileInputStream代码演示 字符流FileWriterFileReader代码演示 缓冲流转换流 案例练习 文件操作和IO 文件相关概念 文件 通常指的是包含用户数据的文件,如文本文件、…

通过 SSH 管理 WordPress 网站的文件和目录

对于已经具备SSH基础知识的WordPress用户,进一步学习如何通过SSH命令管理网站的文件和目录至关重要。本文将介绍一些初级级别的SSH命令,帮助你更高效地管理WordPress网站的文件系统。 什么是 SSH 及其优势 SSH(Secure Shell)是一…

Cargo Rust 的包管理器

Cargo->Rust 的包管理器 Cargi简介Cargo 的主要功能1. 创建项目2. 管理依赖3. 构建项目4. 运行项目5. 测试代码6. 检查代码7. 生成文档8. 发布和分享包 Cargo 的核心文件1. Cargo.toml2. Cargo.lock **Cargo 的生态系统** 常用命令总结Hello, Cargo! 示例 Cargi简介 Cargo …

VTK知识学习(10)- 渲染引擎

1、前言 vtkProp; vtkAbstractMapper; vtkProperty; vtkCamera; vtkLight; vtkRenderer; vtkRenderWindow; vtkRenderWindowInteractor; vtkTransform; vtkLookupTable;………… 这些类都是与数据显示或渲染相关的。 用计算机图形学的专业词汇来说,就是它…

汽车安全再进化 - SemiDrive X9HP 与环景影像系统 AVM 的系统整合

当今汽车工业正面临著前所未有的挑战与机遇,随著自动驾驶技术的迅速发展,汽车的安全性与性能需求日益提高。在这样的背景下,汽车 AVM(Automotive Visual Monitoring)标准应运而生,成为促进汽车智能化和安全…

STL——vector(1)

博客ID:LanFuRenC系列专栏:C语言重点部分 C语言注意点 C基础 Linux 数据结构 C注意点 今日好题 声明等级:黑色->蓝色->红色 欢迎新粉加入,会一直努力提供更优质的编程博客,希望大家三连支持一下啦 目录 尾…

typecho博客主题美化总结篇—php单文件相册管理

看过我前面两期博客的都知道,最近lz在专心建设自己的博客。因为是基于typecho,用的朴素简洁的博客主题,就注定了各个模块都需要自己亲力亲为的去设计,开发。不过这种经由自己手从无到有,从朴素空白到唯美充实的过程确实也很值得期…

每日一练:【动态规划算法】斐波那契数列模型之

1. 第 N 个泰波那契数(easy) 1. 题目链接:1137. 第 N 个泰波那契数 2. 题目描述 3.题目分析 这题我们要求第n个泰波那契Tn的值,很明显的使用动态规划算法。 4.动态规划算法流程 1. 状态表示: 根据题目的要求及公…

SQL DQL查询操作

1.基本查询 select name,employee.workno,employee.age from employee;select employee.idcard as 身份证号 from employee;select employee.entrydate from employee; select distinct employee.entrydate from employee; 2.条件查询 where select * from employee where i…

Mysql 版本升级-二进制安装方式

8.0.20 -8.0.40 总体参考见下 fw_error_www 前置环境说明 glibc 版本,安装mysql二进制文件时需要匹配,安装的版本只能比系统的低 ldd --version# 查看库的位置 ldd which top | grep "libc.so"逻辑备份 卸载旧版本相关数据(注…

【CSS3】Flex弹性布局

文章目录 前言一、基本概念1.容器和项目:2.主轴和交叉轴: 二、容器属性1.flex-direction:决定主轴的方向,即x轴还是y轴2.flex-wrap:定义项目的换行方式3.flex-flow:flex-direction属性和flex-wrap属性的简写…

vscode集成的终端里backspace键无法退格

解决办法: 搜索“backspace”,然后修改backspce对应的项的快捷键为其它按键组合,如下:

网络抓包工具tcpdump 在海思平台上的编译使用

目录 2:下载源码 1:下载 2:编译 2.1:下载 2.2:编译libpcap 2.3:编译tcpdump 3:使用验证 音视频开发中经常用到抓包工具分析数据,这里是海思平台下的tcpdump工具编译使用流程&a…

详细描述一下Elasticsearch索引文档的过程?

大家好,我是锋哥。今天分享关于【详细描述一下Elasticsearch索引文档的过程?】面试题。希望对大家有帮助; 详细描述一下Elasticsearch索引文档的过程? Elasticsearch的索引文档过程是其核心功能之一,涉及将数据存储到…

Android:任意层级树形控件(有效果图和Demo示例)

先上效果图: 1.创建treeview文件夹 2.treeview -> adapter -> SimpleTreeAdapter.java import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.ListView; i…

Jmeter中的断言(四)

13--XPath断言 功能特点 数据验证:验证 XML 响应数据是否包含或不包含特定的字段或值。支持 XPath 表达式:使用 XPath 表达式定位和验证 XML 数据中的字段。灵活配置:可以设置多个断言条件,满足复杂的测试需求。 配置步骤 添加…

3243.新增道路查询的最短距离

给你一个整数 n 和一个二维整数数组 queries。 有 n 个城市&#xff0c;编号从 0 到 n - 1。初始时&#xff0c;每个城市 i 都有一条单向道路通往城市 i 1&#xff08; 0 < i < n - 1&#xff09;。 queries[i] [ui, vi] 表示新建一条从城市 ui 到城市 vi 的单向道路…

MySQL - 表的约束

文章目录 1、空约束2.默认值3.列描述4.zerofill5.主键6.自增长7.唯一键8.外键 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据的正确性。比如有一个字段是…

VirtualBox安装虚拟机Windows server 2019系统只显示cmd命令窗口

原因&#xff1a; 没注意选用了核心安装选项&#xff0c;此选项不安装图形界面 解决&#xff1a; 方式一&#xff1a;重装虚拟机&#xff0c;选用有图形界面的版本 方式二&#xff1a;在cmd窗口中安装图形界面 Dism /online /enable-feature /all /featurename:Server-Gui-Mgm…

基于卷积神经网络的皮肤病识别系统(pytorch框架,python源码,GUI界面,前端界面)

更多图像分类、图像识别、目标检测等项目可从主页查看 功能演示&#xff1a; 皮肤病识别系统 vgg16 resnet50 卷积神经网络 GUI界面 前端界面&#xff08;pytorch框架 python源码&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神经网络的皮肤病识…