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: 世界上最大的动物是什么?\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评估模型。但鉴于前文所述的分词器问题,需避免使用快速分词器以获得正确结果。具体方法是在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分词器和权重。注意训练时使用了BOS(句首)标记(id=1),因此在少样本评估时最好前置该标记以获得最佳性能。
数据集与训练
我们在Together发布的RedPajama数据集上训练模型,该数据集是包含1.2万亿token的LLaMA训练数据复现版。我们完全遵循原始LLaMA论文的预处理步骤和训练超参数,包括模型架构、上下文长度、训练步数、学习率计划和优化器。唯一区别在于数据集:OpenLLaMA使用RedPajama而非原始LLaMA的数据集。
我们使用基于JAX的训练管道EasyLM在云TPU-v4上训练模型。结合常规数据并行和全分片数据并行(又称ZeRO第三阶段)来平衡训练吞吐量和内存使用。7B模型最终达到每TPU-v4芯片每秒2200+token的吞吐量。
评估
我们使用lm-evaluation-harness在多任务上评估OpenLLaMA。LLaMA结果是通过相同评估指标运行原始LLaMA模型得出。值得注意的是,我们的LLaMA结果与原始论文略有差异,这可能是评估协议不同所致,类似差异在lm-evaluation-harness的该issue中也有报告。我们还展示了EleutherAI在Pile数据集上训练的6B参数模型GPT-J的结果。
原始LLaMA训练了1万亿token,GPT-J训练了5000亿token。评估结果如下表所示。OpenLLaMA在多数任务上表现与原始LLaMA和GPT-J相当,部分任务更优。
(此处保留原始表格结构,内容已中文化)
我们因模型在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模型与Stability AI合作训练,感谢其提供的计算资源。特别感谢David Ha和Shivanshu Purohit协调后勤并提供工程支持。
参考文献
若OpenLLaMA对您的研究或应用有所帮助,请引用以下BibTeX:
@software{openlm2023openllama,
author = {Geng, Xinyang and Liu, Hao},
title = {OpenLLaMA:LLaMA的开源复现},
month = 5月,
year = 2023,
url = {https://github.com/openlm-research/open_llama}
}
@software{together2023redpajama,
author = {Together Computer},
title = {RedPajama-Data:复现LLaMA训练数据集的开源方案},
month = 4月,
year = 2023,
url = {https://github.com/togethercomputer/RedPajama-Data}
}
@article{touvron2023llama,
title={Llama:开放高效的基础语言模型},
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预印本 arXiv:2302.13971},
year={2023}
}