LLaMA: Open and Efficient Foundation Language Models,是一个包含了 7B ~ 65B 参数量的基础语言模型集合。并且仅仅在公开数据集上训练,T级别的数据量,可以达到Sota 水平。

对于要达到的模型性能,最好的模型并不是训练起来最快,而是推理起来要最快,这样才能节省部署成本。比起快速训练一个大模型,利用更长时间来训练一个小模型,能获得更好的推理性能。我们发现用 1T tokens 训练 7B 模型可以达到的性能,比用 200B tokens 训练一个 10B 的模型还要好。

这项工作的重点是使用更多的训练数据,在不同的推理预算内训练一系列模型,使其达到最佳性能,并且对比现有的 LLMs 的性能。比如 LLaMA-13B 在大多数benchmarks 测试中性能优于 GPT-3,而参数量减小了 10x 以上。LLaMA-65B 模型则可比肩目前最好的大模型如 Chinchilla、PaLM-540B。

训练方法

预训练数据

预训练数据如下表:除了Wikipedia & Books 用了2个epoch,其它都只用了1个epoch

模型架构

与LLMs 一致,基于 transformer 来构建模型,并参考了后续模型的一些改进,主要有:

  1. Pre-nomalization 【GPT3】
    提升训练稳定性,使用 RMSNorm 函数归一化 sub-layer 的输入而不是输出 。
  2. SwiGLU 激活函数【PaLM】
    使用 SwiGLU 代替 ReLU 以提升性能。
  3. Rotary Embeddings【GPTNeo】
    使用 Rotary positional embeddings(RoPE)代替 absolute positional embeddings(APE)

Optimizer

使用 AdmW,beta1=0.9, beta2=0.95, warmup 2,000 steps

训练效率提升

  1. causal multi-head attention 减少内存占用(xformers 实现)
  2. 反向过程中减少激活函数的重复计算,并且缓存了如线性层的激活结果,这得手动实现transformer layer 的反向传播代替Pytorch的autograd。
  3. 尽可能多的覆盖掉GPU之间的网络传输和激活函数计算(基于all_reduce算子)

主要成果

zero-shot : 输入任务描述和测试问题,模型输出生成的答案或对提议的答案进行排序。

few-shot(1, 64):输入几个例子(1到64之间)和一个测试问题,模型输出生成的答案或对不同的选项进行排名。

常识性推理

闭卷问答

阅读理解

数学推理

代码生成

大规模多任务语言理解