license: apache-2.0
datasets:
- togethercomputer/RedPajama-Data-1T
OpenLLaMA:LLaMA的开源复现项目
本仓库呈现了Meta AI LLaMA大语言模型的宽松许可开源复现版本。我们发布了基于1万亿token训练的7B和3B模型,以及基于6000亿token训练的13B预览模型。我们提供预训练OpenLLaMA模型的PyTorch和JAX权重、评估结果及与原始LLaMA模型的对比。更多细节请访问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_3b'
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评估模型。但需避免使用快速分词器以确保结果正确,方法如下所示修改评估库代码:
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不同,我们的分词器和权重完全从头训练,因此无需获取原始LLaMA组件。训练时使用了BOS(句子起始)标记(id=1),因此在少样本评估时建议前置该标记以获得最佳效果。
数据集与训练
我们在Together发布的RedPajama数据集(包含1.2万亿token的LLaMA训练数据复现版本)上训练模型。预处理步骤和训练超参数(包括模型架构、上下文长度、训练步数、学习率计划和优化器)完全遵循原始论文。唯一区别是采用RedPajama数据集而非原始数据集。
我们使用基于JAX的训练管线EasyLM在云TPU-v4上训练模型,结合常规数据并行与全分片数据并行(ZeRO第三阶段)平衡吞吐量与内存占用。7B模型最终达到每TPU-v4芯片每秒2200+token的吞吐量。
评估结果
使用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 |
OpenLLaMA 7B |
OpenLLaMA 3B |
OpenLLaMA 13B 600BT |
anli_r1/准确率 |
0.32 |
0.35 |
0.33 |
0.33 |
0.33 |
...(其余表格内容保持原样)... |
|
|
|
|
|
我们移除了CB和WSC任务,因模型在这两个任务上表现异常优异,推测可能是训练数据存在基准污染。
联系方式
欢迎社区反馈,如有问题请提交issue或联系我们。
OpenLLaMA由伯克利AI研究院的Xinyang Geng*与Hao Liu*开发。
*同等贡献
致谢
感谢Google TPU研究云计划提供部分算力资源,特别感谢Jonathan Caton协助协调资源,Google Cloud团队的Rafi Witten和Google JAX团队的James Bradbury优化训练吞吐量。同时感谢Charlie Snell、Gautier Izacard、Eric Wallace、Lianmin Zheng及社区用户的讨论与反馈。
13B模型与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, Gautier and Martinet, Xavier and Lachaux, Marie-Anne and Lacroix, Timoth{\'e}e and Rozi{\`e}re, Baptiste and Goyal, Naman and Hambro, Eric and Azhar, Faisal and others},
journal={arXiv preprint arXiv:2302.13971},
year={2023}
}