许可协议:apache-2.0
数据集:
- togethercomputer/RedPajama-Data-1T
OpenLLaMA:LLaMA的开源复现项目
本仓库呈现了Meta AI LLaMA大语言模型的宽松许可开源复现版本。我们发布了基于1万亿token训练的30亿、70亿和130亿参数模型,提供预训练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_13b'
tokenizer = LlamaTokenizer.from_pretrained(model_path)
model = LlamaForCausalLM.from_pretrained(
model_path, torch_dtype=torch.float16, device_map='auto',
)
prompt = '问:最大的动物是什么?\n答:'
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组件。训练时我们使用了BOS(句子起始)标记(id=1),因此在少样本评估时建议前置该标记以获得最佳效果。
数据集与训练
我们使用Together发布的RedPajama数据集(包含超过1.2万亿token的LLaMA训练数据集复现版本)进行训练。完全遵循原始LLaMA论文中的预处理步骤和训练超参数,包括模型架构、上下文长度、训练步数、学习率调度和优化器。唯一区别在于数据集选择:OpenLLaMA使用RedPajama而非原始LLaMA的数据集。
我们在云端TPU-v4上使用基于JAX的训练框架EasyLM进行训练,结合常规数据并行与全分片数据并行(ZeRO第三阶段)来平衡吞吐量与内存占用。70亿参数模型最终达到每TPU-v4芯片每秒2200+token的吞吐量。
评估结果
使用lm-evaluation-harness在多任务上进行评估。LLaMA结果由相同评估指标下的原始模型生成。需注意我们的LLaMA评估结果与原始论文存在细微差异,这可能是评估协议不同所致(类似差异见该issue)。同时列出了EleutherAI在Pile数据集上训练的60亿参数模型GPT-J的结果。
原始LLaMA训练了1万亿token,GPT-J训练了5000亿token。如下表所示,OpenLLaMA在多数任务上表现与原始LLaMA和GPT-J相当,部分任务更优。
(此处保留原表格,仅翻译表头)
任务/指标 |
GPT-J 6B |
LLaMA 7B |
LLaMA 13B |
OpenLLaMA 7B |
OpenLLaMA 3B |
OpenLLaMA 13B |
(后续数据行保持原样) |
|
|
|
|
|
|
我们移除了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及社区用户的讨论与反馈。
130亿参数模型与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}
}