分类 预训练 下的文章

一、位置编码的需求

为了理解 RoPE 的重要性,我们首先回顾一下为什么位置编码至关重要。 Transformer 模型根据其固有的设计,不会考虑输入标记的顺序。例如,像“the dog chases the pig ”和“the pig chases the dogs”这样的短语虽然含义不同,但由于它们被视为一组无序的标记,因此被视为无法区分。为了维护序列信息及其含义,需要一个表示来将位置信息集成到模型中。

二、绝对位置编码

1.定义(理解)

在句子的上下文中,假设我们有一个代表一个单词的嵌入。为了对其位置进行编码,需要使用另一个具有相同维度的向量,其中每个向量唯一地代表句子中的一个位置。例如,为句子中的第二个单词指定特定向量。所以每个句子位置都有其独特的向量。然后通过将词嵌入与其相应的位置嵌入求和来形成 Transformer 层的输入。

2. 两种方法来生成这些嵌入

(1).从数据中学习

在这里,位置向量是在训练过程中学习的,就像其他模型参数一样。我们为每个位置(例如从 1 到 512)学习一个唯一的向量。这引入了一个限制——最大序列长度受到限制。如果模型仅学习到位置 512,则它无法表示比该位置更长的序列。

(2).正弦函数:

此方法涉及使用正弦函数为每个位置构建唯一的嵌入。尽管这种构造的细节很复杂,但它本质上为序列中的每个位置提供了独特的位置嵌入。实证研究表明,从数据中学习和使用正弦函数可以在现实世界模型中提供相当的性能。

3.绝对位置编码的局限性

有限序列长度:如上所述,如果模型学习到某个点的位置向量,它本质上不能表示超出该限制的位置。
位置嵌入的独立性:每个位置嵌入都是独立于其他位置嵌入的。这意味着在模型看来,位置 1 和 2 之间的差异与位置 2 和 500 之间的差异相同。但是其实位置 1 和 2 应该比位置 500 相关性更密切,位置 500 距离明显更远。这种相对定位的缺乏可能会阻碍模型理解语言结构的细微差别的能力。

三、相对位置编码

1.定义(理解)

相对位置位置不是关注标记在句子中的绝对位置,而是关注标记对之间的距离。该方法不会直接向词向量添加位置向量。而是改变了注意力机制以纳入相对位置信息。最经典得案例就是T5(Text-to-Text Transfer Transformer)是一种利用相对位置嵌入的著名模型。 T5 引入了一种处理位置信息的微妙方式:

2. 两种方法来生成这些嵌入

位置偏移的偏差: T5 使用偏差(浮点数)来表示每个可能的位置偏移。例如,偏差 B1 可能表示任意两个相距一个位置的标记之间的相对距离,无论它们在句子中的绝对位置如何。

自注意力层中的集成:该相对位置偏差矩阵被添加到自注意力层中的查询矩阵和关键矩阵的乘积中。这确保了相同相对距离的标记始终由相同的偏差表示,无论它们在序列中的位置如何。

可扩展性:该方法的一个显着优点是其可扩展性。它可以扩展到任意长的序列,这比绝对位置嵌入有明显的优势。

3.绝对位置编码的局限性

尽管它们在理论上很有吸引力,但相对位置编码得问题很严重

计算效率低下:必须创建成对的位置编码矩阵,然后执行大量张量操作以获得每个时间步的相对位置编码。特别是对于较长的序列。这主要是由于自注意力层中的额外计算步骤,其中位置矩阵被添加到查询键矩阵中。

键值缓存使用的复杂性:由于每个附加令牌都会改变每个其他令牌的嵌入,这使得 Transformer 中键值缓存的有效使用变得复杂。使用 KV 缓存的一项要求是已经生成的单词的位置编码, 在生成新单词时不改变(绝对位置编码提供)因此相对位置编码不适合推理,因为每个标记的嵌入会随着每个新时间步的变化而变化。由于这些工程复杂性,位置编码未得到广泛采用,特别是在较大的语言模型中。

四、旋转位置编码 (RoPE)

1、定义

RoPE 代表了一种编码位置信息的新方法。传统方法中无论是绝对方法还是相对方法,都有其局限性。
绝对位置编码为每个位置分配一个唯一的向量,虽然简单但不能很好地扩展并且无法有效捕获相对位置;
相对位置编码关注标记之间的距离,增强模型对标记关系的理解,但使模型架构复杂化。

RoPE巧妙地结合了两者的优点。允许模型理解标记的绝对位置及其相对距离的方式对位置信息进行编码

这是通过旋转机制实现的,其中序列中的每个位置都由嵌入空间中的旋转表示。

旋转矩阵源自我们在高中学到的正弦和余弦的三角性质,使用二维矩阵应该足以获得旋转矩阵的理论,如下所示!

2、理解

v2-926c53072768c2e531f1c49135df6ca2_r.jpg
我们看到旋转矩阵保留了原始向量的大小(或长度),如上图中的“r”所示,唯一改变的是与x轴的角度。RoPE 引入了一个新颖的概念。它不是添加位置向量,而是对词向量应用旋转。旋转角度 (θ) 与单词在句子中的位置成正比。第一个位置的向量旋转 θ,第二个位置的向量旋转 2θ,依此类推。这种方法有几个好处:

1、向量的稳定性:在句子末尾添加标记不会影响开头单词的向量,有利于高效缓存。
2、相对位置的保留:如果两个单词在不同的上下文中保持相同的相对距离,则它们的向量将旋转相同的量。这确保了角度以及这些向量之间的点积保持恒定

一、简介

Deepspeed是微软推出的一个开源分布式工具,其集合了分布式训练、推断、压缩等高效模块。
该工具旨在提高大规模模型训练的效率和可扩展性。

它通过多种技术手段来加速训练,包括模型并行化、梯度累积、动态精度缩放、本地模式混合精度等。

DeepSpeed还提供了一些辅助工具,如分布式训练管理、内存优化和模型压缩等,以帮助开发者更好地管理和优化大规模深度学习训练任务。

二 、分布式训练方法

如今的大模型训练,离不开各种分布式的训练框架,一般来说,并行策略包含:数据并行、模型并行、流水线并行。

三种方式:数据并行、模型并行、3D并行

参考:https://juejin.cn/post/7254001262646738981

1、数据并行DP (Data Parallel)

数据并行是最常见的并行形式,因为它很简单。在数据并行训练中,数据集被分割成几个碎片,每个碎片被分配到一个设备上。这相当于沿批次(Batch)维度对训练过程进行并行化。每个设备将持有一个完整的模型副本,并在分配的数据集碎片上进行训练。在反向传播之后,模型的梯度将被全部减少,以便在不同设备上的模型参数能够保持同步。典型的数据并行实现:PyTorch DDP。
数据并行分为了两种模式:
Data Parallel(DP)和 Distributed Data Parallel(DDP)。
(1)Data Parallel(DP)
DP是一种单进程多线程的并行策略,只能在单机上进行训练,步骤如下:

1)单进程控制多GPU,即本质上是单进程多线程;
2)首先将模型加载到主 GPU 上,再复制到各个指定从 GPU;
3)将输入数据按照 Batch 维度进行拆分,各个 GPU 独立进行 forward 计算;
4)将结果同步给主 GPU 完成梯度计算和参数更新,将更新后的参数复制到各个 GPU。
5)由于其是单进程控制多个GPU,故会存在GPU之间负载不均衡的问题,主GPU负载较大。
Distributed Data Parallel(DDP)
DDP采用 AllReduce 架构,多进程的方式,突破锁的束缚。在单机和多机上都可以使用。
负载分散在每个 GPU 节点上,通信成本(时间)是恒定的,与 GPU 数量无关,等于V/B(参数量/带宽)。
DDP不需要通过主GPU分发全模型的参数到每个GPU上。
使用ring-all-reduce的方式进行通讯,随着 GPU 数量 N 增加,总传输量恒定。也就是理论上,随着GPU数量的增加,ring all-reduce有线性加速能力。

72746.png

2、模型并行

通常有两种类型的模型并行:张量并行和流水线并行

  • 流水线并行是在各层之间进行并行计算。
  • 张量并行是在一个操作中进行并行计算,如:矩阵-矩阵乘法。

(1)、流水线并行 PP(Pipeline Parallelism)

流水线并行的核心思想是,模型按层分割成若干块,每块都交给一个设备。
在前向传播过程中,每个设备将中间的激活传递给下一个阶段。
在后向传播过程中,每个设备将输入张量的梯度传回给前一个流水线阶段。
这允许设备同时进行计算,从而增加训练的吞吐量。

微信截图_20240123173407.png

流水线并行训练的一个明显缺点是训练设备容易出现空闲状态(因为后一个阶段需要等待前一个阶段执行完毕),导致计算资源的浪费,加速效率没有数据并行高。

典型的流水线并行实现:GPipe、PipeDream、PipeDream-2BW、PipeDream Flush(1F1B)

(2)、张量并行TP(Tensor Parallelism)

张量并行:张量并行是另一种并行化技术,它通过将大模型的输入和输出张量拆分,使得多个GPU可以同时处理同一输入张量的不同部分,进一步提高了计算效率。

(3)、优化器并行 ???

目前随着模型越来越大,单个GPU的显存目前通常无法装下那么大的模型了。那么就要想办法对占显存的地方进行优化。

通常来说,模型训练的过程中,GPU上需要进行存储的参数包括了模型本身的参数、优化器状态、激活函数的输出值、梯度以及一些零时的Buffer。各种数据的占比如下图所示:
微信截图_20240123174631.png

可以看到模型参数仅占模型训练过程中所有数据的一部分,当进行混合精度运算时,其中模型状态参数(优化器状态 + 梯度+ 模型参数)占到了一大半以上。因此,我们需要想办法去除模型训练过程中的冗余数据。

而优化器相关的并行就是一种去除冗余数据的并行方案,目前这种并行最流行的方法是 ZeRO(即零冗余优化器)。针对模型状态的存储优化(去除冗余),ZeRO使用的方法是分片,即每张卡只存 1/N 的模型状态量,这样系统内只维护一份模型状态。ZeRO有三个不同级别,对模型状态进行不同程度的分片:

ZeRO-1 : 对优化器状态分片(Optimizer States Sharding)
ZeRO-2 : 对优化器状态和梯度分片(Optimizer States & Gradients Sharding)
ZeRO-3 : 对优化器状态、梯度分片以及模型权重参数分片(Optimizer States & Gradients & Parameters Sharding)

微信截图_20240123175131.png

3、3D并行

总的来说,3D并行是由数据并行(DP)、张量并行(TP)和流水线并行(PP)组成

微信截图_20240123180734.png

参考:
https://zhuanlan.zhihu.com/p/598714869

nohup python pre_brand.py>>./train.log 2>&1 &

一、Bloom

1.参考论文

https://arxiv.org/pdf/2211.05100.pdf

2.硬件组成

007.png

3.数据量

epoch:
token:3500亿token
804.png

4.网络参数

模型参数量:176B
059.png

二、GLM

1.参考论文

https://openreview.net/pdf?id=-Aw0rrrPUF

2.硬件组成

56.png

3.数据量

epoch:1
token:4000亿token
3556364264.png

4.网络参数

模型参数量:130B
400.png

三、GPT-3

1.参考论文

https://arxiv.org/pdf/2005.14165.pdf

2.硬件组成

论文中没有说明:
。英伟达表示,GPT-3 需要 512 颗 V100 显卡
训练 7 个月,或者 1024 颗 A100 芯片训练一个月

3.数据量

epoch:1
token:4000亿token
410.png

4.网络参数

模型参数量:175B

四、LLaMa

1.参考论文

https://arxiv.org/pdf/2302.13971.pdf

2.硬件组成

949.png

3.数据量

epoch:1
token:1.4万亿
disk size:4.9TB
257.png

4.网络参数

模型参数量:
参数大小:65B
532.png

模型参数量训练数据disk size训练数据tokens训练时间GPU数量epoch2B参数,500G语料预估训练天数
Bloom176B1.6TB3500亿205天384 A100 80G=30TB显存135天
GLM130B2.4TB4000亿60天768 A100 40G=30TB显存112天
GPT3175B570GB4000亿30天1024 A100 80G=80TB显存112天
LLaMa65B4.9T14000亿21天2048 A100 80G=160TB显存113天
我们2B0.5T1100亿?天8 A100 80G=0.625TB显存112-35天

nvidia apex是什么

APEX是什么 APEX是英伟达开源的,完美支持PyTorch框架,用于改变数据格式来减小模型显存占用的工具。 其中最有价值的是amp(Automatic Mixed Precision),将模型的大部分操作都用Float16数据类型测试,一些特别操作仍然使用Float32。