当前位置:   article > 正文

LLM系列-大模型技术汇总_pipeline parallelism bubble

pipeline parallelism bubble

LLM系列-大模型技术汇总

1. 大模型技术汇总-参数高效迁移学习方法

(Parameter-efficient Transfer Learning),即固定住Pretrain Language model的大部分参数,仅调整模型的一小部分参数来达到与Full fine-tuning接近的效果(调整的可以是模型自有的参数,也可以是额外加入的一些参数)。
下面这 3 类方法在微调时都固定了预训练参数,只训练添加的额外模块。

  1. adapter
    把一个称为 adapter 的模块插入到预训练模型的中间层
  2. Prefix Tuning
    Prefix-tuning是一种基于前缀的轻量化微调方法,为了增加前缀向量在训练时的稳定性,作者采用了重参数化的方法,通过一个若干较小的前缀向量经过单层MLP生成正常规模的前缀向量。在输入或者隐层添加多个可学习的前缀 tokens
    2.1 - Prompt-Tuning
    是Prefix Tuning的简化版本,只在输入层加入prompt tokens,并不需要加入MLP进行调整来解决难训练的问题,主要在T5预训练模型上做实验。随着预训练模型参数量的增加,Prompt Tuning的方法会逼近Fine-tune的结果。
    2.2. P-tuning
    P-Tuning同样提出将Prompt转换为可以学习的Embedding层,但同时考虑到直接对Embedding参数进行优化会存在这样两个挑战:
    1. Discretenes:对输入正常语料的Embedding层已经经过预训练,而如果直接对输入的prompt embedding进行随机初始化训练,容易陷入局部最优。
    1. Association:没法捕捉到prompt embedding之间的相关关系。

2.3. P-tuning与Prefix-Tuning的区别

    1. 在Prefix Tuning是将额外的embedding加在开头,看起来更像是模仿Instruction指令;而P-Tuning的位置则不固定。
    1. Prefix Tuning通过在每个Attention层都加入Prefix Embedding来增加额外的参数,通过MLP来初始化;而P-Tuning只是在输入的时候加入Embedding,并通过LSTM+MLP来初始化。

2.4. P-tuning-V2
P-Tuning v2的目标就是要让Prompt Tuning能够在不同参数规模的预训练模型、针对不同下游任务的结果上都达到匹敌Fine-tuning的结果。

    1. 不同模型规模:Prompt Tuning和P-tuning这两种方法都是在预训练模型参数规模够足够大时,才能达到和Fine-tuning类似的效果,而参数规模较小时效果则很差。
    1. 不同任务类型:Prompt Tuning和P-tuning这两种方法在sequence tagging任务上表现都很差。

2.5. P-tuning-V2比Prompt Tuning和P-tuning的好處
P-tuning v2方法在多层加入了Prompts tokens作为输入,带来两个方面的好处:

    1. 带来更多可学习的参数(从P-tuning和Prompt Tuning的0.1%增加到0.1%-3%),同时也足够parameter-efficient。
    1. 加入到更深层结构中的Prompt能给模型预测带来更直接的影响。
  1. LoRA
    通过学习两个小参数的低秩矩阵来近似权重矩阵的参数更新
    LoRA是一种基于低秩的轻量化微调方法,也是目前在大模型领域应用最多的方法。相较于Adapter,LoRA不需要对模型添加额外的参数化结构。而相较于Prefix-tuning,LoRA不需要对输入端进行修改。取而代之的是,LoRA通过对模型参数的优化量进行了低秩近似。

其理论依据在于:神经网络通常包含大量的全连接层,并通过执行矩阵乘法来完成前向传播。这些全连接层中的参数矩阵往往是满秩的,对模型的训练过程其实就是在学习优化这些参数矩阵。而预训练模型中的参数矩阵往往存在一个”本征维度“,即我们学习到的这些参数的优化量可以是低秩的,被映射到一个低维空间下也能保持很好的性能。在这样的前提下,我们可以只对参数矩阵中低秩的部分进行优化,并将整体的训练过程表示成一个低秩矩阵的优化过程:

图片

前向传播过程可以表示如下:

图片
A、B是两个低维的矩阵,相较于原本的参数规模,待优化的参数规模被大大减小。整体的流程如下所示:
在这里插入图片描述

在RoBERTa,DeBERTa,GPT-2与GPT-3上,LoRA在只训练极少数参数的情况下取得了接近全参数微调的结果,证明了该方法的有效性。


參考:大模型微调技术汇总

2. 千亿模型并行训练技术

进行并行加速,可以从数据和模型两个维度进行考虑。

2.1. 数据并行(Data Parallelism,DP)

数据进行切分(Partition),并将同一个模型复制到多个设备上,并行执行不同的数据分片。
在数据并行系统中,每个计算设备都有整个神经网络模型的完整副本(Model Replica),进行迭代时,每个计算设备只分配了一个批次数据样本的子集,并根据该批次样本子集的数据进行网络模型的前向计算。假设一个批次的训练样本数为 N,使用 M 个计算设备并行计算,每个计算设备会分配到 N/M 个样本。前向计算完成后,每个计算设备都会根据本地样本计算损失误差得到 梯度 Gi(i 为加速卡编号),并将本地梯度 Gi 进行广播。所有计算设备需要聚合其他加速度卡给 出的梯度值,然后使用平均梯度 (ΣN i=1Gi)/N 对模型进行更新,完成该批次训练。

2.2. 模型并行(Model Parallelism,MP)

对模型进行划分, 将模型中的算子分发到多个设备分别完成

2.2.1. 流水线并行(Pipeline Parallelism,PP)

按模型的层切分到不同设备,即层间并 行或算子间并行(Inter-operator Parallelism)

  • 流水线气泡(Pipeline Bubble)
    计算图中的下游设备(Downstream Device)需要长时 间持续处于空闲状态,等待上游设备(Upstream Device)的计算完成,才能开始计算自身的任务。这种情况导致了设备的平均使用率大幅降低,形成了模型并行气泡(Model Parallelism Bubble),也称为流水线气泡(Pipeline Bubble)
2.2.2. 张量并行 (Tensor Parallelism,TP)

将计算图层内的参数切分到不同设备,即层内并行或算子内并行(Intra-operator Parallelism)


參考:千亿模型并行训练技术

3. 大模型面试高频问题整理

3.1. GPT和Bert的区别?

參考:GPT和Bert的区别

3.2. NLP哪些场景不适用大模型?
  • 推荐
  • 知识图谱
3.3. ChatGPT的优缺点?
3.4. GPT系列的演进?
3.5. 为什么现在的大模型大多是decoder-only的架构?

LLM之所以主要都用Decoder-only架构,除了训练效率和工程实现上的优势外,在理论上是因为Encoder的双向注意力会存在低秩问题,这可能会削弱模型表达能力,就生成任务而言,引入双向注意力并无实质好处。

3.6. LLaMA的主要结构?

在这里插入图片描述

參考:LLaMA v1/2模型结构总览

3.7. 旋转位置编码的原理?
3.8. RMSNorm和LayerNorm的区别?
3.9. GLM是如何结合三种架构的?
3.10. encoder的attention和decoder的attention的区别?
3.11. 常见的大模型finetune方法?
3.12. LoRA的原理,一般用在什么层?
3.13. 低秩矩阵为什么表达能力弱?
3.14. ChatGPT的训练步骤?
3.15. RLHF分为几个阶段?
3.16. PPO的原理?
3.17. 为什么in-context learning有效?
3.18. ChatGPT思维链能力是如何获取的?
3.19. ChatGPT和 instructGPT的区别?
3.20. BPE、wordpiece、sentencepiece的区别?
3.21. attention的复杂度?attention的优化?
3.22. Multihead self-attention代码实现?
3.23. self-attention参数量计算?
3.24. attention中QKV的含义和作用?
3.25. attention mask是如何实现的?
3.26. layer normalization的优化?
3.27. layer normalization和batch normalization的区别?
3.28. 位置编码的方式对比?
3.29. Decoding方式对比?
3.30. Bert的优缺点?MLM和NSP两个任务后续的改进?
3.31. 国内做自研大模型的意义?
3.32. 常见大模型微调技术有哪些?以及区别?
  • p-tuning
    是一种基于参数微调的方法。在P-Tune中,微调的目标是调整模型中的参数,使其能够更好地适应新的任务或数据集。
  • Lora
    是一种基于层级相关性传递的微调方法。在LORA中,先计算出每个输出特征与输入特征之间的重要性权重,然后再通过这些权重来微调模型。
  • 共同的:
    冻结大模型参数,通过小模块来学习微调产生的低秩改变
  • 不同点:
    LORA更注重对特征的解释和理解;P-Tune更注重对模型参数的微调。
  • 适用场景:
    lora:
    解释模型:LORA可以帮助我们更好地理解深度神经网络模型的内部工作机制,从而更好地解释模型的预测结果。
    特征选择:通过计算每个输入特征的重要性权重,LORA可以帮助我们筛选出对模型预测结果影响较大的特征,从而减少特征的维度并提高模型的预测准确性。
    迁移学习:LORA可以将预训练模型微调到新的任务或数据集上,从而加快迁移学习的速度并提高模型的准确性。
    P-Tune:
    新任务或新数据集:P-Tune可以将预训练模型微调到新的任务或数据集上,从而提高模型的准确性和泛化能力。
    领域自适应:在模型需要适应新的领域时,P-Tune可以调整模型参数,从而使模型更好地适应新的数据分布。
    模型压缩:通过微调模型参数,P-Tune可以压缩模型大小,从而减少模型的计算复杂度和存储空间,提高模型的运行效率。
3.33. 常见的向量数据库有哪些

4. 大模型二次训练避坑指南

4.1. 领域自适应预训练

领域自适应预训练(Domain-Adaptive Pretraining),即在所属的领域数据上继续预训练(or 增量预训练、二次预训练)。需要注意以下几点

    1. 分析领域相关性:
    1. 使新数据分布与旧数据分布近似:
      在ChatHome [3]数据比例实验中,以1:5的比例的语料混合,在C-Eval和CMMLU上的表现是最佳的。但是经过了领域内预训练之后,相比于未经过预训练的模型,在C-Eval和CMMLU上,效果均有所下降。
    1. 降低学习率:
      实验发现 [2],当使用较大的学习率2e-5进行训练时,模型在通用数据集上的准确率较高,而在指令任务上的准确率则迅速下降,这表明存在明显的遗忘。当使用较低的学习率(如1e-6和5e-6)时,遗忘现象会明显缓解,但域内准确率也会降低。
    1. 进行warm up:
      蒙特利尔大学研究 [5]表明,当模型经过「充分」训练后,不管多长的预热步数最后的性能都差不多。但前提是「充分训练」,如果只看训练前期的话,使用更长的预热步数,无论是上游任务还是下游任务,模型的 Loss 都要比其他预热步数要低(下游学的快,上游忘的慢)。
    1. 对新任务中参数的变化施加惩罚;
    1. 知识蒸馏(KD),使微调模型的预测结果接近旧模型的预测结果。

參考:注意!大模型二次训练避坑指南

5. 大模型面试之注意力机制的优化总结

在 Transformer 结构中,自注意力机制的时间和存储复杂度与序列的长度呈平方的关系,因此 占用了大量的计算设备内存和并消耗大量计算资源。因此,如何优化自注意力机制的时空复杂度、 增强计算效率是大语言模型需要面临的重要问题。一些研究从近似注意力出发,旨在减少注意力 计算和内存需求,提出了包括稀疏近似、低秩近似等方法。此外,也有一些研究从计算加速设备本 身的特性出发,研究如何更好利用硬件特性对 Transformer 中注意力层进行高效计算。

5.1. 稀疏注意力机制
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/482113
推荐阅读
相关标签
  

闽ICP备14008679号