license: apache-2.0
datasets:
- tiiuae/falcon-refinedweb
- bigcode/starcoderdata
- togethercomputer/RedPajama-Data-1T
library_name: transformers
OpenLLaMA:LLaMA的开源复现项目
摘要:我们发布OpenLLaMA的公开预览版,这是一个基于宽松许可协议的开源项目,旨在复现Meta AI的LLaMA模型。我们发布了基于不同数据组合训练的3B、7B和13B系列模型。本项目的模型权重可直接替代现有实现中的LLaMA权重。
本仓库展示了基于宽松许可协议对Meta AI LLaMA大语言模型的开源复现。我们发布了基于1万亿token训练的3B、7B和13B系列模型,提供预训练OpenLLaMA模型的PyTorch和JAX权重,以及评估结果与原版LLaMA的对比。v2模型性能优于采用不同数据组合训练的旧版v1模型。更多细节请访问OpenLLaMA项目主页。
权重发布、许可与使用
我们提供两种格式的权重:适用于EasyLM框架的EasyLM格式,以及适用于Hugging Face transformers库的PyTorch格式。训练框架EasyLM和检查点权重均采用宽松的Apache 2.0许可协议。
通过Hugging Face Transformers加载权重
预览版检查点可直接从Hugging Face Hub加载。请注意目前建议避免使用Hugging Face快速分词器,因我们观察到自动转换的快速分词器有时会出现错误分词。可通过直接使用LlamaTokenizer
类,或为AutoTokenizer
类传入use_fast=False
参数实现。使用示例如下:
import torch
from transformers import LlamaTokenizer, LlamaForCausalLM
model_path = 'openlm-research/open_llama_7b_v2'
tokenizer = LlamaTokenizer.from_pretrained(model_path)
model = LlamaForCausalLM.from_pretrained(
model_path, torch_dtype=torch.float16, device_map='auto',
)
prompt = 'Q: What is the largest animal?\nA:'
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
generation_output = model.generate(
input_ids=input_ids, max_new_tokens=32
)
print(tokenizer.decode(generation_output[0]))
高级用法请参考transformers LLaMA文档。
使用LM-Eval-Harness评估
可通过lm-eval-harness评估模型。但鉴于上述分词器问题,需禁用快速分词器以获得正确结果。如下所示传入use_fast=False
参数:
tokenizer = self.AUTO_TOKENIZER_CLASS.from_pretrained(
pretrained if tokenizer is None else tokenizer,
revision=revision + ("/" + subfolder if subfolder is not None else ""),
use_fast=False
)
通过EasyLM加载权重
在EasyLM框架中使用权重请参考EasyLM的LLaMA文档。请注意与原始LLaMA不同,OpenLLaMA的分词器和权重均为全新训练,因此无需获取原始LLaMA的分词器和权重。
数据集与训练
v1模型基于RedPajama数据集训练。v2模型采用Falcon refined-web数据集、StarCoder数据集及RedPajama中的维基百科、arXiv、书籍和StackExchange部分数据的混合训练。我们完全遵循原始LLaMA论文的预处理步骤和训练超参数,包括模型架构、上下文长度、训练步数、学习率调度和优化器。唯一区别在于数据集:OpenLLaMA使用开放数据集而非原始LLaMA的专有数据。
我们使用基于JAX的训练管线EasyLM在云TPU-v4上训练模型,结合常规数据并行和全分片数据并行(ZeRO阶段3)来平衡训练吞吐量和内存使用。7B模型的整体吞吐量超过2200 token/秒/TPU-v4芯片。
评估
我们使用lm-evaluation-harness在多任务上评估OpenLLaMA。LLaMA结果通过相同评估指标运行原始模型获得。需注意我们的LLaMA结果与原始论文略有差异,这可能是评估协议不同所致,类似差异见该issue。同时列出EleutherAI基于Pile数据集训练的6B参数模型GPT-J的结果。
原始LLaMA训练1万亿token,GPT-J训练5000亿token。评估结果如下表所示。OpenLLaMA在多数任务上表现与原始LLaMA和GPT-J相当,部分任务更优。
(此处保留原表格内容,仅翻译表头)
任务/指标 |
GPT-J 6B |
LLaMA 7B |
LLaMA 13B |
OpenLLaMA 7Bv2 |
OpenLLaMA 3B |
OpenLLaMA 7B |
OpenLLaMA 13B |
anli_r1/acc |
0.32 |
0.35 |
0.35 |
0.34 |
0.33 |
0.33 |
0.33 |
anli_r2/acc |
0.34 |
0.34 |
0.36 |
0.35 |
0.32 |
0.36 |
0.33 |
anli_r3/acc |
0.35 |
0.37 |
0.39 |
0.39 |
0.35 |
0.38 |
0.40 |
arc_challenge/acc |
0.34 |
0.39 |
0.44 |
0.39 |
0.34 |
0.37 |
0.41 |
arc_challenge/acc_norm |
0.37 |
0.41 |
0.44 |
0.41 |
0.37 |
0.38 |
0.44 |
arc_easy/acc |
0.67 |
0.68 |
0.75 |
0.73 |
0.69 |
0.72 |
0.75 |
arc_easy/acc_norm |
0.62 |
0.52 |
0.59 |
0.70 |
0.65 |
0.68 |
0.70 |
boolq/acc |
0.66 |
0.75 |
0.71 |
0.72 |
0.68 |
0.71 |
0.75 |
hellaswag/acc |
0.50 |
0.56 |
0.59 |
0.56 |
0.49 |
0.53 |
0.56 |
hellaswag/acc_norm |
0.66 |
0.73 |
0.76 |
0.75 |
0.67 |
0.72 |
0.76 |
openbookqa/acc |
0.29 |
0.29 |
0.31 |
0.30 |
0.27 |
0.30 |
0.31 |
openbookqa/acc_norm |
0.38 |
0.41 |
0.42 |
0.41 |
0.40 |
0.40 |
0.43 |
piqa/acc |
0.75 |
0.78 |
0.79 |
0.79 |
0.75 |
0.76 |
0.77 |
piqa/acc_norm |
0.76 |
0.78 |
0.79 |
0.80 |
0.76 |
0.77 |
0.79 |
record/em |
0.88 |
0.91 |
0.92 |
0.89 |
0.88 |
0.89 |
0.91 |
record/f1 |
0.89 |
0.91 |
0.92 |
0.89 |
0.89 |
0.90 |
0.91 |
rte/acc |
0.54 |
0.56 |
0.69 |
0.57 |
0.58 |
0.60 |
0.64 |
truthfulqa_mc/mc1 |
0.20 |
0.21 |
0.25 |
0.23 |
0.22 |
0.23 |
0.25 |
truthfulqa_mc/mc2 |
0.36 |
0.34 |
0.40 |
0.35 |
0.35 |
0.35 |
0.38 |
wic/acc |
0.50 |
0.50 |
0.50 |
0.50 |
0.48 |
0.51 |
0.47 |
winogrande/acc |
0.64 |
0.68 |
0.70 |
0.66 |
0.62 |
0.67 |
0.70 |
平均分 |
0.52 |
0.55 |
0.57 |
0.56 |
0.53 |
0.55 |
0.57 |
我们移除了CB和WSC任务,因模型在这两个任务上表现异常高,推测可能是训练数据存在基准污染。
联系方式
欢迎社区反馈。如有疑问请提交issue或联系我们。
OpenLLaMA由伯克利AI研究所的Xinyang Geng*与Hao Liu*开发。
*同等贡献
致谢
感谢Google TPU研究云计划提供部分计算资源。特别感谢TPU研究云的Jonathan Caton协助协调资源,Google Cloud团队的Rafi Witten和Google JAX团队的James Bradbury优化训练吞吐量。同时感谢Charlie Snell、Gautier Izacard、Eric Wallace、Lianmin Zheng及社区用户的讨论与反馈。
OpenLLaMA 13B v1模型与Stability AI合作训练,感谢其提供的计算资源。特别感谢David Ha和Shivanshu Purohit的协调与工程支持。
引用
若OpenLLaMA对您的研究或应用有帮助,请引用以下BibTeX:
@software{openlm2023openllama,
author = {Geng, Xinyang and Liu, Hao},
title = {OpenLLaMA: An Open Reproduction of LLaMA},
month = May,
year = 2023,
url = {https://github.com/openlm-research/open_llama}
}
@software{together2023redpajama,
author = {Together Computer},
title = {RedPajama-Data: An Open Source Recipe to Reproduce LLaMA training dataset},
month = April,
year = 2023,
url = {https://github.com/togethercomputer/RedPajama-Data}
}
@article{touvron2023llama,
title={Llama: Open and efficient foundation language models},
author={Touvron, Hugo and Lavril, Thibaut and Izacard, Gaut