赞
踩
LLaMA是今年(2023年)二月份Meta挂在arxiv上的paper,是为数不多的开源的高质量大模型,对开源社区在LLM上的研究助力良多,厥功甚伟。下面我们看看这篇paper的细节。
LLM(Large Language Model)出现以来,大家普遍认为模型参数越多,质量越好。然而,Jordan Hoffmann在Training compute-optimal large language models
的研究中表明,表现最好的模型不是最大的模型,而是一个较小的但在更多的数据上训练过的模型。因此,Hoffmann推荐在200B token上训练10B参数的模型。LLaMA在这之上更进一步,证明了7B的模型在1T token上训练可以取得更好的结果。
LLaMA包含一系列不同尺寸的模型,从7B到65B。虽然尺寸较小,但和一些大的模型也不分轩轾了。比如,LLaMA-13B模型尺寸上仅是GPT-3的十分之一,但效果类似。而LLaMA-65B则可以和Chinchilla以及540B的PaLM相媲美。
跟Chinchilla,GPT-3,PaLM-540B不同,LLaMA仅使用开源的数据。虽然还有其他的模型比如OPT、BLOOM、GLM、GPT-NeoX也是只使用开源数据,但它们效果没有PaLM-62B或Chinchilla好。
模型的训练大致和GPT-3,PaLM以及Chinchilla类似,一言以蔽之,就是在很大的textual数据上用标准optimizer训练一个大的transformer。
数据的组成如下,针对每个数据集的特点,分别做了预处理,对细节感兴趣的可以去翻论文。
使用SentencePiece库的BPE算法进行数据切分。并且用bytes对不知道的UTF-8编码进行处理。最终得到的1.4T的token,在训练中,每个token最多只被用一次。
采纳了其他模型中的一些改进,包括:
Pre-normalization,来自GPT-3,可以稳定训练。
normalize输入而非输出
使用RMSNorm
SwiGLU,来自PaLM,替换了ReLU来获得更好的效果。维度使用的是2/3*4d而不是PaLM中的4d。
Rotary Embedding,来自GPTNeo,替换了绝对位置编码。
其他的模型超参数见下表。
optimizer使用AdamW, beta1=0.9,beta2=0.95。使用cosine learning rate schedule, 最终的learning rate是最高值的十分之一,weight decay 是0.1,2000步warmup。
使用了xformer中的高效的casual multi-head attention实现来内存占用的运行时间。灵感来自PaperSelf-attention does not need o(n^2) memory
,并在Flashattention: Fast and memory-efficient exact attention with io-awareness.
中使用。这个高效是由不存储注意力权重和不计算被mask的key/query分数来达到的。
减少了在反向传播阶段需要重新计算的激活值,具体来说,是将计算量比较大的中间结果存储下来,比如线性层的输出。
要实现这个,我们需要手动实现反向传播函数而不是依赖pytorch的autograd。
为了更好的达到这一点,还需要我们多使用模型和序列并行来降低内存占用。
还需要尽可能的让激活值的计算和GPU间的通信overlap。
在训练65B模型的时候,代码80G内存的2048块A100上每秒每GPU处理380个token。意味着需要21天处理完1.4T token。
不同尺寸的LLaMA的训练曲线如下:
结果有很多,基本大意就是LLaMA不输给其他的更大的模型,这里放一个zero-shot任务上的结果,其他的感兴趣的话可以去翻原始论文。
LLaMA有两个重大意义:
不需要专有数据集,仅仅靠开源数据集就能达到跟之前的好模型类似的结果,让普通研究者可以避开数据这个坑。
模型变小了,开源社区和普通研究者们马马虎虎可以基于这个模型做一些事情了,避开了算力这个坑。斯坦福的羊驼就是一个好例子。
一起交流
想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)
LLaMA: Open and Efficient Foundation Language Models
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。