llama3论文阅读
背景
MOE(Mixture of Experts)架构是一种机器学习模型设计模式,它通过结合多个专家(experts)系统来提高模型的性能和灵活性。在这种架构中,一个门控网络(gating network)负责决定哪个专家或哪些专家的组合最适合处理给定的输入数据。
MOE架构的核心思想是将复杂的任务分解为多个子任务,每个子任务由一个专家网络处理。这些专家网络可以是不同类型的模型,例如神经网络、决策树或其他机器学习算法。门控网络通常是一个学习如何分配任务的神经网络,它会根据输入数据的特点来决定激活哪个专家网络。
MOE架构的优点包括:
专业化:每个专家可以专注于数据的一个特定方面或子任务,从而提高处理特定问题的效率和准确性。
可扩展性:通过添加更多的专家网络,可以轻松扩展模型的容量和能力。
灵活性:门控网络可以根据输入数据动态选择专家,使得模型能够适应不同的数据分布和任务需求。
MOE架构在许多领域都有应用,尤其是在自然语言处理(NLP)、计算机视觉和推荐系统等需要处理复杂和高维数据的任务中。例如,在NLP中,MOE架构可以用于语言模型,其中不同的专家网络可能专注于不同的语言现象,如语法、语义或上下文理解。
MOE架构的一个著名变体是稀疏门控MOE(Sparse Gated Mixture of Experts),它在Google的Switch Transformer模型中得到了应用,该模型通过使用稀疏门控机制来减少计算资源的消耗,同时保持模型的性能。
稠密Transformer(Dense Transformer)是指传统的Transformer模型,其中所有的注意力头和前馈网络层都是稠密的,即每个输入位置都会参与到每个输出位置的计算中。这与稀疏Transformer(Sparse Transformer)形成对比,后者通过引入稀疏注意力机制来减少计算量和内存需求。
稠密Transformer模型的主要特点包括:
全局注意力:在稠密Transformer中,每个输入位置都可以关注到序列中的所有其他位置,这使得模型能够捕捉长距离依赖关系。
计算复杂度:稠密Transformer的计算复杂度与序列长度的平方成正比(O(n^2)),这在处理非常长的序列时可能会导致计算成本过高。
参数数量:稠密Transformer模型通常包含大量的参数,这使得它们在训练和推理时需要大量的内存和计算资源。
稠密Transformer在许多自然语言处理任务中取得了显著的成功,例如机器翻译、文本摘要、问答系统等。然而,随着序列长度的增加,稠密Transformer的计算成本和内存需求也随之增加,这限制了它们在处理超长文本或需要高吞吐量的应用中的实用性。
为了克服这些限制,研究者们提出了各种稀疏Transformer变体,这些变体通过引入稀疏注意力模式来减少计算量,例如通过限制每个位置只能关注序列中的某些特定位置,或者通过使用局部注意力和全局注意力的组合来平衡计算效率和模型性能。
卖点
多语言,代码,推理,工具使用
最大模型是稠密transformer,上下文是128K
乐,128K纯在宣传,很多时候32K够用了
数据:预训练抓了15个T,逆天
参数量:增加
管理复杂性:DPO(direct preference optimization),RS(rejection sampling)。整体用的算法比较简单,所以复杂度较低
数据集
MMLU:记忆型数据集,记得住分数就高(几年前的评估)
MMLU-Pro:新出的
IFEval:模型对各种指令的理解
llama在调教上一般般,要么是fewshot,要么是Cot,就喜欢不给纯0-shot?调参大师?调成自己最强的展示
3B,70B跨越大,405B提升较小,70B成本适中,适合部署
生成代码时间太长…
对手
MISTRAL: Large Enough
Large2:
120B,拿结果出来薄纱llama3405B
因为mistral是llama1的团队出来创业做的,基本就是对着干
如果使用llama3创造训练微调AI模型,你的名字要包括llama3
预训练
23年年底,数据去重和数据清理
成人网站也去掉了,PII个人敏感信息也去掉了
文字的抽取和清洗:
自定义parser更好地抽取HTML内容。markdown对模型是有害的所以去掉了?但openai不赞同。
meta说模型最初是在纯文本上训练的额,所以去掉了所有mk标记
去重:
URL级别的重复数据消除。我们对整个数据集执行URL级别的重复数据消除。我们保留与每个URL对应的页面的最新版本
MinHash,两篇文档相似则去除
行级别的去重。出现次数大于6次则去除,
启发式过滤:
使用n-gram检测重复率。
过滤掉dirty word。模型还是礼貌一些。
token的分布,使用KL散度测量距离。差太远可能文章质量不高。
基于模型质量的过滤:
让大语言模型对文章质量进行打分
代码和推理性数据:
代码能提高模型的推理能力。
多语言能力;
模型可能不太看中多语言,只要你在英语内训练好,再用一些其他语言的高质量数据学会翻译(他们之间的关系),那就够了
决定数据混合:
知识分类:互联网中艺术和娱乐文章比较多,但模型不要见这么多好,担心满嘴跑或者
小模型训练混合数据,预测结果
退火数据:
有一小撮高质量的数据,担心会淹没在数据海洋之中。所以在模型训练快完成,学习率降低的时候(退火阶段)加入高质量数据,模型能够更细致地学习数据特征
模型架构
数据质量和多样性提高,规模增大
GQA:计算下一个token时候要用到之前的所有kv矩阵,内存占用过高。所以让部分的kv权重矩阵是共享的。比如说每两个做一组,就能节省了一倍。
使用注意力掩码防止同各序列的不同文档的自我注意力。
字典大小128K。
scaling laws:
小小模型的验证误差预测大模型的验证误差,但并不代表大模型的能力。我们真正关心的事具体在benchmark上面的性能。
改变为,预测在下游任务上的loss,跟模型的预测精度算一个关系。这样可以使用之前llama2的数据点了。
算力上升,训练的token数量也在增加
infrastructure, scaling, efficiency:
预训练用了16K H100GPUs,小心让内存传输速度成为瓶颈
小模型使用Infiniband fabric(高性能计算用),大模型使用RDMA over Converged Ethernet(性能微损失)
网络结构:注意散热和电源问题,交换机互联GPU。负载均衡。阻塞控制
并行化:怎么切分数据?
假设现在有神经网络叠在一起,tensor parallelism意思是将每层一分为多份tensor训练
pipeline parallelism是每一层给一个GPU
data parall把数据切块分给不同的GPU集群
context parall长序列文本占用内存太大,切成短序列给不同GPU
pipeline paral可能会出现很多泡泡
数值稳定性
NCCL:类似MPI的一个分布式框架,没办法做那么底层的优化就用全家桶吧)
报错:GPU报错占了30%,GPU内存也报错
debug信息,需要做大量的log记录