1. LLM概述
1.1 常见术语
- UL2 : Unifying Language Learning Paradigms
- RM: Reward Modeling奖励模型
- PPO: 强化学习中使用的一种策略算法, Proximal Policy Optimization, 是一种用于训练 策略神经网络的算法. PPO的主要思想是通过优化一个代理函数来提高策略的性能,代理函数的目标是最大化预期回报。具体来说,PPO通过限制策略更新的步长,使得策略的更新在一定的安全区域内,从而保证策略的稳定性,避免训练过程中出现不稳定的情况。在PPO算法中,代理函数通常采用神经网络来建模,输入是环境的状态,输出是策略的概率分布。代理函数会根据当前的策略和环境的反馈计算一个目标函数,然后通过优化这个目标函数来更新策略。PPO算法在更新策略时采用了两个技术,一个是Clipped Surrogate Objective,另一个是Trust Region Policy Optimization,这两个技术都是为了保证策略的更新在一个合理的范围内。
- DPO: Direct Preference Optimization
- https://zhuanlan.zhihu.com/p/636122434
- paper: https://arxiv.org/pdf/2305.18290.pdf
- SFT: Supervised Fine-Tuning 有监督的微调
- RLHF: Reinforcement Learning from Human Feedback基于人工反馈的强化学习
- CoT : Chain of Thought
- LoRA: Low-Rank Adaptation of Large Language Models: https://github.com/microsoft/LoRA
- LoRA reduces the number of trainable parameters by learning pairs of rank-decompostion matrices while freezing the original weights. This vastly reduces the storage requirement for large language models adapted to specific tasks and enables efficient task-switching during deployment all without introducing inference latency. LoRA also outperforms several other adaptation methods including adapter, prefix-tuning, and fine-tuning.
- Causual Language Modeling: the task of predicting the token after a sequence of tokens is known as causual language modeling.
- TRL : Transformer Reinforcement Learning library
1.2 历史
讲解一下transformer架构的出现解决了什么问题?适用什么场景,做什么任务?
以及之前seq2seq任务常用的模型架构有哪些?有什么瓶颈?
transformers paper: https://arxiv.org/pdf/1706.03762
Transformers

Key Differences:

2. LLM架构
https://arxiv.org/pdf/2304.13712
encoder-decoder & decoder-only的学习目标上的差异是什么?如Loss是如何定义的?

LLM Brands

2.1 常见模型架构
decoder-only, prefix-lm decoder, encoder-decoder,
Moe
diffusion model
LLM模型架构分类:
- Causal Decoder: gpt系列,llama系列, qwen系列, PaLM
- PrefixLM Decoder: U-PaLM, GLM130B,UniLM https://haileyschoelkopf.github.io/blog/2024/prefix-lm/
- Encoder-Decoder: T5, BART

为什么现在的大模型大部分都是decoder-only架构?
第一, 有paper专门讲这个, decoder-only的泛化性能更好: ICML22的 what language model architcture and pretraining objective works best for zero-shot generalization? 在最大5B参数量、170B token数据量的规模下做了一些列实验,发现用next token prediction预训练的decoder-only模型在各种下游任务上zero-shot泛化性能最好;另外,许多工作表明decoder-only模型的few-shot(也就是上下文学习,in-context learning)泛化能力更强。
第二,博采众家之言,分析科学问题,阐述decoder-only泛化性能更好的潜在原因 (摘自知乎):
- @苏剑林 苏神强调的注意力满秩的问题,双向attention的注意力矩阵容易退化为低秩状态,而causal attention的注意力矩阵是下三角矩阵,必然是满秩的,建模能力更强;
(gpt4解释低秩和满秩) 在大模型架构中,如Transformer,Attention机制是核心组成部分,它通过计算序列中各个元素之间的关系来捕捉序列的全局依赖。Attention机制通常有两种形式:双向Attention(又称Self-Attention或非因果Attention)和Causal Attention(因果Attention或单向Attention)。
双向Attention不区分序列中的时间顺序或因果关系,它允许每个元素观察序列中的所有其他元素。这种自由度允许模型在所有位置间进行信息共享,但它也有可能导致注意力分布过度集中于几个关键词汇上,从而形成一个低秩的注意力矩阵。
低秩意味着矩阵的行或列之间依赖性很高,这可能会限制模型的表达能力。举个例子,假设我们有一个句子:“The cat sat on the mat”,并且模型的注意力矩阵主要集中在单词"cat"和"mat"上,其他词的相关性被忽略。这样的注意力矩阵可能会捕捉到"cat"和"mat"之间的关系,但忽视了其他词语之间的潜在关系,从而导致一个低秩的矩阵。
相反,Causal Attention是下三角形的,这意味着在计算每个元素的注意力时,它只考虑该元素之前的元素(包括它自己),而不是整个序列。这种结构确保了模型在生成当前词时,只使用该词之前的信息,遵循了时间或因果序列的自然顺序。
例如,在生成文字的任务中,当模型产生句子“The cat”后,下一个单词的生成只会基于“The”和“cat”,而不会看到“sat”、“on”、“the”、“mat”,因此产生的注意力矩阵为下三角矩阵。这个限制保证了矩阵是满秩的,因为不存在两行或两列是完全相同的。
Causal Attention的满秩特性意味着它能够更好地建模序列中的时间依赖性,尤其是在像语言模型这样的生成任务中。然而,这并不意味着Causal Attention在所有方面都优于双向Attention。事实上,双向Attention在很多情况下能够提供更好的性能,例如在需要理解整个上下文的任务中(比如翻译、问答等)。重要的是选择适合特定任务的注意力机制。
总结来说,双向Attention可能会导致低秩的注意力矩阵,且可能限制了模型捕捉全局依赖性的能力。而Causal Attention的下三角形矩阵结构能保证满秩,更适合模拟序列数据的时间依赖性,但可能在全局上下文理解方面略显不足。 - @yili 大佬强调的预训练任务难度问题,纯粹的decoder-only架构+next token predicition预训练,每个位置所能接触的信息比其他架构少,要预测下一个token难度更高,当模型足够大,数据足够多的时候,decoder-only模型学习通用表征的上限更高;
- @mimimumu 大佬强调,上下文学习为decoder-only架构带来的更好的few-shot性能:prompt和demonstration的信息可以视为对模型参数的隐式微调[2],decoder-only的架构相比encoder-decoder在in-context learning上会更有优势,因为prompt可以更加直接地作用于decoder每一层的参数,微调的信号更强;https://blog.csdn.net/TFATS/article/details/133100383
- 多位大佬强调了一个很容易被忽视的属性,causal attention (就是decoder-only的单向attention)具有隐式的位置编码功能 [3],打破了transformer的位置不变性,而带有双向attention的模型,如果不带位置编码,双向attention的部分token可以对换也不改变表示,对语序的区分能力天生较弱。
第三,既然是工业界面试嘛,肯定要提效率问题,decoder-only支持一直复用KV-Cache,对多轮对话更友好,因为每个token的表示只和它之前的输入有关,而encoder-decoder和PrefixLM就难以做到;
第四,务虚一点,谈谈轨迹依赖的问题:OpenAI作为开拓者勇于挖坑踩坑,以decoder-only架构为基础摸索出了一套行之有效的训练方法和Scaling Law,后来者鉴于时间和计算成本,自然不愿意做太多结构上的大改动,继续沿用decoder-only架构。在工程生态上,decoder-only架构也形成了先发优势,Megatron和flash attention等重要工具对causal attention的支持更好。
2.2 主流LLM系列
gpt系列,llama系列,qwen系列,baichuan系列等等
OpenAI gpt系列

GPT3
- auto-regressive语言模型架构, 参数规模175B, transformer层数达到96,
- 训练数据规模为45T, 过滤后有1T, 有410B tokens.
- 训练资源: 如果1024 张 80GB A100, 那么完整训练 GPT-3 的时长约为 1 个月
- 重要能力
- 语言生成:遵循prompt,生成不全提示词的句子
- 上下文学习:给定任务的几个示例,为新的测试用例生成解决方案
- 世界知识:175B参数中存储了大量的知识和常识
- 论文中提到了GPT-3的不足之处,包括在具体任务上一般不如大量数据finetune的双向语言模型,当前只支持纯文本,不支持多模态生成任务,原始的GPT-3模型对于数据中天然存在的各类bias(如性别,国家,种族等)没有做特殊处理,生成的内容未去除毒性(toxicity)
- 设计理念,主要探索类似人的任务学习和推理能力,包括zero-shot/one-shot/few-shot Learning设定下进行任务的预测。不像我们常见的BERT模型框架,一般采用finetune的方式结合参数更新来做任务适配,GPT3使用in-context learning ,提供instruction 和 demonstration 来做下游任务
ChatGPT

GPT4
- auto-regressive语言模型架构, GPT4参数规模是1.76T
:
- 发布 8B 和 70B(基础和微调)模型,在同类模型中表现强劲(但我们会在排名公布时看到@ @lmsysorg 😃)
- 400B 仍在训练中,但已经侵占了 GPT-4 的领地(例如 84.8 MMLU 对 86.5 4Turbo)。
- Tokenizer:标记数量从 32K(Llama 2) ->增加到 128K(Llama 3),增加了 4 倍。使用更多标记,您可以压缩更长的序列,引用的标记减少 15%,并实现更好的下游性能。
- 架构:与 Llama 2 相比没有重大变化。在 Llama 2 中,只有较大的模型使用了分组查询注意 (GQA),但现在所有模型都使用了,包括最小的 8B 模型。这是注意中的键/值的参数共享方案,可减少推理期间的 KV 缓存大小。这是一个不错的、受欢迎的、降低复杂性的修复和优化。
- 序列长度:上下文窗口中的最大标记数从 4096(Llama 2)和 2048(Llama 1)增加到 8192。这一增加是值得欢迎的,但相对于现代标准(例如 GPT-4 为 128K)来说相当小,我认为许多人都希望在这个轴上有更多的标记。可能会在稍后进行微调(?) 。
- 训练数据。Llama 2 接受了 2 万亿个 token 的训练,Llama 3 的训练数据集则增加到了 15T,其中包括大量注重质量的内容、4 倍以上的代码 token 以及 30 种语言中 5% 的非英语 token。(5% 对于非英语:英语混合来说相当低,因此这肯定是一个以英语为主的模型,但这样已经很不错了 > 0) 。
- 缩放定律。值得注意的是,对于像 8B 参数这样“小”的模型,15T 是一个非常大的数据集,Meta 提到,即使在这一点上,该模型似乎也没有在标准意义上“收敛”。换句话说,我们一直使用的 LLM 明显训练不足,可能比其收敛点少 100-1000 倍或更多。实际上,我真的希望人们延续这一趋势,开始训练和发布更多经过长期训练的甚至更小的模型。
- 系统。Llama 3 据称使用 16K GPU 进行训练,观察到的吞吐量为 400 TFLOPS。虽然没有提到,但我假设这些是 fp16 的 H100,在 NVIDIA 营销材料中,其时钟频率为 1,979 TFLOPS。但我们都知道他们的小星号(* 表示稀疏性)正在做很多工作,而您实际上需要将这个数字除以 2 才能得到实际的 TFLOPS ~990。为什么稀疏性算作 FLOPS?无论如何,请集中注意力 Andrej。因此 400/990 ~= 40% 的利用率,在这么多 GPU 上都还不错!要达到这样的规模,需要大量真正扎实的工程设计。
Qwen2系列
qwen2 technical report: https://qwenlm.github.io/blog/qwen2/
- decoder-only的模型架构
- 位置编码用了RoPE旋转位置向量 (ALIBI)
- RMSNorm和预归一化方法(pre-RMSNorm)以确保训练的稳定性, 增强泛化能力
- 激活函数用的是SwiGLU FFN: 不同于传统FFN的2个矩阵,FFN有三个矩阵, 即三个linear layer + activation, SwiGLU,因此缩小了隐藏层维度,由原来的4倍变成8/3倍
- 练加速用到了FlashAttention
- Qwen2采用分组查询注意力(Grouped Query Attention, GQA)取代传统的多头注意力(Multi-Head Attention, MHA)。GQA优化了推理期间的KV-Cache使用,显著提高了数据处理的吞吐量
- 双块注意力和YARN:为了扩展Qwen2的上下文窗口,Qwen2实现了双块注意(Dual Chunk Attention, DCA),将长序列分割成可管理长度的块。如果输入可以在一个块内处理,DCA会产生与原始注意力机制相同的结果。否则,DCA有助于有效捕捉块内和跨块之间的相对位置信息,从而提升长上下文处理性能。
- 长上下文训练:
- 为了增强Qwen2的长上下文处理能力,团队在预训练的最后阶段将上下文长度从4,096个token增加到32,768个token。
- 为了实现这一目标,团队引入了大量高质量的长数据,并将RoPE的基本频率从10,000修改为1,000,000,以优化长上下文场景中的性能。
- 为了充分利用模型的长度外推潜力,团队采用了YARN机制和双块注意力机制。这些策略使模型能够处理多达131,072 (128k)个token的序列,同时保持高性能,初步实验显示困惑度的下降非常小
3. LLM Training

3.1 数据集
现存大模型中pretraining阶段的数据组成:

数据预处理

3.2 Pretraining & CPT
1T的训练数据,1024 张 80GB A100, 完整训练 GPT-3 的时长约为 1 个月。
3.3 SFT
peft 方法介绍
openai o1的创新点
LORA
https://zhuanlan.zhihu.com/p/649315197
https://zhuanlan.zhihu.com/p/636215898
https://zhuanlan.zhihu.com/p/671089942
LoRA(论文:LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS),该方法的核心思想就是通过低秩分解来模拟参数的改变量,从而以极小的参数量来实现大模型的间接训练。
在涉及到矩阵相乘的模块,在原始的PLM旁边增加一个新的通路,通过前后两个矩阵A,B相乘,第一个矩阵A负责降维,第二个矩阵B负责升维,中间层维度为r,从而来模拟所谓的本征秩(intrinsic rank)。


可训练层维度和预训练模型层维度一致为d,先将维度d通过全连接层降维至r,再从r通过全连接层映射回d维度,其中,r<<d,r是矩阵的秩,这样矩阵计算就从d x d变为d x r + r x d,参数量减少很多。
在下游任务训练时,固定模型的其他参数,只优化新增的两个矩阵的权重参数,将PLM跟新增的通路两部分的结果加起来作为最终的结果(两边通路的输入跟输出维度是一致的),即h=Wx+BAx。第一个矩阵的A的权重参数会通过高斯函数初始化,而第二个矩阵的B的权重参数则会初始化为零矩阵,这样能保证训练开始时新增的通路BA=0从而对模型结果没有影响。
在推理时,将左右两部分的结果加到一起即可,h=Wx+BAx=(W+BA)x,所以只要将训练完成的矩阵乘积BA跟原本的权重矩阵W加到一起作为新权重参数替换原本PLM的W即可,对于推理来说,不会增加额外的计算资源。

如下图,看Lora vs. Adapter Tuning vs. Prefix Tuning的差异
Adapter Tuning: 增加模型深度(串行添加),降维再升维中间加了非线性层,增加模型训练和推理时长
Lora: 增加的是旁路,推理时权重可合并不会产生额外的推理开销,降维再升给,中间没有非线性层。
Prefix Tuning: 在key和value前面加上prefix tokens

3.4 Reward Model
3.5 LLM alignment
● 最透彻的PPO原理和源码解读: https://mp.weixin.qq.com/s?__biz=MzIwNDY1NTU5Mg==&mid=2247487773&idx=1&sn=67e43c40deac758e6b9c98c095f46d97
● ppo实现参考: https://github.com/microsoft/DeepSpeedExamples/blob/master/applications/DeepSpeed-Chat/dschat/rlhf/ppo_trainer.py
● 手撕RLHF-DPO : https://mp.weixin.qq.com/s/zc32XbPDVLEPGQiDl3YXYA
● PPO vs. DPO 对齐擂台的武林纷争: https://mp.weixin.qq.com/s/nQXSkMeUhFTob9GKTD4_lA
● DPO训练日志中的指标解读:
● youtube上的视频讲解:https://www.youtube.com/watch?v=fcHW7xTlMkQ&t=290s
3.5.1 RLHF & PPO INTRO
3.5.2 DPO intro
3.6 Training Framework
分布式框架和集合通信(Collective Communication)
分布式框架采用的常见的底层支撑库,可以归类为以下三类:
● 集合通信库:用于多个计算设备之间的集合通信,常见的有Open MPI, NCCL, Gloo
● 数据加截和预处理库:如nvidia的DALI库
● 分布式通信调度库:Horovod对底层通信库(MPI, NCCL, Gloo)进行了封装,针对tensorflow, Keras, Pytorch和Mxnet等分布式训练框架提供了稳定高效的通信能力。Horovod是各框架标配的第三方库。
通信方式分类:
● P2P: 两个不同进程间的通信,即1对1的。
● 集合通信:和P2P通信相对尖,集合通信是1对多或多对多的。分布式系统中,各个节点间存在大量的集命通信需求,而我们可以通过MPI(Message Passsing Interface)来定义一些比较底层的消息通信行为,如Reduce, Allreduce, Scatter, Gather, Allgather等。
集合通信库:都在MPI的基础上,对各种集合通信的模式和算法做了各自的实现。
● OpenMPI: 是开源MPI实现
● Gloo: 是facebook开源 一套集合通信库
● NCCL: nvidia开源的一套集合通信库,在nvidia硬件上,通信效果比其它的更好。
性能对比结论:
● 对于小张量,openmpi的性能优于nccl.
● 无论workers数量如何,nccl在大张量情况下都优于mpi和gloo.
3.6.1 训练挑战
- 显存效率:模型参数量太大,显存不够用
- 即使目前显存最大的GPU也放不下这些大模型的模型参数。例如:175B参数量的GPT3模型参数需要占用700GB(175B*4bytes)的显存。参数梯度是700GB,Adam优化器状态需要1400GB,共计需要2.8TB的显存。
- 计算效率:训练数据量多,模型参数量大,计算量大,单机训练时间久
- 即使我们能将大模型放在一张GPU上,训练大模型需要的海量计算操作需要耗费很长时间。例如:用英伟达A100显卡训练175B参数量的GPT3模型大约需要288年。

3.6.2 训练加速策略
- 超大规模(TB)模型分布式训练
- 框架:megatron-LM, deepspeed(ZeRO)
- 数据并行,模型并行 (张量并行,pipeline并行, FSDP)
- 3D parallelism (DeepSpeed)(https://github.com/microsoft/DeepSpeed/issues/673#issuecomment-761294041)
- 混合精度训练
- FlashAttention
- GQA/MQA

显存需求量计算:假设使用fp16且是xB (7B)参数量
- 参数 => 2x (2bytes for fp16)
- 梯度 => 2x (一个参数,一个梯度)
- 优化器,如Adam => 12x (fp32存储)
- 参数copy 4x (4 bytes for fp32)
- Momentum 4x
- Variable 4x
Adam update:
wt=wt−1−ηmt^vt^+ϵw_t = w_{t-1} - \eta \frac{\hat{m_t}}{\sqrt{\hat{v_t}} + \epsilon}wt

最低0.47元/天 解锁文章
1048

被折叠的 条评论
为什么被折叠?



